Всем добра! Есть небольшое вопрос к инженерам-эмбеддерам. Решил поподробнее рассмотреть библиотеку libopencm3 и вдруг неожиданно стало непонятно несколько моментов:
- В каждой папке с конкретным семейством микроконтроллеров есть файл irq.json (например, для STM32F1 он тут libopencm3/include/libopencm3/stm32/f1/) весьма упоротого содержания. Для чего он нужен (то, что в нём перечислены все прерывания, которые может обрабатывать конкретный камень, это и так ясно), не ясно зачем он в формате JSON, и как он влияет на весь проект.
- Также не ясен такой момент: в директории каждого семейства микроконтроллеров есть заголовочные файлы для конкретной периферии, в которых уже на основе выбранного камня подключается соотвествующий хедер.
Например в директории libopencm3/include/libopencm3/stm32/ смотрим в файл adc.h
только где именно выбирается соотвествующий камень, например STM32L1 это так и не нашёл. В libopencm3/cm3/common.h и libopencm3/stm32/memorymap.h об этом умалчивается.
#include <libopencm3/cm3/common.h> #include <libopencm3/stm32/memorymap.h> #if defined(STM32F0) # include <libopencm3/stm32/f0/adc.h> #elif defined(STM32F1) # include <libopencm3/stm32/f1/adc.h> #elif defined(STM32F3) # include <libopencm3/stm32/f3/adc.h> #elif defined(STM32F4) # include <libopencm3/stm32/f4/adc.h> #elif defined(STM32L1) # include <libopencm3/stm32/l1/adc.h> #else # error "stm32 family not defined." #endif
И в кратце вопросов два: зачем нужен irq.json (и каким образом он пишется) и где выбирать конкретный камень, например STM32L1?