我编写了以下代码,以使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);
}
}
Run Code Online (Sandbox Code Playgroud)
编译器向我发出如下警告:
Warning #warning "F_CPU not defined for <util/delay.h>"
Run Code Online (Sandbox Code Playgroud)
这是此警告的来源(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
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?我的声明不正确吗?
您需要定义 F_CPU在包含之前。您可以在编译时在命令行上执行此操作,也可以将其放在源代码中。定义此符号的目的是让构建系统知道特定CPU的运行速度。(即,您不必以此方式更改实际速度)。
有关讨论,请参见http://www.avrfreaks.net/forum/understanding-fcpu