【深入实践ucos-ii】任务属性

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的控制权。优先级值越大代表优先级越低。
相关定义:

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(),

OS_EXT INT8S    ISCPUUsage;

计算公式
usage = (1 - OSIdleCtrRun/OSIdleCtrMax) x 100%
OSIdleCtrRun:前0.1秒内空闲计数器的值
OSIdleCtrMax:单位时间(0.1秒)内空闲计数器可达到的最大值


本篇到此结束!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值