Кто любит RISC в жизни, заходим, не стесняемся.
Пн окт 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?
Пн окт 09, 2023 14:03:59
в eeprom.c:
extern I2C_HandleTypeDef hi2c4;
в main.c
#include "eeprom.h"
Вт окт 10, 2023 05:56:04
veso74, Помогло, спасибо. Можно еще такой вопрос: если хочу define и переменные (static uint32_t) перенести из main.c в eeprom.c, то в main.c ошибки, если переношу в eeprom.h, то проект собирается, но пишет, что переменные определены, но не используются. Как будет правильно убрать переменные и дефайны в eeprom.c или eeprom.h, но чтобы они были доступны в main.c?
Вт окт 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 и т.д., к которым пользователь есть доступ к напр. первой настройки. Даже если не понимаем взаимосвязи между кодом, файлами и управлением, можем с "первого взгляда" перепроектировать устройство.
Ср окт 11, 2023 06:10:30
veso74, Ну т.е., например я могу создать переменные в main.c, все их обозначить через extern в main.h и во всем коде их будет видно, но почему-то просто в main.h создать их не получается, сразу идут ошибки.
А есть у Вас пример с config.h? Сгенерированный в stm32cubeIDE не нашел
Ср окт 11, 2023 07:57:46
Вопрос организации кода. Может быть по-разному. github: mikaelnousiainen/RS41ng:
config.h,
config_internal.h
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.