Eclipse中的Arduino端口寄存器不起作用

时间:2013-09-12 12:18:49

标签: c++ c eclipse eclipse-plugin arduino

我正在使用Eclipse和Arduino插件在C中构建一个Arduino应用程序。在我的旧代码中,我使用了pinMode和digitalWrite。但众所周知,这会占用更多空间。所以我现在通过端口操作重新构建我的代码。如果你不知道那是什么,你可以在这里看到它:http://www.arduino.cc/en/Reference/PortManipulation

我会解释我的所作所为。

如果有pinMode,我把它改成了这样的东西:DDRD = 0b11111111; 那里有digitalWrite,我把它改成了PORTD = 0b10000000; 您可以在我的代码中看到它。

Eclipse现在正在向我提供错误(突出显示带有红线的DDRD和PORTD字样)符号未解析为DDRD和PORTD,但程序正在构建并运行正常。我该如何解决这个问题?

#include <avr/io.h>
#include <util/delay.h>

int main()
{
    UCSR0B = 0;         // disconnect pins 0 and 1 from USART (Serial)
    DDRD = 0b11111111;  // all pins of port D as output

    for(;;)
    {
        PORTD = 0b10000000; // Pin 7 on
        _delay_ms(500);     // Wait
    }
}

1 个答案:

答案 0 :(得分:0)

这些是多级宏,它们编码对SFR位置的直接易失性访问。

它们是在各种特定于芯片的头文件中单独定义的,当avr / io.h被告知您正在使用的特定CPU变体时,它将包含这些文件。

通常使用avr-gcc的-mmcu标志来完成,例如

-mmcu=atmega328p

然而,如果Eclipse插件自己通过项目源来尝试给你提供咨询错误,那么将它变成一个定义可能不够聪明(即使gcc很高兴你也可以让Eclipse声明错误) 。要解决此问题,您可能需要在代码中的include上方或在Eclipse的某些配置中显式定义cpu类型。例如:

#ifndef __AVR_ATmega328P__ 
#define __AVR_ATmega328P__ 
#endif
#include <avr/io.h>

请注意,如果稍后更改处理器类型,这可能会导致问题!即便如此,它也有点不确定,因为每个处理器有两个潜在的名称。