主要应用在非通用非移动领域的操作系统。
1 实时系统介绍
实时系统是控制与移动应用的实时。
实时系统一般用于先进制造业及控制系统。实时OS主要目标和功能都是通过内核来实现。
实时系统的目标是对外部请求在严格时间范围内作出反应还有高可靠性、安全性、完整性。
实时系统内核的功能包括:任务管理、任务间同步与通讯、存储器优化管理 (ROM)、中断管理、实时时钟。
2 嵌入式操作系统的管理对象
嵌入式操作系统的管理对象是根据接口管理来实现。但是主要管理对象是内存和CPU。嵌入式操作系统的管理对象分为硬件的管理和软件的管理。
3 实时系统的调度
这是操作系统的主要职责之一,它决定该轮到哪个任务运行了。
在嵌入式中调度一般是基于优先级的,根据其重要不同被赋予任务不同的优先级。 CPU 总是让处在就绪态的优先级最高的任务先运行。
何时让高优先级任务掌握CPU的使用权,有两种不同的情况,一种是非抢占式的,另外一种是抢占式内核。
当系统响应时间很重要时,要使用抢占式 (preemptive)内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。
4 实时操作系统μC/OS简介
1992年美国人Jean Labrosse开发了μC/OS。它用于照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等诸多应用领域。
5 μC/OS的性能特点
开源代码,可移植性(Portable):全部用ANSI C实现,可固化(ROMable),可裁剪(Scalable),抢占式(Preemptive)实时结构。μC/OS不需要MMU的支持。VxWorks代码是不公开而且是航天军事用的操作系统。
6 μC/OS提供的系统服务
信号量,带互斥机制的信号量(减少优先级倒置的问题),事件标志,消息信箱,消息队列,内存管理,时钟管理,任务管理。
7 μC/OS-II的内核结构
任务管理,中断处理,时间管理,任务之间通信与同步。
8 μC/OS-II的任务(task)
μC/OS-II中任何工作都是用任务来构成的,典型的任务一个无限循环。每个任务对应一个特定的优先级。优先级越高,任务编号数字越小。
void YourTask (void *pdata)
{
for (;;) {
/* 用户代码 */
调用uC/OS-II的某种系统服务:
OSMboxPend();
OSQPend();
OSSemPend();
OSTaskDel(OS_PRIO_SELF);
OSTaskSuspend(OS_PRIO_SELF);
OSTimeDly();
OSTimeDlyHMSM();
/* 用户代码 */
}
}
任务完成后自我删除
void YourTask (void *pdata)
{
/* 用户代码 */
OSTaskDel(OS_PRIO_SELF);
}
任务控制块主要结构:OS--_TCBs全部驻留在RAM中。
所有的任务控制块分为两条链表,空闲链表和使用链表。
Struct os_tcb {
OS_STK *OSTCBStkPtr;
struct os_tcb *OSTCBNext;
struct os_tcb *OSTCBprev;
OS_EVENT *OSTCBEventPtr;/*事件控制块的指针*/
void *OSTCBMsg;/*任务状态字*/
INT8U OSTCBPrio;
INT8U OSTCBX, OSTCBY, OSTCBBitX, OSTCBBitY;/*任务延时参数*/
} OS_TCB
9 任务级的任务调度--OSSched
μC/OS是占先式实时多任务内核,优先级最高的任务一旦准备就绪,则拥有CPU的所有权开始投入运行。
μC/OS中不支持时间片轮转法。查找准备就绪的最高优先级的 任务并进行上下文切换。
μC/OS任务调度所花的时间为常数,与应用程序中建立的任务数无关。
10 任务调度--根据就绪表确定最高优先级
优先级数分解为高三位和低三位分别确定;
高优先级有着小的优先级号;
μC/OS-II源代码中使用了查表法,查表法具有确定的时间,增加了系统的可预测性,μC/OS中所有的系统调用时间都是确定的。
11 任务切换
将被挂起的任务寄存器入栈;将较高优先级任务的寄存器出栈。
任务切换OS_TASK_SW()的代码:中断是激活任务而不是处理任务。
Void OSCtxSw(void)
{
将R1,R2,R3及R4推入当前堆栈;
OSTCBCur OSTCBStkPtr = SP;
OSTCBCur= OSTCBHighRdy;
SP= OSTCBHighRdy OSTCBSTKPtr;
将R4,R3,R2及R1从新堆栈中弹出;
执行中断返回指令;
}
12 中断与时钟节拍
μC/OS中提供了OSIntEnter() 和OSIntExit() 告诉内核进入了中断状态。而时钟节拍是一种特殊的中断,是操作系统的心脏。
13 操作系统的启动和运行过程
嵌入式控制器硬件初始化
操作系统初始化
LCD初始化
装载字库
调用系统配置文件
创建任务
初始化用户界面、时钟
启动多任务调度
14 ARM7的特征和μC/OS-II在ARM7上的移植
ARM7处理器中有专门的指令处理堆栈, 可以灵活的使用堆栈。
使用OS_ENTER_CRITICAL() 和OS_EXIT_CRITICAL() 宏开启/关闭中断。
堆栈由高地址向低地址增长。
OS_CPU.H:中定义了与编译器相关的数据类型。如:INT8U、INT8S等。
μC/OS-II的主要代码都是由标准的C语言写成的,移植方便。
满足以下的条件可以方便移植:
处理器的C编译器能产生可重入代码
在程序中可以打开或者关闭中断
处理器支持中断,并且能产生定时中断
处理器支承能够容纳一定量数据的硬件堆栈
处理器有将堆栈指针和其他CPU寄存器存储和读出到堆栈(或者内存)的指令