Линкер G CC отбрасывает обработчик прерываний - PullRequest
0 голосов
/ 07 апреля 2020

При отладке приложения и обнаружении того, что ISR фактически никогда не входит, я проверил файл .map и обнаружил, что функция обработчика находится в «удаленных разделах ввода», есть ли способ заставить компоновщик не делать этого ? Я уверен, что это проблема компоновщика, так как я не включил оптимизацию.

1 Ответ

1 голос
/ 07 апреля 2020

Это не проблема компоновщика. Это означает, что компилятор не понимает, что функция является ISR, но считает, что это нормальная функция. Нормальные функции, которые не вызываются, не будут связаны, несмотря на настройки оптимизатора (или мы в конечном итоге свяжем всю стандартную библиотеку с двоичным файлом и т. Д. c).

Как объявить ISR в g cc имеет тенденцию быть специфичным для порта c, обычно вы делаете, как описано в g cc руководстве :

void f () __attribute__ ((interrupt ("IRQ")));

, где строковая часть является специфицированной MCU c. Ваша указанная c цепочка инструментов MCU должна документировать, какие конкретные c имена вы должны использовать.

...