ucos-ii 之 OSTimeTick

简介:  OSTimeTick() basically consist of decrementing the OSTCBDly field for each OS_TCB (if it‘s nonzero).


 OSTimeTick() basically consist of decrementing the OSTCBDly field for each OS_TCB (if it‘s nonzero).

 OSTimeTick() follows the chain of OS_TCB starting at OSTCBList L3.20(2) until it reaches the idle task L3.20(3).

 When the OSTCBDly field of a task’s OS_TCB is decremented to zero, the task is made ready to run L3.20(4).

 The task is not readied, however, if it was explicitly suspended by OSTaskSuspend() L3.20(5).

 The execution time of OSTimeTick() is directly proportional to the number of tasks created in an application.

void OSTimeTick (void)
{
    OS_TCB *ptcb;
    OSTimeTickHook();						(1)
    ptcb = OSTCBList;						(2)
    while (ptcb->OSTCBPrio != OS_IDLE_PRIO) {     		(3)
        OS_ENTER_CRITICAL();
        if (ptcb->OSTCBDly != 0) { 
            if (--ptcb->OSTCBDly == 0) { 
                if (!(ptcb->OSTCBStat & OS_STAT_SUSPEND)) {  	(5)
                     OSRdyGrp |= ptcb->OSTCBBitY;		(4)
                    OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
                } else {
                    ptcb->OSTCBDly = 1;
                } 
            }
        }
        ptcb = ptcb->OSTCBNext; 
        OS_EXIT_CRITICAL();
    }
    OS_ENTER_CRITICAL(); 					(7)
    OSTime++;                                                   (6)
    OS_EXIT_CRITICAL(); 
}


 OSTimeTick() also accumulates the number of clock ticks since power up in an unsigned 32-bit variable called OSTime L3.20(6).

 Note that I disable interrupts L3.20(7) before incrementing OSTime because on some processors, a 32-bit increment will most likely be done using multiple instructions.

目录
相关文章
|
API
FreeRTOS学习笔记—FreeRTOS移植
本文学习了如何移植FreeRTOS到自己的STM32工程。最后,根据正点原子提供的测试main函数,测试了移植效果。
596 0
FreeRTOS学习笔记—FreeRTOS移植
|
消息中间件 算法 安全
RTOS实时操作系统中RT-Thread、FreeRTOS和uCOS 选择哪一个学习比较好?
RTOS实时操作系统中RT-Thread、FreeRTOS和uCOS 选择哪一个学习比较好?
|
物联网 Java 编译器
嵌入式操作系统——uCOS
嵌入式操作系统——uCOS
635 0
|
Web App开发 C语言 Linux
uCOS_II.C
  Lin-credible!  Linux内核读不懂,先读读 uCOS的中文注释的源码! 1 /* 2 ************************************************************************************************* 3 *
1343 0
|
编译器
uCos-III移植到STM32F10x
最近在百度上看了uCOS-III 的介绍后,诸多功能有很大的提升和改进,感觉有必要升级一下开发环境。百度介绍:http://baike.baidu.com/view/8531313.htm 环境: STM32F10x 3.5固件库。
1294 0
|
Linux 调度 C++
手把手教你写Linux设备驱动---中断(三)--workqueue实现(基于友善之臂4412开发板) 【转】
转自:http://blog.csdn.net/morixinguan/article/details/69680909 上节,我们讲到如何来实现tasklet小任务机制 http://blog.csdn.NET/morixinguan/article/details/69666935 这节,我们来实现一下中断下半部的工作队列: 在写这个demo之前,我们要了解一下工作队列的相关数据结构还有API。
1260 0
|
Linux 调度 API
手把手教你写Linux设备驱动---中断(二)--tasklet实现(基于友善之臂4412开发板)
上节:http://blog.csdn.net/morixinguan/article/details/68958185 在上一节博文中,教会了大家如何来写一个Linux设备的中断程序,实现也非常简单,我们来回顾一下具体的操作流程,只要遵循以下几个步骤即可实现最简单的中断处理程序: 使用中断相...
1306 0
|
Linux 调度 API
手把手教你写Linux设备驱动---中断(三)--workqueue实现(基于友善之臂4412开发板)
上节,我们讲到如何来实现tasklet小任务机制 http://blog.csdn.net/morixinguan/article/details/69666935 这节,我们来实现一下中断下半部的工作队列: 在写这个demo之前,我们要了解一下工作队列的相关数据结构还有API。
1364 0
|
Web App开发 调度

热门文章

最新文章