OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6827|回复: 2

SysTick累计进行超时比较时 若达到最大值发生溢出后怎么办?

[复制链接]

27

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2014-8-11
在线时间
3 小时
发表于 2015-1-20 23:32:28 | 显示全部楼层 |阅读模式
5金钱
用Systick每次中断,进入中断处理函数 void SysTick_Handler(void) 后对sys_tick_1ms进行累计。  然后通过开启一个模拟定时器Soft_Timer = sys_tick_1ms的当前值 ,在Systick每次中断后,Soft_Timer累加。 如果过N久后,判断 Systick- Soft_Timer若> 某个值(比如1000),则视作Soft_Timer超时了。

问题是:
uint32_t     sys_tick_1ms
uint32_t     Soft_Timer

由于这2个变量的限制,在达到4294967295u后将溢出,从0开始累计
假设在溢出前的1ms时,Soft_Timer= 4294967294u (比最大值小1)
那么 Soft_Timer 将要在 4294967295u =49.710270 天 后才能产生超时

在此想请教各位大师们:您们在用SysTick累计进行超时比较时,是怎么处理的?

最佳答案

查看完整内容[请看2#楼]

加多一个判断就是了 如果下一次的值,比当前值还小,那么说明溢出了. 处理方法很简单吧?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165585
金钱
165585
注册时间
2010-12-1
在线时间
2119 小时
发表于 2015-1-20 23:32:29 | 显示全部楼层
加多一个判断就是了
如果下一次的值,比当前值还小,那么说明溢出了.
处理方法很简单吧?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

27

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2014-8-11
在线时间
3 小时
 楼主| 发表于 2015-1-21 09:31:38 | 显示全部楼层
哇靠,妙笔点花啊。谢谢高人的指点!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-10-15 10:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表