Ucos学习之时间管理
来源:互联网 发布:球状闪电刘慈欣 知乎 编辑:程序博客网 时间:2024/05/20 14:26
作者:lstzixing
转自:http://bbs.ednchina.com/BLOG_ARTICLE_201399.HTM
一、ucos的时间管理机制
在ucos中,任务可以通过调用API实现延时。与普通的单片机编程不同,在操作系统的管理下,各任务间在逻辑上是并行的,并且会因某些原因被强制挂起。这种情况下,采用软件延时,实际的延时时间总会大于或等于实际的延时。如下代码:
Void delay( int8u ms )
{
Int i, j;
For( i=0; i<0x20; i++ )
For( j=0; j<0xfff, j++ );
}
在delay执行时,实际的双重循环会因更高优先级的任务就绪而使当前任务挂起。当高优先级任务放弃CPU而使得该任务重新执行时,会过去t时间,任务再次执行循环直至退出。实际延时时间为delay()不中断时执行时间t1 + t > t1.
实际上,采用delay()软件延时总体效率比较低。因为任务在延时时会占有CPU,特别是在ucos这样总是高优先级任务运行的系统中。在延时,cpu实际一直在执行delay()代码,没做有用工作。因为,如果任务需要延时,将任务挂起,使cpu转而执行其它任务会使得cpu总的利用效率会高的多。
Ucos提供的延时基于系统时钟。在系统初始化时,会进行系统时钟的初始化。系统时钟一般由硬件的某个时钟提供,该时钟会定时中断,称为一个tick。在每个tick发生时,系统进入时钟中断ISR。ISR 调用OSTimeTick(). OSTimeTick()对OSTCBList链表中的每个任务的进行延时处理,即将任务的TCB中的.OSTimeDly--。若OSTimeDly=0, 如果任务不被挂起,则将任务就绪,等待调度。OSTCBList包含了系统中所有创建的任务。
任务延时,即将任务从就绪表中删除,将OSTimeDly置为合适的值。等待OSTimeDly=0时,再置为就绪,等待调度。
因此任务的延时,并不是要以延时任务时长,理想上总是tick中断间隔的N倍。
Ucos还允许对系统时钟tick进行计数,以计算自系统系统以来进行了多少个tick.
二、ucos提供的接口函数
void OSTimeDly (INT16U ticks).
功能:延时ticks个系统tick时长。当成功延时后,进行任务调度。
INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli)
功能:提供基于毫秒,秒等容易的用户接口。
INT8U OSTimeDlyResume (INT8U prio);
功能:恢复延时任务
INT32U OSTimeGet (void);
void OSTimeSet (INT32U ticks);
功能:返回,设置系统时钟tick计数.
三、关于延时功能的使用
虽然ucos提供了延时函数,但因为是基于系统时钟中断的,所有对于小于时钟中断时间间隔的延时,并不能提供;只能通过软件延时。
在很多情况下,可以通过信号量、邮箱等方式取代延时功能。
特别要注意的是,在多任务的运行环境中,即使任务延时已经完毕,但由于此时有高优先级的任务运行,此时任务仍不能运行。至任务可以运行时,实际的延时已经超过了预期的延时。
- Ucos学习之时间管理
- ucos-iii学习之时间管理
- ucos II 系统学习之------时间管理函数OSTimeGet()
- 嵌入式系统学习——STM32之UCOS-III中断和时间管理及软件定时器
- UCOS-II时间管理
- ucos-iii学习之任务管理
- ucos-iii学习之内部任务管理
- ucos-iii学习之中断管理
- ucos-iii学习之软件定时器管理
- UCOS 时钟及时间管理
- ucos II 内核学习之七:内存管理
- ucos II 内核学习之七:内存管理
- ucos 学习之二
- ucOS||学习之基本概念
- Ucos学习之内存管理
- ucos学习篇之信号量
- Ucos学习之写在开头
- 学习uCos之路(2)
- Android如何运行真机在eclipse上调试应用
- “安装程序无法定位现有系统分区,也无法创建新的系统分区”-安装win7的提示
- 策略模式实现支持多种类数据库的DBHelp(推荐--arvin)
- PO RELEASE 采购订单审核(支持多级审核)
- 用BOOST读配置文件
- Ucos学习之时间管理
- Sql语句
- 抓住3G android人才缺口的机遇,让薪水飞一会儿!
- 设置(Settings)
- 关于sql的一点经验
- CUDA计算能力的一个衡量标准
- INI file
- 类似WEBQQ的一套开源代码
- 金蝶EAS—BOS 开发经验