注意 taskDelay 的参数是 int 类型的,这意味着数字可以是负数。只是想知道传递负数时函数将如何反应。
4 回答
大多数函数会验证输入,然后提前返回/返回 0/将相关参数设置为默认值。
我认为在生产中没有必要这样做,而且您可能有一些可以测试的代码......为什么不试一试呢?
文档没有解决它,他们定义的唯一错误代码没有涵盖这种情况。因此,最正确的答案是结果未定义。
但是,请参阅VxWorks / Tornado II 常见问题解答此 gem:
taskDelay(-1) 显示了 vxWorks 计时器/滴答代码中的另一个错误。它具有将 vxTicks 设置为零的(副作用)。这会破坏本地时间(可能还有其他东西)。事实上,如果 vxTicks + x >= 0x100000000,taskDelay(x) 将具有相同的效果。如果系统时钟频率为 100Hz,这将在大约 500 天后发生(因为 vxTicks 回绕)。在更快的时钟频率下,它会更快发生。有人尝试过几年的正常运行时间吗?
哦,时钟速率有一个未记录的上限。在高于 4294 的速率下,select() 将无法将其“usec”时间转换为正确的刻度数。(来自:大卫莱特,dsl@tadpole.co.uk)
假设这个错误是旧的,我希望它要么返回错误,要么执行与 taskDelay(0) 相同的操作,这会将您的任务置于就绪队列的末尾。
taskDelay(10) 的任务延迟滴答实际上将是 10,9,..,1,0。
taskDelay(-10) 的任务延迟滴答实际上将是 -10,-11,...,-2147483648,2147483647,...,1,0。