Это не проблема компоновщика. Это означает, что компилятор не понимает, что функция является ISR, но считает, что это нормальная функция. Нормальные функции, которые не вызываются, не будут связаны, несмотря на настройки оптимизатора (или мы в конечном итоге свяжем всю стандартную библиотеку с двоичным файлом и т. Д. c).
Как объявить ISR в g cc имеет тенденцию быть специфичным для порта c, обычно вы делаете, как описано в g cc руководстве :
void f () __attribute__ ((interrupt ("IRQ")));
, где строковая часть является специфицированной MCU c. Ваша указанная c цепочка инструментов MCU должна документировать, какие конкретные c имена вы должны использовать.