10.4-uC/OS-III内部任务(空闲任务OS_IdleTask())
1.内部任务-空闲任务
在uC/OS-III初始化的时候,它会创建至少2个内部的任务(OS_IdleTask()和OS_TickTask()), 3个可选择的任务 ( OS_StatTask(),OS_TmrTaks(), OS_IntQTask())。这些可选择的任务在编译时由OS_CFG.H中的配置决定。
2.空闲任务 OS_IdleTask()
OS_IdleTask()是uC/OS-III最先创建的任务。它的优先级通常是OS_CFG_PRIO_MAX-1。事实上,为了安全,它应该独占这个优先级。在其他任务创建的时候, OSTaskCreate()会确保他们不会跟空闲任务有相同的优先级。当CPU中没有其它就绪任务运行时,空闲会被运行。空闲任务的重要部分代码如下 ( 详见OS_CORE.C中的全部代码)
( 1).空闲任务是一个无限循环的不会等待任何事件的任务。这是因为, 在大部分的处理器中, 当没有事情可做时, 处理器依然会执行指令。当uC/OS-III中没有其它更高的就绪任务待运行时,uC/OS-III就会把CPU分配给空闲任务。
( 2).空闲任务运行时,两个计数变量会递增。OSIdleTaskCtr是用32位无符号整数定义的, 在uC/OS-III初始化的时候它的值被复位。它用于表示空闲任务的活动情况。换句话说,如果用调试器查看该变量,就会看到介于0x00000000和0xffffffff之
间的数。 OSIdleTaskCtr的增长速度取决于CPU的空闲情况。 CPU越空闲,该值增长越快。
OSStatTaskCtr也是用32位无符号整数定义的,提供给测量任务测量CPU的利用率。
( 3).空闲任务的每次循环,都会调用OSIdleTaskHook()函数,这个函数提供给用户扩展应用。在这个函数中不要编写会让空闲任务被挂起的代码,对于uC/OS-III移植者来说这是一个常识。
OSIdleTaskHook()可以编写使CPU处于低功耗的代码。然而,这样的话就意味着OSStatTaskCtr不能再用于测量CPU的使用率了。
通常情况下,当中断发生时处理器退出低功耗模式。 ISR中可能会设置某些寄存器恢复CPU速度为全速或其想要的速度。 ISR可以唤醒了一个高优先级任务 ( 每个任务的优先级都比空闲任务的优先级高), 然后ISR不会返回到空闲任务, 而是切换到这个高优先级任务。如果这个任务完成操作或者挂起, uC/OS-III就会切换到空闲任务并进入OSIdleTaskHook()并进入低功耗模式。 然后, 进入OS_IdleTask()并循环。
10.4-uC/OS-III内部任务(空闲任务OS_IdleTask())的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- uC/OS - III 移植 IAR平台
关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...
- uC/OS II原理分析及源码阅读(一)
uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...
- 基于μC/OS—III的CC1120驱动程序设计
基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120 嵌入式操作系统 STM32F103ZE ...
- uc/os 任务删除
问题描述: uc/os 任务删除 问题解决: uc/os任务删除流程图 具体代码 注: 如上是关中断,以及取消优先级对应的就绪标志 关中断代码为: 取消就绪标志,实际上是将就绪表中指定 ...
- 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II
SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...
- 在STM32F401上移植uC/OS的一个小问题 [原创]
STM32F401xx是意法半导体新推出的Cortex-M4内核的MCU,相较于已经非常流行的STM32F407xx和STM32F427xx等相同内核的MCU而言,其特点是功耗仅为128uA/MHz, ...
- uc/os任务创建
问题描述: uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...
- uC/OS 的任务调度解析 (转)
uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...
随机推荐
- Oracle中Select语句完整的执行顺序
oracle Select语句完整的执行顺序: .from 子句组装来自不同数据源的数据: .where 子句基于指定的条件对记录行进行筛选: .group by子句将数据划分为多个分组: .使用聚集 ...
- 错误代码CS0051可访问性不一致_解决方案
一.问题的出现 用C#在写多线程时报错 二.解决方案 1,分析思路 本来对BaseStruct设置为私有访问,但调用时又想公开化,从而造成了编译错误. 2,解决 将红色部分改为公有 3,总结 注意pu ...
- (原)关于获取ffmpeg解析rtsp流sdp中带有sps,pps的情况
转载请注明出处:http://www.cnblogs.com/lihaiping/p/6612511.html 今天同事准备在android下使用ffmpeg来获取rtsp流,问我如何获取获取sps ...
- 将Highcharts图表数据生成Table表格
有的时候,我们不仅仅需要漂亮的统计图来显示统计结果,还需要在统计图下方一个表格可以更加直观的展现各类数据.既然统计图都显示出来了,那我们可以根据统计图的各元素生成表格了. 首先,先显示统计图. Htm ...
- react-router 4.3 js实现跳转
import React, {Component} from 'react'; import { NavLink,Link } from "react-router-dom"; i ...
- 卡通渲染Shader
http://www.opengpu.org/forum.php?mod=viewthread&tid=17071http://www.opengpu.org/bbs/forum.php?mo ...
- 解决Win10 Virtualbox5.2.18桥接不能联网小记
1.设备管理器,右键没添加过时硬件(如果没有,则在cmd中键入命令hdwwiz C:\windows\system32>hdwwiz),按照如下图操作 如此安装Microsoft KM-TEST ...
- ng4.0 生命周期
名称 时机 接口 范围 ngOnChanges 当被绑定的输入属性的值发生变化时调用,首次调用一定会发生在 ngOnInit之前. OnChanges 指令和组件 ngOnInit 在第一轮 ngOn ...
- [转]linux 调用动态库so文件
记录一个面试被问到的问题. extern 有什么用途? 除了多文件共享全局变量外还有呢? extern "C" 的功能? 我想看完这篇文章就可以知道第三个问题了. 关于动态调用动态 ...
- Managing Hierarchical Data in MySQL(邻接表模型)[转载]
原文在:http://dev.mysql.com/tech-resources/articles/hierarchical-data.html 来源: http://www.cnblogs.com/p ...