预处理器宏的问题

时间:2018-05-21 09:33:48

标签: c++ arduino

我想为我的有限状态机编写调试日志打印功能,打印当前状态,时间以毫秒为单位,然后是我的消息。但是,我得到随机结果。这就是我所做的:

DEBUG_PRINT("SETUP", "%d %d %d %d", 1, 2, 3, 4);

当我跑步时:

[     SETUP]       0: 1 2 3 4

我希望得到:[ SETUP] 0: 0 1 2 3
但我得到:DEBUG_PRINT1("%d %d %d %d", 1, 2, 3, 4);

添加一个额外的%d将得到“4”,但我仍然得到一个假的0。

我之前的首张日志宏:1 2 3 4打印出预期的while($s < $count_staff){ if ($temp_staff[$s]['isLoanOfficer'] == true) { echo "<option value=" . $temp_staff[$s]['id'] . ">" . $temp_staff[$s]['displayName'] . " </option>"; } $s++; }

你能帮助我摆脱额外的0吗?

1 个答案:

答案 0 :(得分:4)

问题是millis()函数返回unsigned long,其中标识符是%d整数。

将其更改为%7ld,它应该可以正常工作。

我已经测试过了。

编辑1:

我也在linux系统上测试过它。在linux系统中,这不是问题,因为linux int的大小是4个字节而long是8个字节。

然而,在Arduino上,int的大小为2个字节,long为4个字节。这会搞砸Arduino上的%d标识符,并将unsigned longmillis()扩展到下一个%d