1.UCOS简介
实时操作系统: 保证在一定时间限制内完成特定功能的操作系统。分为软实时操作系统(时间限制较为宽松,在一定的时间范围内完成)和硬实时操作系统(在规定的时间内必须完成操作)。
分时操作系统:linux windows
2.UCOS任务的概念
前后台系统:stm32的裸机程序
前台行为(中断机):中断异步时间; 后台行为(任务机):while(1)死循环
结构简单,程序体积小,占用内存小;多任务级任务的响应时间不确定
多任务系统:在一个系统中 ,有多个类似main函数功能的函数,操作系统对多任务的支持,提出了多任务的调度概念,内核实现了多任务的调度。
任务的响应时间确定 ,比较及时。程序结构性较好,能够处理复杂系统;
会消耗较多的内存和占用一定的CPU(使用了操作系统)。
分时操作系统的时间片轮转和实时操作系统的时间片轮转有以下几点区别:
-
调度优先级:在分时操作系统中,所有进程的调度优先级相同,每个进程分配到的时间片大小相同;而在实时操作系统中,每个进程具有不同的调度优先级,高优先级的进程会优先执行,低优先级的进程会被暂停。
-
响应时间:分时操作系统的时间片通常较长,可以达到数十毫秒或更长,因此进程的响应时间相对较慢;而实时操作系统的时间片通常很短,可以达到微秒级别,进程的响应时间更短,能够满足实时响应的需求。
-
任务类型:分时操作系统适用于多用户、多任务的桌面计算机环境,而实时操作系统通常用于需要实时响应的应用领域,如航空、医疗、工厂自动化等。
-
调度算法:分时操作系统采用的是时间片轮转调度算法,即每个进程被分配一个固定大小的时间片,当时间片用完后,进程会被挂起,等待下一次轮转;而实时操作系统采用的调度算法通常是基于优先级的调度算法,例如最高优先级先调度算法、最短剩余时间优先算法等。
综上所述,分时操作系统的时间片轮转和实时操作系统的时间片轮转在调度优先级、响应时间、任务类型和调度算法等方面存在较大的差异,需要根据具体应用场景选择适合的操作系统。
3.UCOS专业术语
-
内核的概念 :在多任务系统中,内核负责管理各个任务,或者说内核为各个任务分配运行时间,内核的另外一个作用是负责任务进程间通信。
-
内核的调度方法:
1.时间片轮转调度法 (主动放弃CPU 被动放弃CPU)【分时操作系统】
2.优先级调度法: 总是保证优先级最高的任务先执行(必须主动放弃CPU,比如进入延时状态、等待某个信号量、消息)【实时操作系统】 优先级调度算法分为可剥夺性内核(可以在任务2执行到中间的时候打断任务)和不可剥夺性内核(高优先级的任务必须等低优先级的执行完才能使用CPU)
可剥夺性内核对优先级较高的任务实时性很好。 -
可重入函数与不可重入函数 :
//不可重入函数,产生原因:全局变量的存在会导致在不同的
int temp;
void swap(int *x,int *y)
{
temp=*x;
*x=*y;
*y=temp;
}
//如果使用的是不可剥夺性内核,可以使用不可重入函数
//可重入函数:使用局部变量可以实现可重入函数
void strcpy(char *dest,char *src,int len)
{
while(len--)
{
*dest++ = *src++;
}
}
-
UCOS是可剥夺性内核(抢占式),每一个任务都必须有一个优先级,优先级范围0-OS-LOWEST-PORT,数字越小,优先级越高。
-
优先级分为动态优先级和静态优先级 UCOS支持动态优先级
-
优先级反转
定义:高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。
解决办法:提升任务优先级、 优先级继承(UCOS不支持)
优先级继承(priority inheritance)是指当高优先级进程(P1)请求一个已经被被低优先级(P3)占有的临界资源时,将低优先级进程(P3)的优先级临时提升到与高优先级进程一样的级别,使得低优先级进程能更快地运行,从而更快地释放临界资源。低优先级进程离开临界区后,其优先级恢复至原本的值。 -
代码的临界段:指处理的时候不可以分割的代码段,一旦这段代码开始执行,不允许中断的打入。为了确保不会被打入,在代码的临界段之前关闭中断,之后开启中断。
-
资源和共享资源
资源:广义的资源 任何为任务服务的实体
共享资源:被一个以上的任务使用的资源,对共享资源的访问必须满足互斥;
满足互斥的方式:1.使用测试并置位指令
2.任务禁止切换,使用,允许任务切换
3.使用信号量:获取信号量 释放信号量 -
死锁:也称为抱死,指两个任务无限期的互相等待对方控制的资源
4.任务间的同步与通信
同步:两个任务之间要满足某种关系,但没有数据的交互
通信: 两个任务之间有数据的交互
同步:
1.信号量(任务2等待任务1某个事件)
2.互斥性信号量 (任务2和任务1都使用共享资源)(需要先等待互斥性信号量)
3.事件标志组
通信:
1.消息邮箱
2.消息队列
5.UCOS中断、时钟节拍和初始化
- UCOS中断:中断请求–》现场保护–》ISR–》–》中断恢复
- UCOS进入中断函数:OS_IntEnter();
退出中断函数:OS_IntExit(); - 时钟节拍:硬件定时器,每一个时钟节拍都会检查一下每个任务的状态,时间越短,cpu无用功越多,实时性越好;一般设置为10-100Hz;
- UCOS的初始化过程:
1.初始化OS_Init();
2.创建任务
3.执行操作系统OS_start();
6.UCOS代码规约
*编程规约
经常使用的数据结构
队列:FIFO FILO
堆栈:一端插入一端输出