Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103217
  • 博文数量: 8
  • 博客积分: 467
  • 博客等级: 一等列兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-22 22:16
个人简介

追梦人

文章分类
文章存档

2013年(1)

2012年(1)

2011年(2)

2010年(4)

分类: C/C++

2010-06-02 14:41:55

uc/os的时间管理(1)

uc/os中时间管理的函数有以下几个:
   1任务延时函数,OSTimeDly()
   2按时分秒延时函数OSTimeDlyHMSM();
   3 让处于延时期的任务结束延时,OSTimeDlyResume();
   4系统时间OSTimeGet()和OSTimeSet()
一.任务延时函数OSTimeDly()
uc/os要求用户提供定时中断来实现延迟和超时控制等功能。时钟节拍的频率越高,系统的负荷就越重。
uc/os II提供了这样一个系统服务,申请该服务的任务需要延迟一段时间,这段时间的长短是由时钟节拍的数目来决的,这个函数叫OSTimeDly().当系统调用一次OSTimeDly()时系统进行一次任务调度,既等待队列中优先级最高的任务
投入运行。注意当延迟结束时,将就绪态中优先级最高的任务的状态置为运行态。
  void OSTimeDly(INT16U ticks)
{
   if(ticks>0){
       OS_ENTER_CRITICAL();
       if((OSRdyTbl[OSTCBCur->OSTCBY]&=~OSTCBCur->OSTCBCur->OSTCBBitX)==0){
              OSRdyGrp&=~OSTCBCur->OSTCBBitY;
       }
   OSTCBCur->OSTCBDly=ticks;
   OS_EXIT_CRITICAL();
   OSSched();
   }
}

其中ticks的取值范围是1到65535,在负荷很重的系统中,任务甚至有可能会在时钟中断即将发生时调用OSTimeDly(1),在这种情况下任务几乎没有得到任何延迟,因为任务马上又被重新调度了,如果用户的应用程序至少得延时一个节拍,必须要调用OSTimeDly(2),指定延时两个节拍。
阅读(3515) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~