【发布时间】:2017-01-21 04:18:00
【问题描述】:
我目前正在审核有关嵌入式系统的在线 edX 课程,并学习如何使用 SysTick 计时器来计算经过的时间。
Picture of logic I'm referring to
Code of logic I'm referring to
但是,有一点让我感到困惑。我理解从“最后”中减去“现在”以获得经过时间的想法。但是,当 SysTick 计时器达到 0 并重新加载时“现在”翻转时,您会怎么做,但“最后”是 SysTick 计时器翻转之前的值(所以“现在”大于“最后”,通常什么时候应该更小)?该值存储在一个无符号长整数中,所以它会破坏程序吗?或者这永远不会发生,如果是这样,为什么?如有任何帮助,我将不胜感激!
我查看了与我的问题类似的唯一其他链接:How to deal with a wrapping counter in embedded C,但我没有从中找到明确的答案。
【问题讨论】:
-
您为什么不简单地尝试一些值呢?
unsigned整数环绕定义非常明确,即使计数器环绕,与前一个值的 有符号整数差 仍然是正确的(只要它足够小,即你的一半int范围) -
@tofro 我会试一试,谢谢!我只是想事先弄清楚逻辑上发生了什么,因为我认为在不完全理解逻辑的情况下实现代码是没有意义的。
标签: c arm embedded integer-overflow