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())的更多相关文章

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

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

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

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

  3. uC/OS II原理分析及源码阅读(一)

    uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...

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

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

  5. uc/os 任务删除

    问题描述:     uc/os 任务删除 问题解决: uc/os任务删除流程图 具体代码 注:     如上是关中断,以及取消优先级对应的就绪标志 关中断代码为: 取消就绪标志,实际上是将就绪表中指定 ...

  6. 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II

    SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...

  7. 在STM32F401上移植uC/OS的一个小问题 [原创]

    STM32F401xx是意法半导体新推出的Cortex-M4内核的MCU,相较于已经非常流行的STM32F407xx和STM32F427xx等相同内核的MCU而言,其特点是功耗仅为128uA/MHz, ...

  8. uc/os任务创建

    问题描述:      uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...

  9. uC/OS 的任务调度解析 (转)

    uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...

随机推荐

  1. 牛客网_Go语言相关练习_判断&选择题(5)

    一.判断题 defer应该在if后面,如果文件为空,close会崩溃. package main import ( "os" "fmt" ) func main ...

  2. [algorithm] 汉诺塔问题

    汉诺塔是根据一个传说形成的一个问题.汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗 ...

  3. 【PostgresSQL】同时更新两个表

    UPDATE table1 SET column = value FROM table2 WHERE table1.column2 = table2.column2

  4. Linux设备驱动剖析之Input(一)

    前言 以前在移植Qt到开发板上时只知道在配置文件中需要指定触摸屏的设备文件/dev/input/event0,仅此而已.直到一年半前突然想到用红外遥控器控制Tiny6410开发板上的Android系统 ...

  5. Mariadb 10.3.5 序列号(sequence) 尝鲜

    除了Oracle Mariadb 也有sequence了,前提是Mariadb 10.3以上版本才支持. 但目前的正式版依然是10.2 启动一个Mariadb 10.3.5 docker pull m ...

  6. js - 常用功能方法汇总(updating...)

    一.查值的类型(可用于拷贝) /* * @Author: guojufeng@ * @Date: 2017-12-20 15:07:06 * @purpose 获取一个值的类型 * @param {v ...

  7. css3整理--background-image

    background-image语法: background-image: url1,url2,...,urlN; 通过“,”分隔N张背景图片,background的所有其它属性需要配合该属性进行设置 ...

  8. modbus调试工具

    1,简介 网站地址:http://www.modbustools.com/ 该网站提供了几个软件工具,可以运行于windows 2000/XP/Vista/7环境下,用来测试和仿真Modebus设备. ...

  9. Hyper-V、Esxi虚机还原,远程重启(关机)

    /// <summary> /// 还原虚拟机 /// </summary> /// <param name="RDPID"></para ...

  10. favicon.ico 网站小图标标识

    随便打开一个网页:比如 http://www.baidu.com/ 可以看到在浏览器的标签头上面显示了一个图标,这个图标是:,也就是我们常说的favicon.ico. 由于这篇文章主要讨论favico ...