时间是一个非常重要的概念,我们和朋友出去游玩需要约定一个时间,做事情也需要花费一段时间,总之,我们的生活离不开时间。操作系统也一样,也需要一个时间来规范其任务的执行。

我们生活中,时间的最小单位是秒,硬件电路中,产生的最小的时间是晶振的频率,在操作系统中,其最小的时间单位叫做时钟节拍(Time Tick),其是有硬件定时器产生的一个周期为毫秒(ms)级的时间,即当定时器达到指定的时间后,产生一个中断(OSTickISR()),时钟节拍即两个中断之间间隔的时间。

当进入时钟节拍中断函数(OSTickISR())后,其首先保存CPU寄存器的值,(其值保存在哪呢?执行ISR和执行任务的时候,保存的地方应该不同啊,执行任务的时候,应该保存在任务堆栈中,但执行ISR的时候,保存在哪呢?)对终端嵌套层数(OSIntNesting)加1,然后判断其是否没有中断嵌套的情况,如果没有,则将堆栈指针(SP)赋值给当前任务的TCB成员OSTCBStkPtr。接着调用时钟节拍函数(OSTimeTick()),再接着清除中断,最后退出中断(OSIntExit()),在推出中断函数中,会引发一次任务调度。

  在时钟节拍函数(OSTimeTick())中,主要的任务有两个,一是给记录时间的变量OSTime+1,二是遍历所有的任务控制块链表,给任务块中用来保存任务延时时限的OSTCBDly-1(即告诉任务,时间已经过去一个节拍了),若非挂起任务的时限已经到了,则使其进入任务就绪状态(注意:是非挂起的任务,挂起的任务(OSTaskSuspend()),必须调用恢复任务函数(OSTaskResume())来恢复其状态)。

有的时候,我们希望在每个时钟节拍都做一些工作,比如现实生活中,我让手机信号灯每秒钟闪一下。我们可以调用时钟节拍服务函数的钩子函数(OSTimeTickHook())完成这项任务。钩子函数有很多种,比如在任务切换的时候,要做的工作(OSTaskSwHook())。总共有10个这样的钩子函数。当然,如果不是很必要,最好必要使用钩子函数,因为执行也需要时间,会造成定时不准确。(在执行钩子函数的时候,硬件定时器不一样也是在工作的吗?当它达到定时时间的时候,一样会产生中断,这样会造成定时不准确吗?)

  在每个任务(除了空闲任务)中,都必须使用延时函数(OSTimeDly())来使当前任务的运行暂停一段时间并执行一次任务调度,使系统去执行其他优先级高的就绪任务,否则该任务会一直占用CPU的使用权,造成任务的独占CPU的现象。

OSTimeDly()的作用就是将延时的时限存入任务控制开TCB的成员OSTCBDly中,并取消当前任务的就绪状态,接着进行一次任务调度,使系统去执行任务优先级最高的就绪任务。OSTimeDly(INT16U ticks)是以时钟节拍数来定时的一个函数,系统还定义了另一个延时函数INT8U OSTimeDlyHMSM(INT8U hours, INT8U minutes, int8u seconds, INT8U milli),即规定时、分、秒、毫秒。

有使任务延时的函数,自然也需要使任务取消延时的函数,OSTimeDiy(),无论调用的是上述中的那种延时函数,都是通过调用OSTimeDlyResume()取消该任务的延时从而进入就绪状态。该函数的原型是 INT8U OSTimeDlyResume(INT8U prio);

  最后,还可以调用OSTimeGet()和OSTimeSet()来获取或设置系统时间,即发生的时钟节拍数(OSTime的值)。其函数原型分别问 INT32U OSTimeGet(void)和void OSTimeSet(INT32U ticks)。

uC/OS-II中的时间 (转)的更多相关文章

  1. 【原创】uC/OS II 任务切换原理

    今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引 ...

  2. uC/OS II原理分析及源码阅读(一)

    uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...

  3. 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II

    SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...

  4. uC/OS II 函数说明 之–OSTaskCreate()与OSTaskCreateExt()

    1. OSTaskCreate()    OSTaskCreate()建立一个新任务,能够在多任务环境启动之前,或者执行任务中建立任务.注意,ISR中禁止建立任务,一个任务必须为无限循环结构.    ...

  5. uc/os iii移植到STM32F4---IAR开发环境

    也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...

  6. 【原创】uC/OS 中LES BX,DWORD PTR DS:_OSTCBCur的作用及原理

    LES BX, DWORD PTR DS:_OSTCBCur ;OSTCBCur->OSTCBStkPtr = SS:SP!!! ], SS ;将当前SS(栈的基地址)寄存器值存放至当前任务控制 ...

  7. 关于uC/OS的简单学习(转)

    1.微内核 与Linux的首要区别是,它是一个微内核,内核所实现的功能非常简单,主要包括: 一些通用函数,如TaskCreate(),OSMutexPend(),OSQPost()等. 中断处理函数, ...

  8. uC/OS-III 时钟节拍,时间管理,时间片调度

    uC/OS-III 时钟节拍,时间管理,时间片调度   时钟节拍 时钟节拍可谓是 uC/OS 操作系统的心脏,它若不跳动,整个系统都将会瘫痪. 时钟节拍就是操作系统的时基,操作系统要实现时间上的管理, ...

  9. 在STM32F401上移植uC/OS的一个小问题 [原创]

    STM32F401xx是意法半导体新推出的Cortex-M4内核的MCU,相较于已经非常流行的STM32F407xx和STM32F427xx等相同内核的MCU而言,其特点是功耗仅为128uA/MHz, ...

随机推荐

  1. 转:DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)之一

    转载来自:http://blog.csdn.net/shanghaiqianlun/article/details/6976804 作者:shanghaiqianlun的专栏 1.结构框图: 2.管脚 ...

  2. C51库函数积累

    C51库函数积累: (1)_chkfloat_: 函数定义:unsigned char _chkfloat_ ( float val); /* number to check */ 函数功能:_chk ...

  3. Xamarin devexpress Grid

    Devexpress 提供了datagrid 控件对于xamarin 进行支持.整个世界美好了,已经无法用语言来形容一个 被列表控件折磨的要死的人看到熟悉的图标时候的激动了.还有一点引用官网的原话: ...

  4. css属性之!important

    提升指定样式规则的应用优先权. IE6及以下浏览器有个比较显式的支持问题存在,!important在同一条规则集里不生效.请看下述代码: div { color: #f00 !important; c ...

  5. 【转】Java 多线程(四) 多线程访问成员变量与局部变量

    原文网址:http://www.cnblogs.com/mengdd/archive/2013/02/16/2913659.html 先看一个程序例子: public class HelloThrea ...

  6. AES的S-BOX构造

    利用GF(2^8)乘法逆元,以及矩阵运算,可以构造出AES的SBOX. 求乘法逆元的一般方法是利用扩展欧几里得定理,在这里我取了个巧. 因为我已经有了GF的指数表(见上一篇文),利用指数表可以轻易地构 ...

  7. 最最常用的 100 个 Java 类(转)

    大部分的 Java 软件开发都会使用到各种不同的库.近日我们从一万个开源的 Java 项目中进行分析,从中提取出最常用的 Java 类,这些类有来自于 Java 的标准库,也有第三方库.每个类在同一个 ...

  8. __device__ __global__ __host__

    __device__ 标记的函数从一个在器件中执行的函数呼叫,在器件中执行 __global__ 表示该函数从一个在主机中执行的函数呼叫,在器件中执行 __host__表示在主机中呼叫,在主机中执行的 ...

  9. Creating Apps With Material Design —— Defining Shadows and Clipping Views

    View转载请注明 http://blog.csdn.net/eclipsexys 翻译自Developer Android,时间仓促,有翻译问题请留言指出,谢谢 定义阴影和裁减 材料设计引入了深度的 ...

  10. uploadify3.1 参数 中文详解

    langFile: 'http://www.static-xxx.nu/uploader/uploadifyLang_en.js',//语言包的路径,能设置所有的提示文字 swf: 'http://w ...