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 有多快 运行。 (即,您不能通过这种方式更改实际速度)。
宏定义的范围是从其 #define
指令到源文件或相应的 #undef
.
末尾
F_CPU
的值在util/delay.h
header中测试。但是当那个测试发生时,你的 #define F_CPU
还没有被处理。
您可以将它移到 #include <util/delay>
之前,也可以使用编译器选项定义该宏。后者将是我的选择。然后您只需更改构建中的一项(Makefile、项目设置...)。
为了让 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 有多快 运行。 (即,您不能通过这种方式更改实际速度)。
宏定义的范围是从其 #define
指令到源文件或相应的 #undef
.
F_CPU
的值在util/delay.h
header中测试。但是当那个测试发生时,你的 #define F_CPU
还没有被处理。
您可以将它移到 #include <util/delay>
之前,也可以使用编译器选项定义该宏。后者将是我的选择。然后您只需更改构建中的一项(Makefile、项目设置...)。