【深入实践ucos-ii】任务属性
2016-02-10 12:46
197 查看
C语言可执行代码结构
总共5个
在没有调到内存运行前有3个
代码段:存放CPU执行的机器指令。数据段:该段包含了在程序中明确被初始化的全局变量,静态变量(包括全局静态变量和局部静态变量)和常量数据。
BSS段:亦称未初始化的数据段,该段存放的是全局未初始化变量,静态未初始化变量。
运行时除了以上还有额外2个
栈段(stack):存放函数的参数值,局部变量值,以及在进行任务切换时存储当前任务的上下文内容。堆段(heap):用于动态内存分配,即使用malloc/free系列函数来管理的内存空间。
图解:
ucos-ii任务结构
篇幅关系,只给出图:ucos-ii任务栈
栈空间类型
ucos-ii采用全局数组来实现栈,数据类型为OS_STK,根据CPU的位数来定义,16位CPU就是短整型。栈增长方向
由宏OS_STK_GROWTH决定,值为1,标识栈增长方向由高到低,为0,则由低到高。ucos-ii任务控制块
TCB(Task Control Block)用来存储一个任务的当前属性。1. 任务栈空间位置
2. 任务与其他任务通信的数据空间
3. 任务当前的状态
4. 任务的优先级
ucos-ii任务优先级
ucos-ii的任务调度采用的是任务优先级的调度算法,优先级越高越容易获取CPU的控制权。优先级值越大代表优先级越低。相关定义:
[code]INT8U OSTCBPrio; typedef unsigned char INT8U;
ucos-ii任务状态
对于单处理器来说,任何时刻仅有一个任务处于运行状态,其他所有任务都处于其他状态。ucos-ii定义如下基本状态:OS_STAT_RDY:准备执行状态,除CPU外,该任务的其他资源都准备就绪。
OS_STAT_SEM:被信号量阻塞,该任务目前需要等待信号量。
OS_STAT_MBOX:被消息邮箱阻塞,该任务目前需要等待消息邮箱。
OS_STAT_Q:被消息队列阻塞。
OS_STAT_MUTEX:被互斥事件阻塞。
OS_STAT_FLAG:被事件组标识阻塞。
OS_STAT_PEND_ANY:被任意事件阻塞。
OS_STAT_SUSPEND:暂停运行。
ucos-ii的主要状态包括就绪、运行、阻塞/暂停、休眠(停止)和被中断。他们之间关系如下:
系统任务
空闲任务
空闲任务在没有其他任务运行时运行,其优先级最低。统计任务
统计任务优先级为OS_IDLE_PRIO-1,用来统计CPU利用率。统计任务执行函数为OS_TaskStat(),[code]OS_EXT INT8S ISCPUUsage;
计算公式
usage = (1 - OSIdleCtrRun/OSIdleCtrMax) x 100%
OSIdleCtrRun:前0.1秒内空闲计数器的值
OSIdleCtrMax:单位时间(0.1秒)内空闲计数器可达到的最大值
本篇到此结束!
相关文章推荐
- 在sublimetxt3中中安装emmet插件
- android定期动态更新启动页
- 20160210-2
- copy(浅拷贝-指针拷贝)和mutableCopy(深拷贝-内容拷贝)
- 护肤品总结 Skin Care (2)
- 217. Contains Duplicate LeetCode
- 三者最大实例分析
- class 和id的区别和联系
- 浏览器的标准模式和怪异模式的区别
- C#如何打开DBF数据库文件
- windows中安装python
- windows中安装python
- 171. Excel Sheet Column Number LeetCode
- sar命令详解
- Xcode 【ActivatePowerMode & XActivatePowerMode】
- DevExpress 从一个XtraGridControl 拖拽行到另外一个
- 图片缓存
- 242. Valid Anagram LeetCode
- ng-class中的if else判断
- 使用WinRar软件制作程序安装包