几乎所有的实时系统都需要有一个能提供周期性时间的时间源,叫做时基周期或系统周期。 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. Android Wifi 主动扫描 被动扫描

    介绍主动扫描,被动扫描以及连接的wifi的扫描过程 参考文档 <802.11无线网络权威指南> <80_Y0513_1_QCA_WCN36X0_SOFTWARE_ARCHITECTU ...

  2. 【转帖】解决远程连接MariaDB(mysql)很慢的方法

    在CentOS7上安装完成MariaDB之后,发现无论命令行还是程序中连接MariaDB的时候都很慢,大约要一二十秒,于是网上搜索了一番,发现下面的文章内容: 在进行 ping和route后发现网络通 ...

  3. 深入Java内存模型之阅读理解(2)

    锁的释放-获取建立的happens before 关系 锁是java并发编程中最重要的同步机制.锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息. 下面是锁释放-获取的示例代 ...

  4. 如何用Baas快速在腾讯云上开发小程序-系列3 :实现腾讯云COS API调用

    版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/640268001487425627 来源:腾云阁 h ...

  5. 转载->C#异常处理

    C# 异常处理 异常是在程序执行期间出现的问题.C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零. 异常提供了一种把程序控制权从某个部分转移到另一个部分的方式.C# 异常处理时建立 ...

  6. Android Json 解析

    转自:http://www.cnblogs.com/mybkn/archive/2012/05/18/2508325.html JSON(JavaScript Object Notation) 是一种 ...

  7. Unity 给Mono脚本添加Try Catch工具

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Run ...

  8. 10.5ORM回顾(2)

    2018-10-5 14:47:57 越努力越幸运!永远不要高估自己! ORM的聚合和分组查询!!! # #####################聚合和分组##################### ...

  9. Android定时执行和停止某任务

    一.定义全局变量 int runCount = 0;// 全局变量,用于判断是否是第一次执行 Handler handlerCount = new Handler(); 二.创建Runnable Ru ...

  10. .NET Core开发日志——简述路由

    有过ASP.NET或其它现代Web框架开发经历的开发者对路由这一名字应该不陌生.如果要用一句话解释什么是路由,可以这样形容:通过对URL的解析,指定相应的处理程序. 回忆下在Web Forms应用程序 ...