ATMEGA168A - F_CPU 警告

ATMEGA168A - F_CPU warning

为了让 ATMEGA168A 闪烁一个小 LED,我写了下面的代码:

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

#define F_CPU 1000000UL

int main(void)
{
    DDRB = 0b00000010;
    PORTB = 0b00000000;

    while(1)
    {
        PORTB ^= 1 << 1;
        _delay_ms(1000);
    }
}

编译器给我如下警告:

Warning     #warning "F_CPU not defined for <util/delay.h>"

这是此警告的来源 (delay.h)

#ifndef F_CPU
/* prevent compiler error by supplying a default */
# warning "F_CPU not defined for <util/delay.h>"
# define F_CPU 1000000UL
#endif

我在这里做错了什么?我的声明有误吗?

您需要在包含之前定义 F_CPU。您可以在编译时在命令行上执行此操作,也可以将其放入您的源代码中。你定义这个符号就是让构建系统知道你的特定 CPU 有多快 运行。 (即,您不能通过这种方式更改实际速度)。

有关讨论,请参阅 http://www.avrfreaks.net/forum/understanding-fcpu

宏定义的范围是从其 #define 指令到源文件或相应的 #undef.

末尾

F_CPU的值在util/delay.hheader中测试。但是当那个测试发生时,你的 #define F_CPU 还没有被处理。

您可以将它移到 #include <util/delay> 之前,也可以使用编译器选项定义该宏。后者将是我的选择。然后您只需更改构建中的一项(Makefile、项目设置...)。