uc/os-II操作系统时钟节拍器
μC/OS需要用户提供周期性信号源用于实现时间延时和确认超时。节拍率应在每秒10次到100次之间或者说10到100Hz时钟节拍率越高系统的额外负荷就越重时钟节拍的实际频率取决于用户应用程序的精度注意用户必须在多任务系统启动以后再开启时钟节拍器也就是在调用OSStart()之后。容易犯的错误是将允许时钟节拍器中断放在系统初始化函数OSInit()之后在调用启动多任务系统启动函数OSStart()之前原因时钟节拍中断有可能在μC/OS-Ⅱ启动第一个任务之前发生此时μC/OS-Ⅱ是处在一种不确定的状态之中用户应用程序有可能会崩溃。μC/OS-Ⅱ中的时钟节拍服务是通过在SysTickHandler系统滴答时钟中断中断服务子程序中调用OSTimeTick()实现的void SysTickHandler(void){OS_CPU_SR cpu_sr;OS_ENTER_CRITICAL();OSIntNesting;OS_EXIT_CRITICAL();OSTimeTick();OSIntExit();}OSTimeTick()的两个主要功能遍历“已建立任务TCB链表”给每个用户任务控制块OS_TCB中的时间延时项OSTCBDly减1如果该项不为零的话。当某任务的任务控制块中的时间延时项OSTCBDly减到了零时把任务转入就绪态调用OSTime累加从开机以来的时间用的是一个无符号32位变量//ucos_ii.hOS_EXT INT8U OSIntNesting; /* Interrupt nesting level */508 * 时钟节拍函数 PROCESS SYSTEM TICK509 *510 * 描述: uC/OS需要用户提供周期性信号源用于实现时间延时和确认超时。节拍率应在每秒10次到100次511 * 之间或者说10到100Hz。时钟节拍率越高系统的额外负荷就越重.时钟节拍的实际频率取决于512 * 用户应用程序的精度。时钟节拍源可以是专门的硬件定时器也可以是来自50/60Hz交流电源的513 * 信号514 *515 * 参数: 无516 *517 * 返回: 无518 **********************************************************************************************519 */520void OSTimeTick (void) //时钟节拍函数{#if OS_CRITICAL_METHOD 3 //中断函数被设定为模式3OS_CPU_SR cpu_sr;#endifOS_TCB *ptcb; //定义任务控制块优先级表变量#if OS_TIME_GET_SET_EN 0 //允许生成OSTimeGet() 函数代码OS_ENTER_CRITICAL(); //关闭中断OSTime; //累加从开机以来的时间用的是一个无符号32位变量OS_EXIT_CRITICAL(); //打开中断#endifptcb OSTCBList; //保存任务控制块列表首地址//从OSTCBList开始沿着OS_TCB链表做一直做到空闲任务while (ptcb-OSTCBPrio ! OS_IDLE_PRIO){OS_ENTER_CRITICAL(); //关闭中断if (ptcb-OSTCBDly ! 0){ //如果任务等待时的最多节拍数不为0if (–ptcb-OSTCBDly 0){ //如果任务等待时的最多节拍数为0//而确切被任务挂起的函数OSTaskSuspend()挂起的任务则不会进入就绪态//执行时间直接与应用程序中建立了多少个任务成正比if ((ptcb-OSTCBStat OS_STAT_SUSPEND) 0x00){//当某任务的任务控制块中的时间延时项OSTCBDly减到了零这个任务就进入了就绪态OSRdyGrp | ptcb-OSTCBBitY;OSRdyTbl[ptcb-OSTCBY] | ptcb-OSTCBBitX;}else{ptcb-OSTCBDly 1; //否则} //允许任务等待时的最多节拍数为1}}ptcb ptcb-OSTCBNext; //指向任务块双向链接表的后链接OS_EXIT_CRITICAL(); //打开中断}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2425646.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!