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. 源代码及工具可 ...
随机推荐
- tensorflow模型量化
tensorflow模型量化/DATA/share/DeepLearning/code/tensorflow/bazel-bin/tensorflow/tools/graph_transforms/t ...
- 关于Solaris 的磁盘的分区
也许是深受LINUX Windows fdisk 影响,每次看完Solaris的format命令,总是云里雾里.我今天总结一下,各位给点指点 一. Linux.Windows 传统的磁盘区层级, ...
- 阿里云ECS服务器主机安装多个网站
web|服务器|站点 Windows 2000 Server安装成功后,一般会启动一个默认的Web站点,为整个网络提供Internet服务.在中小型局域网中,服务器往往只有一台,但是一个Web站点显然 ...
- [IR] Time and Space Efficiencies Analysis of Full-Text Index Techniques
文章阅读:全文索引技术时空效率分析 LIU Xiao-ZhuPENG Zhi-Yong 根据全文索引实现技术的不同,将其分为三大类: 索引技术 (倒排文件.签名文件 .后缀树与后缀数组) 压缩与索引混 ...
- Possible causes are invalid address of the remote server or browser start-up failure.
appium 脚本运行不起来 Caused by: org.apache.http.conn.HttpHostConnectException: Connect to 127.0.0.1:4723 [ ...
- sencha touch 在新版谷歌浏览器中painted事件无法触发解决方案以及carousel 控件、togglefield控件、滚动条失效
在2.3/2.4版本中,新版谷歌浏览器(43.44版本)里面painted事件是不会触发的,以及carousel 控件.togglefield控件.滚动条失效,官方的解决方案如下,测试可用 会出现这个 ...
- freemarker特殊字符转义
一个坑了很久的问题,今天上午终于在同事帮助下搞定了,,利用ibatis框架,从sqlserver数据库中读取数据,放到java对象中,其中有一项description中有特殊字符,没留意,在ftl文件 ...
- ELK之使用filebeat收集java运行日志
安装filebeat修改配置文件/etc/filebeat/filebeat.yml filebeat.prospectors: - type: log enabled: true #日志路径 pat ...
- db2 cpu使用率高问题分析处理
性能调优步骤 明确问题->收集数据->分析数据->细化.定位问题->优化 环境: db2 问题:%usr CPU高,大约99%,db2sysc进程使用的最多 收集数据 ---系 ...
- Lucene.net(4.8.0) 学习问题记录六:Lucene 的索引系统和搜索过程分析
前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...