几乎所有的实时系统都需要有一个能提供周期性时间的时间源,叫做时基周期或系统周期。 uC/OS-III的时基周期处理程序封装在OS_TICK.C文件中。
OS_TickTask()任务被uC/OS-III创建, 其优先级是用户可配置的。(通过配置OS_CFG_APP.H中的OS_CFG_TICK_TASK_PRIO)。通常设置其优先级较高。 事实上, 它的优先级应该设置比重要任务的优先级稍低。
OS_TickTask()用于追踪等待期满的任务、挂起超时的任务。

( 1).使用硬件定时器并被设置为以10到1000Hz之间的频率产生中断,同时要设置OS_CFG_APP.H中OS_CFG_TICK_RATE为硬件定时器的中断频率。时基中断并不是一定要用CPU产生, 事实上, 它可以从其他的具有较精确的周期性时间源中获得,比如电源线( 50-60Hz)等。
( 2).假定CPU中断使能, CPU接收时基中断, 并抢占当前任务,程序指针SP指向时基中断服务程序。时基中断服务程序必须调用OSTimeTick() ( 详见OS_TIME.C) ,然后时基ISR清除该中断标志位。然而, 有些应用中就需要先清中断标志再调用OSTimeTick()。如下所示



OSTimeTick()首先调用OSTimeTickHook(),它提供给用户扩展。(当时定时断产生时用户需要做的工作)
( 3).OSTimeTick()用于标记时基任务并就绪时基任务。定时器中断后基任务可能不被立即执行,因为中断程序打断的可能是一个比时基任务更高优先级的任务,完成时基ISR后, uC/OS-III会返回被打断的这个任务。
( 4).当时基任务执行时,它会遍历队列中所有等待期满的任务、等待事件超时的任务。 按照这个观点, 这个会被叫做时基列表。 时基任务会就绪时基列表中的那些期满、超时的任务。
uC/OS-III的时基队列中有时也有可能存放了上百个任务 ( 如果应用需要很多任务)。时基队列通过一种方法检测这些任务是否期满,是否可以被设置为就绪,该方法不会占用太多CPU时间。如图5-9

( 1).时基列表中包含了一个表( OSCfg_TickWheel[])和一个计数器(OSTickCtr)。
( 2).这个表多达OS_CFG_TICK_WHEEL_SIZE个记录,它是在编译时配置的( 详见OS_CFG_APP.H)。 记录数取决于处理器的RAM及应用中最大的任务数。推荐值为所有任务/4,不推荐使用偶数,避免设置OS_CFG_TICK_WHEEL_SIZE为10(用11代替)。事实上,质数是一个很好的选择。
( 3).表中的每个记录包含3个变量:.NbrEntriesMax,NbrEntries
和FirstPtr。NbrEntries表明链接到该记录的任务序号。
NbrEntriesMax追踪到表中优先级最高的记录。这个值在调用OSStatReset()时被复位。
FirstPtr包含了一个指向双向任务列表的指针。
当时基中断每产生一次, OSTickCtr的值就会被OS_TickTask()递
增一次。
当调用OSTimeDly???()或者OS???Pend()时 ( 所允许的超时时间大
于0),任务会被自动的插人时基列表。

10.5-uC/OS-III内部任务(时基任务OS-TickTask())的更多相关文章

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

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

  2. 基于μC/OS—III的CC1120驱动程序设计

    基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120   嵌入式操作系统   STM32F103ZE   ...

  3. Python os.path.dirname(__file__) 与 Python os.path.abspath(__file__) 与 os.system() 函数

    Python  os.path.dirname(__file__) 与 Python os.path.abspath(__file__) 的区别 os.path.abspath(__file__)返回 ...

  4. os引导程序boot从扇区拷贝os加载程序loader文件到内存(boot copy kernel to mem in the same method)

    [0]README 0.1) 本代码旨在演示 在boot 代码中,如何 通过 loader文件所在根目录条目 找出该文件的 在 软盘所有全局扇区号(簇号),并执行内存中的 loader 代码: 0.2 ...

  5. python获取某路径下,某种特定类型的文件名称,os.walk(路径)生成器;os.listdir(路径),os.path.splitext(名称),os.path.join(路径,名称),os.path.isdir(路径\名称)

    #获取某文件夹下制定类型文件# import os# def filep(fp):# l=[]# a=os.walk(fp) #生成器# for nowp,sonp,oth in a: #当前目录,子 ...

  6. _BSMachError: (os/kern) invalid capability (20) _BSMachError: (os/kern) invalid name (15) 问题的解决

    在项目中突然遇到一个问题,也就是_BSMachError: (os/kern) invalid capability (20) _BSMachError: (os/kern) invalid name ...

  7. uC/OS - III 移植 IAR平台

    关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...

  8. STM32F40G-EVAL_UC/OS III

    micrum官网下载uc/os程序包: 包含文件cotex_M4.h:

  9. Windows下虚拟机安装Mac OS X —– VMware Workstation12安装Mac OS X 10.11

    1下载  镜像:Instal OS X Yosemite 10.10.3(14D131).cdr        密码:qhhm 2 unlocker208文件(链接:https://pan.baidu ...

  10. x01.os.12: 在 windows 中写 OS

    在 windows 中写操作系统,需要一系列的辅助工具.在此,要感谢川谷秀实!所有工具,都在 z_tools 文件夹中.有了大师的帮助,不妨也来尝试在 windows 中写一把 OS. 源代码及工具可 ...

随机推荐

  1. 【转】svn:is not under version control and is not part of the commit, yet its child解决办法

    来自:http://blog.csdn.net/lufeng20/article/details/7641093 在把写好的代码提交到svn上面时,遇到了一个错误如下: svn: Commit fai ...

  2. JAVA 构造器, extends[继承], implements[实现], Interface[接口], reflect[反射], clone[克隆], final, static, abstrac

    记录一下: 构造器[构造函数]: 在java中如果用户编写类的时候没有提供构造函数,那么编译器会自动提供一个默认构造函数.它会把所有的实例字段设置为默认值:所有的数字变量初始化为0;所有的布尔变量设置 ...

  3. Spark学习笔记——构建基于Spark的推荐引擎

    推荐模型 推荐模型的种类分为: 1.基于内容的过滤:基于内容的过滤利用物品的内容或是属性信息以及某些相似度定义,来求出与该物品类似的物品. 2.协同过滤:协同过滤是一种借助众包智慧的途径.它利用大量已 ...

  4. MTK 自定义系统服务

    添加系统服务需要添加aidl,service,manager文件,需要修改SystemServer,Context,ContextImpl 下面举例进行说明,主要添加一个服务,用于获取系统时间和版本号 ...

  5. Ubuntu 14.04 配置VNC服务 配置Xfce4桌面

    一.安装配置VNC 1.首先安装VNC apt-get install vnc4server 2.为VNC设置密码 vncpasswd 输入密码,然后再确认一遍,就OK了. 3.启动VNC vncse ...

  6. 网页使用思源字体 CSS

    在知乎上再次看到这门字体的提问,想想中文字体过得多么艰辛,中文软件过得多么艰辛. 思源字体 2014年7月,Adobe与Google宣布推出一款新的开源字体思源黑体, 有七种字体粗细(ExtraLig ...

  7. Mapper 赋值对应实体属性

    public static class MapperExtensions { public static TResult MapTo<TResult>(this object self, ...

  8. JS 通过字符串取得对应对象

    //对Array的扩展,查找所有满足条件的元素 Array.prototype.findAll = function (match) { var tmp = []; for (var i = 0; i ...

  9. 转:关于ROWNUM的使用

    转载自:原文:https://blog.csdn.net/songsenkeji/article/details/4432942 ROWNUM的概念ROWNUM是一个虚假的列.它将被分配为 1,2,3 ...

  10. 转载:Maplab开源VI-SLAM框架介绍

    https://blog.csdn.net/ccfiricen/article/details/79089694