Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Пн окт 09, 2023 12:21:47

Помогите разобраться со структурой проекта, хочу вынести некоторые функции из 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?

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

Пн окт 09, 2023 14:03:59

в eeprom.c:
extern I2C_HandleTypeDef hi2c4;

в main.c
#include "eeprom.h"

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

Вт окт 10, 2023 05:56:04

veso74, Помогло, спасибо. Можно еще такой вопрос: если хочу define и переменные (static uint32_t) перенести из main.c в eeprom.c, то в main.c ошибки, если переношу в eeprom.h, то проект собирается, но пишет, что переменные определены, но не используются. Как будет правильно убрать переменные и дефайны в eeprom.c или eeprom.h, но чтобы они были доступны в main.c?

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

Вт окт 10, 2023 15:55:20

В eeprom.c:
uint16_t x = 1234;

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

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

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

Еще одна вещь, которую вижу и мне нравится: файл конфигурации, напр. config.h. Там есть все начальные константы/#define и т.д., к которым пользователь есть доступ к напр. первой настройки. Даже если не понимаем взаимосвязи между кодом, файлами и управлением, можем с "первого взгляда" перепроектировать устройство.

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

Ср окт 11, 2023 06:10:30

veso74, Ну т.е., например я могу создать переменные в main.c, все их обозначить через extern в main.h и во всем коде их будет видно, но почему-то просто в main.h создать их не получается, сразу идут ошибки.
А есть у Вас пример с config.h? Сгенерированный в stm32cubeIDE не нашел

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

Ср окт 11, 2023 07:57:46

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