工具/软件:TI C/C++编译器
您好!
我知道如何使用在 C 语言中显示扩展宏、例如在 Visual Studio 中
#define STRINGIFY(s) XSTRINGIFY(s)
#define XSTRINGIFY(s) #s
#pragma message ("AVAIL_TIME =" STRINGIFY(AVAIL_TIME))
第一个问题:CCS 编译器中用于 ARM 的#pragma 消息的等效项是什么?
第二个问题、我对如何显示宏的计算值感兴趣。
为了执行#if (a>b)语句、预编译器肯定会计算宏值(示例在 Visual Studio 中工作):
#define STRINGIFY(s) XSTRINGIFY(s)
#define XSTRINGIFY(s) #s
#define ONE_BYTE_Tx_Time 11
#define NUM_OF_BYTES 16
#define BUSY_TIME 132
#define TOTAL_TIME 300
#define AVAIL_TIME (TOTAL_TIME-BUSY_TIME)
#define RESP_TIME (ONE_BYTE_Tx_Time * NUM_OF_BYTES)
#pragma message ("AVAIL_TIME =" STRINGIFY(AVAIL_TIME))
#pragma message ("RESP_TIME =" STRINGIFY(RESP_TIME))
#if (AVAIL_TIME <= RESP_TIME)
#error "not enough time"
#endif
编译期间的输出为:
AVAIL_TIME =(300-132)
RESP_TIME =(11 * 16)
fatal error C1189: #error : "not enough time"
因此、预编译器计算了两个整数、对它们进行了比较并输出了错误。
遗憾的是、CCS 只能在调试期间将鼠标悬停在宏上、从而扩展和评估宏的值。
我的问题是:是否可以在编译期间显示宏计算的实际结果?即
AVAIL_TIME = 168 // which is (300-132)
RESP_TIME = 176 // which is (11 * 16)
公式扩展可能相当复杂、因此在编译期间查看结果而不加载(需要几分钟!)非常有用。 和运行代码:
AVAIL_TIME_in_SysTicks =(((75000000/1000000) * (1000000/2500)) - 2 * ((((75000000/1000000) * ((1000000000/900000) + 1)*(10 + 0x00000000/0x00000008) + 2)/1000) * 16))
谢谢、Igor