使用 GCC 编译时,ISR 是通过使用interrupt
带有向量编号的属性来定义的,该属性在msp430fr*.h
TI 分发的 GCC 工具链附带的标头中定义:
__attribute__ ((interrupt(TIMER2_A1_VECTOR)))
void TIMER2_A1_ISR (void) { ... }
但是,当使用 LLVM/Clang 编译并使用 GCC 组装和链接时
clang -emit-llvm -c -MD --target=msp430 -D__MSP430FR5969__ -nobuiltininc -nostdinc++ -isysroot /none -O1 -g -std=c99 -pedantic -Wall -I /opt/ti/msp430-gcc/lib/gcc/msp430-elf/4.9.1/include -I /opt/ti/msp430-gcc/msp430-elf/include -I /opt/ti/msp430-gcc/include -I ../src -DBOARD_MSP_TS430 ../../src/main.c -o main.bc
以上导致编译时错误:
../../src/main.c:80:17: error: 'interrupt' attribute parameter 38 is out of bounds
__attribute__ ((interrupt(TIMER2_A1_VECTOR)))
^ ~~~~~~~~~~~~~~~~