Fas*_*axc 5 c microcontroller gcc
我正在做一些微控制器编程,并且我有以下代码:
#define F_CPU 8000000
#define F_ADC (F_CPU / 64.0)
#define T_ADC (1.0/F_ADC)
Run Code Online (Sandbox Code Playgroud)
有没有办法在编译时打印出 T_ADC 的计算值?我尝试将其字符串化
#define STRINGIFY(s) XSTRINGIFY(s)
#define XSTRINGIFY(s) #s
#pragma message ("T_ADC " STRINGIFY(T_ADC))
Run Code Online (Sandbox Code Playgroud)
但这只是给出了宏展开式“(1/(8000000/64))”,而不是实际值。
printf这是一个微控制器程序,在启动时执行此操作很尴尬。我正在使用 gcc,如果有帮助的话,我很乐意使用任何非标准 gcc 功能。
小智 1
正如@mbratch和@freddie所说,计算是由编译器进行的,所以你不能简单地使用预处理器指令得到结果。现在想到的最简单的方法是将宏分配给全局常量,然后使用调试器读取常量的值,或者打开可执行文件的二进制映像(您可以从内存映射文件)。
const float temp = T_ADC;
Run Code Online (Sandbox Code Playgroud)
请注意,您必须指定 C 类型,这是一个重要步骤,因为宏的结果取决于它。