您的位置:首页 > 其它

【深入实践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秒)内空闲计数器可达到的最大值

本篇到此结束!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: