我想为我的有限状态机编写一个调试日志打印功能,该功能可以打印当前状态,时间(以毫秒为单位)以及消息。但是,我得到随机结果。这是我所做的:
#define DEBUG_PRINT(tag, format, ...) printf("[%10s] %7d: " format "\n", tag, millis(), ##__VA_ARGS__)
当我跑步时:
DEBUG_PRINT("SETUP", "%d %d %d %d", 1, 2, 3, 4);
我希望得到:[ SETUP] 0: 1 2 3 4
但我得到:[ SETUP] 0: 0 1 2 3
添加一个额外的%d将得到“ 4”,但我仍然得到一个虚假的0。
我之前的首次亮相日志宏:DEBUG_PRINT1("%d %d %d %d", 1, 2, 3, 4);
打印期望的1 2 3 4
。
您能帮我摆脱那多余的0吗?
问题在于该millis()
函数返回一个unsigned long
,其中标识符为%d
整数。
将其更改为%7ld
,它应该可以正常工作。
我已经测试过了
编辑1:
我也在Linux系统上进行了测试。在linux系统中,这不是问题,因为linux的大小int
为4字节,long
为8字节。
但是,在Arduino上,an的大小int
为2个字节,long
为4个字节。此螺钉了%d
上Arduino的标识符,并且扩展了unsigned long
从millis()
下一个%d
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句