使用 xc8 的 ATtiny 中断服务例程编译错误

Compiling Error with interrupt service routines for ATtiny using xc8

我正在使用 ATtiny 202 进行一个项目,我的编程快要完成了,但是我 运行 遇到了一个大问题。我无法创建任何 ISR,因为我总是遇到编译器错误。

我正在使用最新版本的 MPLABX IDE (5.35)(是的,它适用于 pic 和 avr mcus)和第二个最新版本的 xc8 编译器 (v2.10)。我不能使用最新版本的编译器,因为出于某种原因,它缺少用于 ATtiny 202 的设备 header。(我刚才有一个关于这个问题的不同线程)

我已经完全按照 XC8 手册中的描述创建了 ISR,IDE 也没有将其标记为问题,但是当我尝试编译程序时,我总是遇到编译器错误. 这是我的一个 ISR:

void __interrupt (RTC_PIT_vect_num) pit_int(void){
    
    onPIT();                        //Run the function
    RTC.PITINTFLAGS = 0x0;          //and clear the interrupt flags
    
}

IDE 标记 RTC_PIT_vect_num 蓝色并正确识别它,因为它在设备 header 中定义。

当我尝试编译它时,收到此错误消息,并且构建失败:

main.c:864:19: error: expected declaration specifiers or '...' before numeric constant
 void __interrupt (RTC_PIT_vect_num) pit_int(void){
                   ^

我不知道到底是什么问题以及如何解决。

为了进行比较,下面是“AVR 的 XC8 用户指南”第 83 页中的示例:

void __interrupt(SPI_STC_vect_num) spi_Isr(void) {
    process(SPI_SlaveReceive());
    return;
}

如你所见,函数结构和我自己的ISR中完全一样

有人知道问题是什么或可能是什么以及如何解决吗?

固定:

这个问题我也在microchip论坛上发过,好像没人能帮忙。

于是我发现问题出在

下的项目属性中

XC8 全局选项 -> XC8 编译器 -> 选项类别:预处理和消息

“使用 CCI 语法”选项已禁用。这需要启用 __interrupt 才能工作。