1

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

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

我已经完全按照 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 标记为蓝色并正确识别它,因为它在设备标头中定义。

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

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

我不知道究竟是什么问题以及如何解决它。

为了进行比较,下面是“XC8 User Guide for AVR”中的一个示例,第 83 页:

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

如您所见,函数的结构与我自己的 ISR 中的完全一样。

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

4

1 回答 1

0

固定的:

我也在微芯片论坛上发布了这个问题,因为这里似乎没有人能够提供帮助。

所以我发现问题出在项目属性下

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

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

于 2020-08-04T20:42:21.823 回答