Всем привет. Прошу прощение за корявое название темы )
Суть вопроса такова- пишу проект на STM32 в CooCox IDE.
В проекте используется SPI, прерывания от него и от GPIO.
Вопрос- как грамотно разложить код проекта по файлам.
в main.c у меня находится только основной цикл и перед ним вызов всех инициализирующих функций.
В Configuration.c / .h Хранятся функции инициализации всего (RCC, EXTI, GPIO, SPI......)
В stm32f10x_it.c Находятся обработчики прерываний от SPI и от GPIO
В SPIProtocol.c / .h Хранится логика протокола обмена данными по SPI
Естественно в функциях обработки прерываний от SPI используются переменные и функции, определенные в SPIProtocol.c
При компиляции ошибок и предупреждений нет. Однако протокол работает не правильно. Если обработчик прерывания от SPI перенести в файл SPIProtocol.c - то все начинает работать нормально.
С чем это связано?
Я пробовал и подключать SPIProtocol.h через инклуд, чтобы объявленные там переменные и функции стали доступны. И пробовал объявлять их заново в stm32f10x_it.c через extern. Результат один- работает не правильно.
Как все-таки правильно разбивать проект на файлы?
Еще бывает, что одно прерывание используют две совершенно логически не связанные части программы. Например это справедливо для прерываний от GPIO. Для EXTI от 10 до 15 одно общее прерывание. Однако, ножки эти могут быть назначены совсем разным логическим частям программы. Допустим одна обрабатывает LCD экран, другая энкодер. Логично было бы создать свои файлы - один для алгоритма работы с энкодером, а второй для индикатора. Куда тогда девать общий обработчик прерывания?
Спасибо. Надеюсь не очень сумбурно получилось.
|