Структура проекта STM32CubeIDE

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
DmitryR
Встал на лапы
Сообщения: 100
Зарегистрирован: Ср авг 31, 2022 12:10:34

Структура проекта STM32CubeIDE

Сообщение DmitryR »

Помогите разобраться со структурой проекта, хочу вынести некоторые функции из main.c в отдельные файлы, но не совсем получается.
Использую STM32CubeIDE. Сейчас весь проект в main.c, вместе с созданием переменных, дефайнами, функциями инициализации и тд.
Подключаю к проекту новые файлы eeprom.с и eeprom.h, переношу туда функцию, допустим эту

Код: Выделить всё

void ReadEEPROM(uint16_t MemAddress, uint32_t ReadData, uint16_t Size)
{
	HAL_I2C_Mem_Read(&hi2c4, I2C4_DEVICE_ADDRESS, MemAddress, I2C_MEMADD_SIZE_16BIT, ReadData, Size, HAL_MAX_DELAY);
}
eeprom.h

Код: Выделить всё

#ifndef INC_EEPROM_H_
#define INC_EEPROM_H_

#include "main.h"

#endif /* INC_EEPROM_H_ */
eeprom.c

Код: Выделить всё

#include "eeprom.h"

void ReadEEPROM(uint16_t MemAddress, uint32_t ReadData, uint16_t Size)
{
	HAL_I2C_Mem_Read(&hi2c4, I2C4_DEVICE_ADDRESS, MemAddress, I2C_MEMADD_SIZE_16BIT, ReadData, Size, HAL_MAX_DELAY);
}
Выдается ошибка "hi2c4 undeclared".
Как правильно подключить новые файлы и перенести туда функции, чтобы они были доступны так же, как и из main.c?
Реклама
veso74
Поставщик валерьянки для Кота
Сообщения: 1907
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Структура проекта STM32CubeIDE

Сообщение veso74 »

в eeprom.c:
extern I2C_HandleTypeDef hi2c4;

в main.c
#include "eeprom.h"
Реклама
DmitryR
Встал на лапы
Сообщения: 100
Зарегистрирован: Ср авг 31, 2022 12:10:34

Re: Структура проекта STM32CubeIDE

Сообщение DmitryR »

veso74, Помогло, спасибо. Можно еще такой вопрос: если хочу define и переменные (static uint32_t) перенести из main.c в eeprom.c, то в main.c ошибки, если переношу в eeprom.h, то проект собирается, но пишет, что переменные определены, но не используются. Как будет правильно убрать переменные и дефайны в eeprom.c или eeprom.h, но чтобы они были доступны в main.c?
veso74
Поставщик валерьянки для Кота
Сообщения: 1907
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Структура проекта STM32CubeIDE

Сообщение veso74 »

В eeprom.c:
uint16_t x = 1234;

В main.c:
#include "eeprom.h"
...
extern uint16_t x;
...
х = 1000;

но так сложно следить за о взаимосвязи того, что и куда идет и напр. кто изменил значение. Делайте это только, напр. если нет другого пути.

В нормальном случае поместите все данные: #define, константы, переменные как локальные, функции управления и полученные данные с этого устройства, в библиотеку напр. как драйвер внешнего устройства. A взаимодействовать между main и библиотекой: с помощью аргументов ввода/вывода функций. В этом случае, когда на шинах установлено много периферийных устройств, легко сможете обратиться к соответствующему коду, который, нап. является неточным.

Еще одна вещь, которую вижу и мне нравится: файл конфигурации, напр. config.h. Там есть все начальные константы/#define и т.д., к которым пользователь есть доступ к напр. первой настройки. Даже если не понимаем взаимосвязи между кодом, файлами и управлением, можем с "первого взгляда" перепроектировать устройство.
Реклама
Эиком - электронные компоненты и радиодетали
DmitryR
Встал на лапы
Сообщения: 100
Зарегистрирован: Ср авг 31, 2022 12:10:34

Re: Структура проекта STM32CubeIDE

Сообщение DmitryR »

veso74, Ну т.е., например я могу создать переменные в main.c, все их обозначить через extern в main.h и во всем коде их будет видно, но почему-то просто в main.h создать их не получается, сразу идут ошибки.
А есть у Вас пример с config.h? Сгенерированный в stm32cubeIDE не нашел
Реклама
veso74
Поставщик валерьянки для Кота
Сообщения: 1907
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Структура проекта STM32CubeIDE

Сообщение veso74 »

Вопрос организации кода. Может быть по-разному. github: mikaelnousiainen/RS41ng: config.h, config_internal.h
Реклама
Ответить

Вернуться в «ARM»