UCOSIII操作系统
- UCOSIII操作系统——软件定时器篇
-
- 软件定时器的API函数
- 定义一个定时器的控制块(句柄)
- 创建定时器->OSTmrCreat()
- 启动定时器->OSTmrStart()
- 停止定时器->OSTmrStop()
- 删除定时器->OSTmrDel()
- 回调函数
UCOSIII其他内容导航不迷路
UCOSIII操作系统-简介
【UCOSIII操作系统】任务篇(1)创建任务
【UCOSIII操作系统】任务篇(2)相关API函数
【UCOSIII操作系统】系统初始化篇(1)系统初始化
【UCOSIII操作系统】系统初始化篇(2)CPU,SysTick,内存初始化
【UCOSIII操作系统】硬件初始化篇(1)硬件初始化以及开始运行系统
【UCOSIII操作系统】消息队列篇(1)消息队列
【UCOSIII操作系统】消息队列篇(2)任务消息队列
【UCOSIII操作系统】信 量与互斥量篇(1)信 量
【UCOSIII操作系统】信 量与互斥量篇(2)互斥量
【UCOSIII操作系统】信 量与互斥量篇(3)任务信 量
【UCOSIII操作系统】事件篇
【UCOSIII操作系统】中断管理篇
【UCOSIII操作系统】临界段篇
【UCOSIII操作系统】内存管理篇
已完结
说在前面:
这个内容不适合0基础的人,因为这里只讲了应用层面的东西,并没有深入内核讲解,所以要从零开始学UCOSIII的朋友,可以先去学完入门内容,再来观看这个笔记加深印象。
这篇文章是个人学习整理,如有错误请指正
UCOSIII操作系统——软件定时器篇
软件定时器,软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受硬件定时器资源限制的定时器服务,它实现的功能与硬件定时器也是类似的。
使用硬件定时器时,每次在定时时间到达之后就会自动触发一个中断,用户在中断中处理信息;而使用软件定时器时,需要我们在创建软件定时器时指定时间到达后要调用的函数(也称超时函数/回调函数,为了统一,下文均用回调函数描述),在回调函数中处理信息。
- 当到达设定时钟计数值后会触发用户定义的回调函数
- 一般利用SysTick作为软件定时器的基础时钟
- 回调函数类似于硬件的中断服务函数
- 回调函数也要快进快出,不能有阻塞任务运行的情况或者删除定时器任务的情况
uCOS软件定时器的精度(分辨率)决定于系统时基频率,也就是变量OS_CFG_TMR_TASK_RATE_HZ的值,它是以Hz为单位的。如果软件定时器任务的频率(OS_ CFG_TMR_TASK_RATE_HZ)设置为10Hz,系统中所有软件定时器的精度为十分之一秒。事实上,这是用于软件定时器的推荐值,因为软件定时器常用于不精确时间尺度的任务。
-
时间计算是用os_cfg_app.h里面的OS_CFG_TMR_TASK_RATE_HZ来设置的,比如说100HZ(一般),定时器的基准时间就是10ms,然后定时只能定10的倍数的时间,只能是10ms,20ms,30ms,不能是5ms,15ms,等。
-
注意:定时器任务的频率OS_CFG_TMR_TASK_RATE HZ的值不能大于系统时基频率OS_CFG_TMR_TASK_RATE_HZ的值。
-
我们知道,在系统初始化函数中,有一个定时任务,要使能相应的宏,才能正常使用软件定时器功能。
软件定时器的API函数
函数 | 描述 |
---|---|
OSTmrCreat() | 创建定时器并设置运行模式 |
OSTmrDel() | 删除定时器 |
OSTmrStart() | 启动定时器计数 |
OSTmrStop() | 停止定时器倒计时 |
OSTmrRemainGet() | 获取定时器剩余时间 |
OSTmrStateGet() | 获取当前定时状态 |
定义一个定时器的控制块(句柄)
创建定时器->OSTmrCreat()
- 函数原型
要注意有初始化节拍数和没初始化节拍数的区别
opt选项:
定时器运行选项,这里有两个模式可以选择。
OS_OPT_TMR_ONE_SHOT 单次定时器
OS_OPT_TMR_PERIODIC 周期定时器
在单次定时模式时,就写初始化节拍数就好,重装载节拍数为0
- 应用实例
启动定时器->OSTmrStart()
- 函数原型
- 应用实例
停止定时器->OSTmrStop()
- 函数原型
- 应用实例
删除定时器->OSTmrDel()
OSTmrDel0用于删除一个已经被创建成功的软件定时器,删除之后就无法使用该定时并且定时器相应的信息也会被系清空。要想使用OSTmrDel()函 数必须在头文件os_ cfg.h中把宏OS_CFG_TMR_DEL_EN定义为1
- 函数原型
回调函数
- 回调函数类似于硬件的中断服务函数
- 回调函数也要快进快出,不能有阻塞任务运行的情况或者删除定时器任务的情况
- 应用实例
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!