我正在为我的AVR编写一个简单的库,我想尝试使用宏函数来定义我的波特率。 AVR库中的许多函数都使用宏F_CPU以及我想写的宏。
以下是我对宏定义和我假设的实现的看法:
#define BAUD_SELECT(baud) ((F_CPU)/(2*baud)-1)
myubrr = BAUD_SELECT(38400);
我尝试使用#define F_CPU 8000000UL,并且在make文件中使用-D“F_CPU 8000000UL”,但我总是在执行行中得到相同的错误。
expected ')' before numeric constant
我确定它与滥用#define有关,并且宏定义在头文件中,在适当的.c文件中的实现,以及在makefile或其他main中的F_CPU定义.c文件。
修改的 我按建议做了括号更改并运行预处理器并找到输出文件(至少我认为)
unsigned int myubrr = ((8000000UL 1)/(2*(baud))-1);
它在F_CPU应该放置一个额外的1,我对预处理器没有经验,所以我不知道如何让它不这样做,但也许这就是问题?
答案 0 :(得分:1)
尝试将其包装在括号中:
#define BAUD_SELECT(baud) ((F_CPU)/(2*(baud))-1)
答案 1 :(得分:0)
这对我来说很好用:
#define BAUD_SELECT(baud) ((F_CPU)/(2*(baud))-1)
unsigned int myubrr = BAUD_SELECT(38400);
当我用
编译时$ cc -c -DF_CPU=8000000UL t.c
在这个具体案例中,额外的事情并不重要,认为它们总的来说是个好主意。所以还有其他事情要发生。也许在其他一些头文件中有F_CPU
的另一个定义,它覆盖了F_CPU
的定义