Я пытаюсь создать таблицу прерываний для STM32 с c ++ 14.Настройка этой таблицы с атрибутом section
и соответствующим сценарием ld работает нормально:
[[gnu::section(".interrupt_vector_table")]]
static const InterruptHandle interrupts[66] = {
nullptr,
ResetHandler,
nullptr,
...
};
Также я реализовал некоторую переносимость с помощью таких шаблонов, как:
enum MCU {F103x6, F103x8, ...};
template<MCU T> class stm;
template<> class stm<F103x8> {
void set_pin(...);
...
};
Что яхочу сделать таблицу прерываний более гибкой (разрешить определять только используемые прерывания и оставить другие по умолчанию) и переместить ее в класс stm
, чтобы можно было использовать его следующим образом:
stm<F103x8, interrupt<TIM2_IRQ, my_handler>> cpu;
int main() {
cpu.init_clock();
...;
}
Но я не могунайти клей, как заставить его работать - я не могу определить статический член класса и инициализировать его массивом - много разных вариантов кода, таких как следующий, дает мне constexpr needed for in-class initialization of static data member
:
template <MCU T> class stm {
[[gnu::section(".vector_table")]]
static const uint32_t interrupts[Interrupts<T>::size] = InterruptsTable<T>::value;
};
Заранее спасибо за любые предложения.
UPD Я хочу реализовать библиотеку только для заголовков, если это возможно ..