uC/OS-II实时系统

uC/OS-II实时系统

基本概念:
实时内核
在多任务系统中,负责管理各任务
基本服务是任务切换
简化应用系统的设计,解决多任务可能带来的问题。


特点:
可剥夺型实时多任务内核
基于优先级任务调度
可移植,可固化,可裁剪
高稳定和可靠性

内核结构:
 

任务调度算法
优先级调度:绝大多数的商用RTOS以及uC/OS-II
分时调度:UNIX,LINUX

任务管理
多任务系统中内核所提供的基本服务。即为每个任务分配CPU时间,提高CPU的有效利用率

任务管理内容

uC/OS-II优先级管理
可管理多达64个任务,其中优先级最高的4个任务和最低的4个任务保留给内核使用
优先级数值越低,优先级越高
空闲任务:优先级63;统计任务:优先级62
动态调节任务优先级
任务的优先级号还是任务的标志符

任务建立
任务进入就绪态
任务不能由ISR建立


任务堆栈
由连续的内存空间组成
静态分配(编译时)或动态分配(运行时)


任务删除
任务返回休眠态
任务必须自我删除

任务状态及转换

uC/OS-II对任务的管理和调度主要是通过任务控制块和任务就绪表来实现的。

任务控制块(OS_TCB):
任务控制块是一个数据结构,与任务是一一对应
任务建立时分配给任务
当任务的CPU使用权被剥夺时,任务控制块用来保存该任务的状态
当任务重新得到CPU的使用权时,任务控制块能确保任务从断点处继续执行下去
全部驻留在RAM中

任务控制块列表数组OSTCBTbl[]所有的任务控制块都放在任务控制列表数组中

任务就绪表

优先级就绪算法

进入就绪态的优先级最高的任务:Prio=y<<3+x,例:
OSRdyGrp=01101000
OSRdyTbl[3]=11100100
Prio= 3<<3+2=26
 

多任务转换的实质:模拟中断的产生过程
多任务转换的途径:通过软中断或者时钟中断,修改PC为新任务的入口地址

时间管理
uC/OS-II需要提供周期型的信号源。用于实现时间延时和确认超时,范围为10~100HZ.
时钟节拍源来自硬件定时器,也可以是交流电源信号
时钟节拍的频率越高,系统的负荷越重

内存管理:


分区管理
每个分区内部内存块大小相同
不同分区的内存块大小不同
内存块释放时返回原属的内存分区
避免动态分配造成的内存碎片问题。

任务通信:不同任务之间或任务与中断服务之间的信息传递。
传递途径:共享数据(全局变量,指针等)、发送消息

互斥实现机制(Mutual Exclusion)
使用共享数据简化任务间的信息交换,但必须保证每个任务处理共享数据的排它性,避免竞争和数据破坏。

满足互斥条件的方法
关中断
测试并置位指令(TAS)
禁止做任务切换
利用信号量

信号量(Semaphore)
信号量像一把钥匙,任务要运行下去,需先拿到这把钥匙。其实质是一种约定机制。
用于
控制共享资源的使用权(满足互斥条件)
标志某事件的发生
使2个任务的行为同步
信号量非零表示有效,任务对资源可用

信号量类型:二进制信号量,只取0或1,最快最通用的信号量,适用于同步和互斥。

计数式信号量
类似于二进制信号量,但其跟踪信号量被释放的次数,适用于单个资源多个实例需要保护的情况。

uC/OS-II任务通信方式
全局变量
事件控制块ECB:信号量、消息邮箱及队列

事件控制块ECB
uC/OS-II中用于实现信号量管理,消息邮箱管理等功能的基本数据结构。
包括每个信号量,消息邮箱以及消息队列都可分配到一个事件控制块ECB。

uC/OS-II任务间通信
1.单任务等待

2.多任务等待同一信号(事件)

3. 当ECB为信号量时,任务可以等待或发送消息
 

任务同步
同步是指多任务在执行次序上的协调,不会出现与时间有关的差错。
例:任务A和B通过单缓冲区实现同步

1. 任务A发送数据给任务B,任务B运行
2. 任务B读取缓冲区数据,使A继续运行
3. 任务A和任务B实现同步

任务同步实现方式
信号量:某任务与单任务或ISR同步

事件标志(event flag):某任务与多个事件同步

信号量应用在任务通信和任务同步上的区别
对于任务通信,信号量对共享资源的访问进行互锁,初始时信号量可用(Full)。任务先提取信号量,再释放。
对于任务同步,信号量用作任务等待的一个状态或事件,初始时信号量不可用(Empty)。任务等待提取其他任务释放的信号量

uC/OS-II任务同步
事件标志组
用多个事件的组合发信号给多个任务,实现任务同步

uC/OS-II初始化
初始化所有变量和数据结构
建立空闲任务以及统计任务


uC/OS-II启动
至少建立一个应用任务
启动多任务,运行优先级最高的就绪态任务

典型应用任务
Void task1 (void *pdata)
{
for( ; ; ){
用户代码
调用功能函数
}
}

Void task1 (void *pdata)
{
用户代码
调用功能函数
OSTaskDel(OS_PRIO_SELF);
}

移植条件
处理器的C编译器能产生可重入型代码
处理器支持中断,并且能够产生定时中断(通常为10~100Hz)
用C语言就可以开/关中断
处理器支持一定数量的数据存储硬件堆栈
处理器有将堆栈指针以及其他CPU寄存器的内容读出、并存储到堆栈或内存中去的指令。

uC/OS-II的移植过程
定义内核的大小和功能
为内核编写与硬件相关的代码
根据项目需要,编写用户任务

uC/OS-II体系结构
 

uC/OS-II实时系统的优点
源代码开放,几乎免费
执行效率高,实时性能优良
占用空间少 ,为嵌入式移植提供可能

uC/OS-II实时系统的缺陷
不支持时间片轮转调度,要求任务的优先级各不相同
定义:两个或两个以上相同优先级的任务,内核先运行一个任务一定时间额度,然后切换给另外一个任务。

不支持优先级继承,出现优先级反转问题
 

推荐参考教材《嵌入式实时操作系统UC/OS-II》

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值