Имеется IAR 6.50 для ARM. Тестовый проект для STM32F103VCT6 (почти пустой). В нём имеются файлы: main.cpp, main.h, startup_stm32f10x_hd.s, stm32f10x_vector.c, stm32f10x_it.c, stm32f10x_it.h.
Задействовано одно прерывание - TIM3_IRQHandler.
При отладке наблюдается интересный эффект - если обработчик прерывания находится в файле main.cpp, то точки останова в его тексте ставятся и отладчик по ним останавливается. А если я его переношу в файл stm32f10x_it.c, то точки останова не ставятся и отладчик "улетает" (скорее всего при срабатывании прерывания). Такое впечатление, что обработчик при линковании не включается в код программы.
Оптимизация при компиляции отключена.
Текст обработчика:
extern "C" void TIM3_IRQHandler(void) { TIM3_SR_bit.UIF=false; //Сброс флага прерывания таймера ADC it=12; ty=14; tg=it+ty; }
Хотя пробовал и без "extern "C" и в файле main.cpp он всё равно работает.
Почему?
|