c – 翻滚安全计时器(勾选)比较

c – 翻滚安全计时器(勾选)比较,第1张

概述我有一个硬件计数器,我可以观察时间考虑因素.它计算毫秒数并存储在16位无符号值中.如何安全地检查计时器值是否已经过一定时间并安全地处理不可避免的翻转: //this is a bit contrived, but it illustrates what I'm trying to doconst uint16_t print_interval = 5000; // millisecondsst 我有一个硬件计数器,我可以观察时间考虑因素.它计算毫秒数并存储在16位无符号值中.如何安全地检查计时器值是否已经过一定时间并安全地处理不可避免的翻转:
//this is a bit contrived,but it illustrates what I'm trying to doconst uint16_t print_interval = 5000; // millisecondsstatic uint16_t last_print_time;   if(ms_timer() - last_print_time > print_interval){    printf("Fault!\n");    last_print_time = ms_timer();}

当ms_timer溢出为0时,此代码将失败.

解决方法 你实际上不需要在这里做任何事情.假设ms_timer()返回类型为uint16_t的值,则问题中列出的原始代码将正常工作.

(还假设计时器在检查之间不会溢出两次……)

要说服自己就是这种情况,请尝试以下测试:

uint16_t t1 = 0xFFF0;uint16_t t2 = 0x0010;uint16_t dt = t2 - t1;

dt将等于0x20.

总结

以上是内存溢出为你收集整理的c – 翻滚安全计时器(勾选)比较全部内容,希望文章能够帮你解决c – 翻滚安全计时器(勾选)比较所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1234981.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存