【浙大 | 嵌入式系统】第七节
https://www.bilibili.com/video/BV18b411L7Zd
操作系统概述
实时操作系统 uC/OS简介
实时操作系统 uC/OS-Ⅱ的内核结构
实时操作系统 uC/OS-Ⅱ中的中断与任务通讯
实时操作系统 uC/OS-Ⅱ在ARM7上的移植
实时操作系统追求目标:对外部请求在严格时间范围内作出反应,高可靠性、安全性和完整性。
操作系统的内核:
操作系统内核是指操作系统的核心部分
设备中都出现的基本操作系统功能
实时内核负责中断、任务、通讯、硬件接口(存储器、I/O管理)等管理
扩展内核加入管理虚拟内存
内核本身也是由任务(进程)构成
文件管理、用户接口、外设和系统资源管理是建立在内核基础上进行的
内核管理各个任务
决定什么任务、什么时候可以获得CPU使用权
分配每个任务的CPU使用时间
任务的上下文切换
任务之间的通讯
代码临界区:
处理时不可分割的代码,一旦这部分代码开始执行,不允许任何中断打入。在进入临界区之前要关中断,临界区代码执行完毕后要立即开中断。
嵌入式中调度一般是基于优先级的,根据其重要不同被赋予任务不同的优先级。CPU 总是让处在就绪态的优先级最高的任务先运行。
何时让高优先级任务掌握 CPU 的使用权,有两种不同的情况,这要看用的是什么类型的内核:
非抢占式内核
抢占式内核
嵌入式操作系统
什么是嵌入式系统?
在各种设备、装置或系统中,完成特定功能的软硬件管理系统;
是设备、装置或系统中的一部分,这个设备、装置或系统可以不是“计算机”
通常工作在反应式或对处理时间有较严格要求环境中;
典型嵌入式操作系统的特性:
完成某一项或有限项功能;不是通用型;
在性能和实时性方面有严格的限制;
能源、成本和可靠性通常是影响设计的重要因素;
占有资源少、易于连接;
系统功能可针对需求进行裁剪、调整和生成以便满足最终产品的设计要求
实时操作系统 uC/OS简介
性能特点:
开源
可移植性,uC/OS-Ⅱ源码主要用 ANSI C 写,移植性强,支持 8 位/16位/32位以及64位微处理器、微控制器和 DSP
可固化,内核可以裁剪得很小
可裁剪,通过条件编译,可以根据应用需要只使用uC/OS-Ⅱ中的部分系统服务
抢占式实时结构
多任务 uC/OS-Ⅱ可以管理64个任务,其中保留8个给系统,应用程序最多可以有56个任务
可确定性:全部uC/OS-Ⅱ的函数调用与服务的执行时间是可确定的
任务栈:每个任务都有自己单独的栈,允许每个任务有不同的栈空间,以便减少应用程序对RAM的需求
中断管理:中断嵌套层数可达255层
实时操作系统 uC/OS-Ⅱ的内核结构
任务管理
中断处理
时间管理
任务之间通信与同步
uC/OS-Ⅱ中任何工作都是用任务来构成的,
// 典型的任务为一个无线循环void mytask(void *pdata){for(;;){do something;waiting;do something;}}
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
每个任务号与优先级相对应,数字越小优先级越高。
当任务完成以后,任务可以自行离开就绪队列,OSTaskDel();
中断任务:
运行的任务是可以被中断的,响应中断时,正在执行的任务被挂起,中断服务子程序控制了CPU的使用权,从中断服务子程序返回之前,uC/OS-Ⅱ要判定,被中断的任务是否还是就绪任务中优先级最高的。
中断服务程序太长会影响实时性。
空闲任务:
当所有的任务都在等待事件发生时uC/OS-Ⅱ执行OSTaskIdle() 函数。

uC/OS中不支持时间片轮转法,每个任务的优先级要求不一样而且是唯一的,所以任务调度的工作就是:查找准备就绪的最高优先级的任务并进行上下文切换;
uC/OS任务调度所花的时间为常数,与应用程序中建立的任务数无关,利用查表法。
查表法具有确定的时间,增加了系统的可预测性,uC/OS中所有的系统调用时间都是确定的。

任务级的任务切换 OS_TASK_SW()
通过sc系统调用指令完成
保护当前任务的现场
恢复新任务的现场
执行中断返回指令
开始执行新任务
中断类型:
硬件中断;
外部中断;
陷阱中断;
现场控制量的中断;
uC/OS-Ⅱ中的中断:
保护现场
进入临界区标志;
执行中断服务程序;
退出临界区标志;
恢复现场,不一定是之前保护的现场,根据优先级;
执行恢复后的代码;

响应中断在恢复现场阶段,会查询当前就绪的最高优先级任务,将最高优先级任务恢复。

时钟节拍中断定时检查各个任务。
任务间通讯:信号量、邮箱、消息队列、事件标志。
可为任务进行延时。