微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > μC/OS-II的时间管理

μC/OS-II的时间管理

时间:10-08 来源:互联网 点击:

RdyGrp|=ptcb->TCBBitY;(6)

OSRdyTbl[ptcb->OSTCBY]|=ptcb->OSTCBBitX;

OS_EXIT_CRITICAL();

OSSched();(7)

}else{

OS_EXIT_CRITICAL();

}

return(OS_NO_ERR);

}else{

OS_EXIT_CRITICAL();

return(OS_TIME_NOT_DLY);

}

}else{

OS_EXIT_CRITICAL();

return(OS_TASK_NOT_EXIST);

}

}

注意,用户的任务有可能是通过暂时等待信号量、邮箱或消息队列来延时自己的(参看第六章)。可以简单地通过控制信号量、邮箱或消息队列来恢复这样的任务。这种情况存在的唯一问题是它要求用户分配事件控制块(参看6.00),因此用户的应用程序会多占用一些RAM。

5.3系统时间,OSTimeGet()和 OSTimeSet()

无论时钟节拍何时发生,μC/OS-Ⅱ都会将一个32位的计数器加1。这个计数器在用户调用OSStart()初始化多任务和4,294,967,295个节拍执行完一遍的时候从0开始计数。在时钟节拍的频率等于100Hz的时候,这个32位的计数器每隔497天就重新开始计数。用户可以通过调用OSTimeGet()来获得该计数器的当前值。也可以通过调用OSTimeSet()来改变该计数器的值。OSTimeGet()和OSTimeSet()两个函数的代码如程序清单L5.4所示。注意,

在访问OSTime的时候中断是关掉的。这是因为在大多数8位处理器上增加和拷贝一个32位的数都需要数条指令,这些指令一般都需要一次执行完毕,而不能被中断等因素打断。

程序清单 L5.4 得到和改变系统时间

INT32UOSTimeGet(void)

{

INT32Uticks;

OS_ENTER_CRITICAL();

ticks=OSTime;

OS_EXIT_CRITICAL();

return(ticks);

}

voidOSTimeSet(INT32Uticks)

{

OS_ENTER_CRITICAL();

OSTime=ticks;

OS_EXIT_CRITICAL();

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top