实时操作系统:
实时操作系统是保证在一定时间限制内完成特定功能的操作系统
实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。
它和分时操作系统最大的区别就是实效性。比如我们在打字,打字的时候这个字会立马被显示出来,如果我打字,这个字过了一分钟这个字才显示出来,那很显然这个操作系统就不具备实时性了。
ucos既不属于硬实时也不属于软实时操作系统,实际上,大多我们基于商业的操作系统大多是处于硬实时和软实时操作系统操作系统之间的。我们常用的windows,iOS和linux操作系统,都是一个分时操作系统,所以他对我们的实效性要求并不是那么的高,但是嵌入式开发的时候大多数会选择实时操作系统
2.ucos的任务概念
fig1的例子:
-
int main(void)
-
{
-
LED_Init(); //初始化LED灯
-
KEY_Init(); //初始化按键
-
UART_Init(); //初始化串口
-
BUZZER_Init();
-
while(1) //进入1这个死循环,并且不再跳出
-
{
-
if(uart_rece_ok) //判断串口是否接收到一些数据
-
{
-
//do somethings.
-
}
-
if(KEY1 ==0 ) //判断按键是否按下
-
{
-
//do somethings
-
}
-
...........
-
}
-
}
前后台系统:前台行为就是中断异步处理的事情就叫做前台(前台有时候也叫中断体,它处理的是一个中断体的任务,eg串口的接收中断)。什么叫做后台呢?我们的这个死循环, while(1)这个就叫做后台,后台有时候也叫任务机行为。
3.多任务系统
-
nt main(void)
-
{
-
LED_Init();
-
while(1)
-
{
-
//do somethings,里面只做和 LED相关的
-
}
-
}
-
int main(void)
-
{
-
key_Init();
-
while(1)
-
{
-
if(key1 == 0)
-
{
-
//do somethings,只做和 键盘相关的
-
}
-
}
-
}
-
int main(void)
-
{
-
UART_Init();
-
while(1)
-
{
-
if(UART_Rece_OK)
-
{
-
//do somethings,只做和 串口相关的
-
}
-
}
-
}
有多个类似main函数这样功能的函数,那这个时候这个系统就会被称为多任务系统。多任务系统执行的方法其实是非常简单的。就是给每个任务分配一定的时间,时间到了以后,或者你自动让出CPU以后,我就去执行下一个任务,这个就是多任务操作系统的调度方法。
我们的操作系统就在不同的时间段来执行了不同的函数功能。当这个时间比较小的时候,我们会感觉操作系统是在同一个时刻,执行了所有的任务,这就是多任务系统执行的方法,也是ucos对多任务的调度方法!
这个多任务调度的代码我们称为内核,内核就是操作系统的核心,它实现了多任务调度的核心。
9.代码的临界段
指处理时不可分割的代码。一旦这段代码开始执行,不允许中断的打入。
在进入临界段代码之前,需要关中断,执行完临界段代码,开中断。