10.5-uC/OS-III内部任务(时基任务OS-TickTask())
几乎所有的实时系统都需要有一个能提供周期性时间的时间源,叫做时基周期或系统周期。 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())的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- 基于μC/OS—III的CC1120驱动程序设计
基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120 嵌入式操作系统 STM32F103ZE ...
- 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__)返回 ...
- os引导程序boot从扇区拷贝os加载程序loader文件到内存(boot copy kernel to mem in the same method)
[0]README 0.1) 本代码旨在演示 在boot 代码中,如何 通过 loader文件所在根目录条目 找出该文件的 在 软盘所有全局扇区号(簇号),并执行内存中的 loader 代码: 0.2 ...
- 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: #当前目录,子 ...
- _BSMachError: (os/kern) invalid capability (20) _BSMachError: (os/kern) invalid name (15) 问题的解决
在项目中突然遇到一个问题,也就是_BSMachError: (os/kern) invalid capability (20) _BSMachError: (os/kern) invalid name ...
- uC/OS - III 移植 IAR平台
关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...
- STM32F40G-EVAL_UC/OS III
micrum官网下载uc/os程序包: 包含文件cotex_M4.h:
- 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 ...
- x01.os.12: 在 windows 中写 OS
在 windows 中写操作系统,需要一系列的辅助工具.在此,要感谢川谷秀实!所有工具,都在 z_tools 文件夹中.有了大师的帮助,不妨也来尝试在 windows 中写一把 OS. 源代码及工具可 ...
随机推荐
- 【转】Winform程序未捕获异常解决方法 EventType clr20r3 P1
from:http://blog.csdn.net/chichaodechao/article/details/8294922 在开发winform程序时,用到多线程,在服务器部署后运行,老是自动关才 ...
- hello alibaba
http://ifeve.com/dubbo-learn-book/ http://ifeve.com/leader-follower-thread-model/ http://ifeve.com/a ...
- java+Quartz实现定时任务
1.首先:导入quartz相关的jar包,这里我用的是maven构建的项目,pom.xml文件导入如下: <dependency> <groupId>org.quartz-sc ...
- Centos7 防火墙常用配置及说明
一. Centos7和Centos6 防火墙的区别: 使用的工具不一样了.Centos6 使用的是iptables ,Centos7 使用的是filewall iptables 用于过滤数据包,属于网 ...
- 网络编程 -- RPC实现原理 -- Netty -- 迭代版本V3 -- 编码解码
网络编程 -- RPC实现原理 -- 目录 啦啦啦 V2——Netty -- pipeline.addLast(io.netty.handler.codec.MessageToMessageCodec ...
- NUC972---Linux驱动开发
驱动开发是嵌入式 Linux 产品开发的重要组成部分,驱动是将芯片底层与Linux应用连接起来的桥梁.驱动程序的好坏直接影响和决定着产品的稳定性,稳定的驱动程序是产品可靠性的基石. 编写 Linux ...
- EGit系列第三篇——远程提交代码
接着上篇,把本地项目提交一次才能Pull,为什么要Pull而不直接Remote Push呢,因为本地和远程仓库内容不一样(通常在远程仓库第一次新建项目会带一个README.md), 要先把远程仓库的东 ...
- 【SpringCloud微服务实战学习系列】服务治理Spring Cloud Eureka
Spring Cloud Eureka是Spring Cloud Netflix微服务中的一部分,它基于NetFlix Sureka做了二次封装,主要负责完成微服务架构中的服务治理功能. 一.服务治理 ...
- java编程感悟01
很多职位都要求有极强的编程能力,在学习编程的过程中可能很累,可能想有新认识,你可以将编程看做通关模式,以此鼓励自己不断的学习. jsp中注册时的验证码就需要javaSE的编程功底,如果这个会了,验证码 ...
- day_5.12 py 老王开枪demo
ps:2018-7-24 21:00:04 其实这部分主要是面向对象的复习!而不是面向过程 #!/usr/bin/env/python #-*-coding:utf-8-*- ''' 2018-5-1 ...