ucOSII实时操作系统共41页.docx
- 文档编号:437225
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:25
- 大小:21.58KB
ucOSII实时操作系统共41页.docx
《ucOSII实时操作系统共41页.docx》由会员分享,可在线阅读,更多相关《ucOSII实时操作系统共41页.docx(25页珍藏版)》请在冰豆网上搜索。
ucOSII实时操作系统共41页
面向二十一世纪的嵌入式系统设计技术
第五讲:
ucOS/II实时操作系统
RTOS
(一):
ucOS/II
2002年1月
任课教员:
徐欣
主讲教员:
习勇
国防科大电子科学与工程学院
嵌入式系统开放研究小组
博士
博士
1
嵌入式操作系统
—uC/OS
WhatisuC/OS?
u:
MicroC:
control
uC/OS:
适合于小的、控制器的操作系统
小巧
公开源代码,详细的注解
可剥夺实时内核
可移植性强
多任务
确定性
2002/11
2
嵌入式操作系统
—uC/OS
美国人
TheStoryofuC/OS
JeanLabrosse1992年编写的
商业软件的昂贵
应用面覆盖了诸多领域,如照相机、医疗器
械、音响设备、发动机控制、高速公路电话
系统、自动提款机等
1998年uC/OS-II,目前的版本
uCOS-II
2002/11
uC/OS-IIV2.51
3
概要
嵌入式操作系统
—uC/OS
内核结构
任务间通信
-任务以及调度机制
uC/OS的移植
在PC机上运行
uC/OS
2002/11
4
任务
task
嵌入式操作系统
—uC/OS
典型的一个无限循环。
voidmytask(void*pdata)
for(;;){
dosomething;
waiting;
dosomething;
支持
64个任务,每个任务一个特定的优先级。
优先级
越高,数字越小
系统占用了两个任务,空闲任务和统计任务。
2002/11
5
嵌入式操作系统
—uC/OS
任务的数据结构
—任务控制块
任务控制块
OS_tcb,包括
任务堆栈指针,状态,优先级,任务表
位置,任务链表指针等。
所有的任务控制块分为两条链表,空闲
链表和使用链表。
新任务TCB
(1)TCB0TCB1
nextpre
(2)
(3)
OSTCBFreeList
图4.3TCB的双向链表结构
TCBn
空
2002/11
6
任务控制块结构
嵌入式操作系统
—uC/OS
Structos_tcb{
OS_STK*OSTCBStkPtr;
structos_tcb*OSTCBNext;
structos_tcb*OSTCBprev;
OS_EVENT*OSTCBEventPtr;
void*OSTCBMsg;
INT16UOSTCBDly;
INT8UOSTCBStat;
INT8UOSTCBPrio;
INT8UOSTCBX,OSTCBY,OSTCBBitX,OSTCBBitY;
}OS_TCB
2002/11
7
嵌入式操作系统
—uC/OS
任务的状态
OSTCBStat
运行,就绪,等待,挂起
OSTCBStat
低四位
挂起队列邮箱信号量
可以有多个准备就绪的任务,但一个时
刻只有一个任务可以运行,
OSHighRdy
2002/11
8
嵌入式操作系统
—uC/OS
任务的调度
--OSSched
uC/OS是占先式实时多任务内核,优先级
最高的任务一旦准备就绪,则拥有
所有权开始投入运行。
uC/OS中不支持时间片轮转法,每个任务
的优先级要求不一样且是唯一的,所以
任务调度的工作就是:
查找准备就绪的
最高优先级的任务并进行
上下文切换。
CPU的
2002/11
9
嵌入式操作系统
根据优先级找到任务在就绪任务表中的位置
OSRdyGrp
76543210
—uC/OS
OSRdyTbl[7]
X
优先级最高任务
任务优先级
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
76543
1514131211
2322212019
3130292827
3938373635
4746454443
5554535251
6362616059
优先级最低任务
(空闲任务)
2
10
18
26
34
42
50
58
10
98
1716
2524
3332
4140
4948
5756
Y
00
2002/11
YYYXXX
任务优先级号
10
嵌入式操作系统
根据优先级确定就绪表
—uC/OS
假设优先级为
12的任务进入就绪状态,
12=1100b,
则OSRdyTbl[1]的第
置1,相应的数学表达式为
4位置
1,且
OSRdyGrp的第
1位
OSRdyGrp|=0x02;
OSRdyTbl[1]|=0x10;
而优先级为21的任务就绪
OSRdyTbl[2]的第5位置1,且
1,相应的数学表达式为:
OSRdyGrp|=0x04;
OSRdyTbl[2]|=0x20;
21=10101b,则
OSRdyGrp的第2位置
2002/11
11
嵌入式操作系统
根据优先级确定就绪表
从上面的计算我们可以得到
—uC/OS
:
若第
n位置
1,则
应该与2n相或。
uC/OS中,把
2n的n=0-7的
8个值先计算好存在数组
就是:
OSMapTbl[0]=20=0x1;
OSMapTbl[1]=21=0x2;
OSMapTbl[7]中,也
OSMapTbl[7]=27=0x80;
2002/11
12
利用
嵌入式操作系统
根据优先级确定就绪表
OSMapTbl,通过任务的识别号
—uC/OS
-优先级
prio
来设置任务在就绪组和就绪表数组中相应位置的
数学式为:
OSRdyGrp|=OSMapTbl[prio>>3];
OSRdyTbl[prio>>3]|=OSMapTbl[prio&0x07];
假设优先级为
12,1100b
OSRdyGrp|=0x02;
OSRdyTbl[1]|=0x10;
2002/11
13
嵌入式操作系统
根据就绪表确定最高优先级
两个关键:
—uC/OS
优先级数分解为高三位和低三位分别确定;
高优先级有着小的优先级号;
2002/11
14
嵌入式操作系统
根据就绪表确定最高优先级
—uC/OS
通过
OSRdyGrp值确定高
3位,假设为
0x24=100100b,---〉
OSRdyTbl[5],高优先级为
OSRdyTbl[2]和
2
通过
假设为
OSRdyTbl[2]的值来确定低
0x12=010010b,---〉第
3位,
2个和
第5个任务,取高优先级第
----〉17
2002/11
2个
15
嵌入式操作系统
源代码中使用了查表法
查表法具有确定的时间,增加了系统的可预测性,
uC/OS中所有的系统调用时间都是确定的
—uC/OS
High3=OSUnMapTbl[OSRdyGrp];
Low3=OSUnMapTbl[OSRdyTbl[High3]];
Prio=(Hign3<<3)+Low3;
?
为什么频繁的使用查表法
?
请问
2002/11
OSUnMapTbl的来历;
16
嵌入式操作系统
INT8UconstOSUnMapTbl[]={
—uC/OS
2002/11
0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0
17
任务间通信手段
嵌入式操作系统
—uC/OS
提供
OS_ENTER_CRITICAL和OS_EXIT_CRITICAL来对
临界资源进行保护
OSSchedLock()禁止调度保护任务级的共享资源。
提供了经典操作系统任务间通信方法:
信号量、邮箱、
消息队列,事件标志。
2002/11
18
事件控制块
嵌入式操作系统
ECB
—uC/OS
所有的通信信号都被看成是事件
ControlBlock)的数据结构来表征每一个具体事件,
程序4.5ECB的结构如下
(event),一个称为事件控制块
ECB的结构如下:
(ECB,Event
typedefstruct{
void*OSEventPtr;/*指向消息或消息队列的指针
INT8UOSEventTbl[OS_EVENT_TBL_SIZE];/*
等待任务列表
INT16UOSEventCnt;/*计数器(当事件是信号量时)
INT8UOSEventType;/*
INT8UOSEventGrp;/*
}OS_EVENT;
与TCB类似的结构,使用两个链表,空闲链表与使用链表
2002/11
事件类型:
信号量、邮箱等
等待任务组*/
19
嵌入式操作系统
—uC/OS
信号量
semaphore
uC/OS中信号量由两部分组成:
信号量的计数
值和等待该信号任务的等待任务表。
信号量的
计数值可以为二进制,也可以是其他整数。
系统通过
OSSemPend()和OSSemPost()来支持
信号量的两种原子操作
信号量的值,如果新的信号量的值不大于
P()和V()。
P()操作减少
0,则
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ucOSII 实时 操作系统 41
![提示](https://static.bdocx.com/images/bang_tan.gif)