在宏功能中使用数字常量

时间:2011-10-03 16:28:51

标签: c macros c-preprocessor avr

我正在为我的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,我对预处理器没有经验,所以我不知道如何让它不这样做,但也许这就是问题?

2 个答案:

答案 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的定义