7回答

0收藏

[原创] 最近打算做个真正的软件定时器

GD32 GD32 3330 人阅读 | 7 人回复 | 2015-07-03

嵌入式里面我们经常提到定时器,英文叫timer。但其实那个按中文意思不叫定时器,叫做延时器。
我的思路是用空间换取简单的算法
首先时间单位为年月日时分秒,以100年12个月31天24小时60分60秒为单位。设计一个指针数组大小为100+12+31+24+60+60
=287个指针。
1-100为年 从2016年开始
101-112为月
XXXXXXX

假设我现在定时到2017年xxxxxxxxx,然后将此值对当前时间做差,得出剩余时间,假设为2年1个月3天20时x分x秒。
那么这个定时器将进入第第二个指针所指的链表。当一年过去时,只需将timer从第2个链表,移动到101个链表,因为是1个月。
最后的60个链表根据链表就是保存了当前剩余时间分别是从1秒到59秒的timer。所以秒中断查询这些链表,不为空则该链表下的全部到时间了。不知大家明白了吗,欢迎讨论
分享到:
回复

使用道具 举报

回答|共 7 个

倒序浏览

沙发

魅影迷踪

发表于 2015-7-3 15:54:02 | 只看该作者

上面描述有误,不用做差,直接当产生年中断,月 xxx 分中断时,比较值大于等于当前系统时间就移到下一个单位,移入下一个单位时根据最高值进入相应的链表。当秒中断时若值相等说明时间到了
板凳

魅影迷踪

发表于 2015-7-3 15:55:55 | 只看该作者

这种方法的好处是不用做任何减法,就算是定时一年以上,也只做了六次链表移动
地板

苏幕遮

发表于 2015-7-3 15:58:06 | 只看该作者

高大上的东西,,,,表示不懂
5#

魅影迷踪

发表于 2015-7-3 16:14:08 | 只看该作者

对于延时器,直接采用天数就可以了,因为月份的天数以及闰月,年的闰年。
6#

liunian__92

发表于 2015-7-4 11:39:33 | 只看该作者

略负责。。。。。
7#

魅影迷踪

发表于 2015-7-7 09:00:56 | 只看该作者

什么意思啊
8#

ts2000

发表于 2015-7-7 11:24:54 | 只看该作者

表示看不明白的路过。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条