如果将负数传递给vxworks中的taskDelay函数,会发生什么?

发布于 2024-07-27 19:55:00 字数 65 浏览 7 评论 0原文

注意,taskDelay 的参数是 int 类型,这意味着该数字可以为负数。 只是想知道传递负数时函数将如何反应。

Noted that the parameter of taskDelay is of type int, which means the number could be negative. Just wondering how the function is going to react when passing a negative number.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

酷炫老祖宗 2024-08-03 19:55:00

大多数函数都会验证输入,并且只返回早期/返回 0/将相关参数设置为默认值。

Most functions would validate the input, and just return early/return 0/set the parameter in question to a default value.

歌入人心 2024-08-03 19:55:00

我认为在生产中没有必要这样做,并且您可能有一些可以测试的代码......为什么不尝试一下呢?

I presume there's no critical need to do this in production, and you probably have some code lying around that you could test with.... why not give it a go?

话少心凉 2024-08-03 19:55:00

文档没有解决这个问题,并且他们定义的唯一错误代码并不涵盖这种情况。 因此,最正确的答案是结果未定义。

不过,请参阅 VxWorks / Tornado II 常见问题解答了解此宝石:

taskDelay(-1) 显示了另一个错误
vxWorks 定时器/滴答代码。 它有
设置 vxTicks 的(副作用)
为零。 这会破坏当地时间
(可能还有其他事情)。 实际上
taskDelay(x) 将具有相同的效果
如果 vxTicks + x >= 0x100000000。 如果
系统时钟频率为100Hz
大约 500 天后发生(因为
vxTicks 换行)。 以更快的时钟速率
它会发生得更快。 任何人尝试
正常运行时间长达几年?

哦,有一个无证鞋面
时钟速率的限制。 按费率计算
4294 以上 select() 将失败
将其“usec”时间转换为
正确的刻度数。 (来自:大卫.
Laight,[电子邮件受保护])

假设这个错误是旧的,我希望它要么返回错误,要么执行与 taskDelay(0) 相同的操作,这会将您的任务置于就绪队列的末尾。

The documentation doesn't address it, and the only error codes they do define doesn't cover this case. The most correct answer therefore is that the results are undefined.

See the VxWorks / Tornado II FAQ for this gem, however:

taskDelay(-1) shows another bug in
the vxWorks timer/tick code. It has
the (side) effect of setting vxTicks
to zero. This corrupts the localtime
(and probably other things). In fact
taskDelay(x) will have the same effect
if vxTicks + x >= 0x100000000. If the
system clock rate is 100Hz this
happens after about 500 days (because
vxTicks wraps). At faster clock rates
it will happen sooner. Anyone trying
for several years uptime?

Oh there is an undocumented upper
limit on the clock rate. At rates
above 4294 select() will fail to
convert its 'usec' time into the
correct number of ticks. (From: David
Laight, [email protected])

Assuming this bug is old, I would hope that it would either return an error or do the same thing as taskDelay(0), which puts your task at the end of the ready queue.

柠栀 2024-08-03 19:55:00

对于taskDelay(10),任务延迟刻度实际上为10,9,..,1,0。

对于 taskDelay(-10),任务延迟刻度实际上为 -10,-11,...,-2147483648,2147483647,...,1,0。

The task delay tick will be VIRTUALLY 10,9,..,1,0 for taskDelay(10).

The task delay tick will be VIRTUALLY -10,-11,...,-2147483648,2147483647,...,1,0 for taskDelay(-10).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文