数码之家

 找回密码
 立即注册
搜索
查看: 2550|回复: 11

[ARM] 自己写的单片机高效系统定时器驱动程序

[复制链接]
发表于 2019-12-28 13:57:23 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
很多时候在单片机系统中,需要一些定时器来产生定时或者超时信号,比如等待用户操作,如果长时间用户没有动作,必须产生一个超时信号给系统处理。传统的方法是采用单片机自带的定时器对一个或者多个变量进行计数。但是,当操作系统需要的定时信号很多时,管理起来就显得十分繁琐。本人在对S3264点阵挂历的开发当中,采用了MDK RTX操作系统内核,受里面的消息队列启发,自己编写了一套定时器驱动程序,采用类似消息队列的方式进行管理。
本驱动程序运行在本人的电子挂历成品中,运行可靠,稳定。本程序可以同时注册N个定时器队列,定时器可以随时注册、随时注销,可以随时更改定时时间,以秒为单位。定时器可以是一次性,也可以是永久性一直运行,当时间到了的程序,程序员只要调用查询函数,对指定的定时器ID进行查询,当返回1时说明定时时间已经到了,同时定时器队列的这个ID根据此定时器的性质自动决定是否再次启动另一轮定时。定时计数方式支持正计时和倒计时,只需要把定时器的消息队列放在定时器的中断里面即可。下面贴出代码:
捕获.JPG

定时器.rar

687 Bytes, 下载次数: 8, 下载积分: 家元 -55

打赏

参与人数 3家元 +71 收起 理由
数码家园 + 16
家睦 + 50
keye + 5 謝謝分享, 学习学习

查看全部打赏

发表于 2019-12-28 19:37:52 | 显示全部楼层
linux内核中有一个叫时间轮定时器的东西,做各种任务调度、延时、休眠唤醒等,你可以借鉴一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-29 08:17:38 来自手机浏览器 | 显示全部楼层
ifm 发表于 2019-12-28 19:37
linux内核中有一个叫时间轮定时器的东西,做各种任务调度、延时、休眠唤醒等,你可以借鉴一下 ...

这个性质不一样的,要说这个,我选择内核的也带,但是却不能用,因为这个是管理任务用的,不是真正的定时器
回复 支持 反对

使用道具 举报

发表于 2019-12-29 11:19:31 | 显示全部楼层
是不是类似软件定时器,由硬件定时器派生的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-29 11:58:45 | 显示全部楼层
m182892 发表于 2019-12-29 11:19
是不是类似软件定时器,由硬件定时器派生的。

都可以,只要是定时器中断
回复 支持 反对

使用道具 举报

发表于 2019-12-30 09:02:28 | 显示全部楼层
没有.H文件呀,楼主。
赶紧补上,这回要免费哦:dizzy:
回复 支持 反对

使用道具 举报

发表于 2019-12-30 21:40:27 | 显示全部楼层
为啥不直接用rtx?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-7 17:17:38 | 显示全部楼层

肯定是有原因了,RTX里面的用户定时器功能太弱了
回复 支持 反对

使用道具 举报

发表于 2020-1-16 12:01:32 | 显示全部楼层
RTX内部的定时器简单也是有原因的。
多线程方式下,程序结构完全改变了,很多场合任务线程自己管理自己的时间,或者等待时挂起自己,等待管理线程唤醒。
回复 支持 反对

使用道具 举报

发表于 2020-1-16 16:26:23 | 显示全部楼层
我一直业余倒腾单片机    一直没真正搞懂线程是个嘛意思       我的做法是开一个1毫秒定时器       中断后   计时将  按键检测,显示,ADC采样等等标志位置一   main  根据标志执行
回复 支持 反对

使用道具 举报

发表于 2020-1-17 19:15:30 | 显示全部楼层
简单说多线程就是把按键,显示,adc分成3个独立任务,每个任务一个线程。宏观上3个线程是同时运行的,微观上是轮流执行的。现在程序里main根据标志来决定执行哪个任务,多线程里由rtos的任务调度来安排哪个线程执行。业务逻辑中的标志位,多线程的结构中用线程间通信完成,消息队列就是其中一种方式。
回复 支持 反对

使用道具 举报

发表于 2022-4-4 09:16:30 | 显示全部楼层
自从看通了结构体和指针,我就想着写个类似于你说的功能的程序。。回头看自己以前的程序就是摊屎。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-5-19 23:53 , Processed in 0.234001 second(s), 14 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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