目录
一、裸机与FreeRTOS介绍
他们二者的区别是什么呢?
现在有这么一个事件,我正在打王者荣耀,突然女朋友给我发消息,这是两个事件
对于裸机系统它是这么处理的:
while(1)
{
打游戏();
回复消息();
}
也就是打完游戏才回复女朋的消息,这样的话,女朋友该着急了。也就是打游戏,就不理女朋友,回复女朋友信息就得游戏挂机,处于这样的一个矛盾体中。
对于FreeRTOS系统它是这么处理的:
void main(main)
{
/*创建打游戏任务*/
xTaskCrete(打游戏)
/*创建回复消息任务*/
xTaskCreate(回复消息)
}
void 游戏(void)
{
while(1)
{
打游戏();
}
}
void 消息void()
{
while(1)
{
回复消息();
}
}
也就是它会创建两个任务,分别是游戏任务和消息任务,在游戏任务里边专门是回复消息,在消息任务中专门是回复消息。
他是如何运行呢?
它会执行打游戏1个时间片,1个时间片的大小是我们可以设置的,也就是滴答定时器的时钟节拍,我们在代码中设置1ms中断一次,1个时间片也就是1ms,也就是打游戏1ms,马上切换到回复信息,回复信息也执行1ms,紧接着又切换回打游戏1ms,这样来回切换,切换的速度特别快,从宏观上,就像分身,同时进行一样,他们的任务优先级是相同的,这样才能打一会游戏,回复一下信息,这样来回切换的。虽然同一时刻也是只能干一件事情,但是时间太短的,从人的宏观来上是相同的。
同样的场景,假设小明肚子疼了,要去医院,此时裸机和RTOS又会怎么做呢?
/*对于裸机系统而言*/
while(1)
{
打游戏();
回复消息();
if(FLAG==1)
{
去医院();
FLAG=0;
}
}
也就是我打完游戏,回复完消息,才可以去医院,这样裸机的弊端就会暴露出来了。
/*FreeRTOS系统*/
void main(main)
{
/*创建打游戏任务*/
xTaskCrete(打游戏)
/*创建回复消息任务*/
xTaskCreate(回复消息)
/*创建去医院任务*/
xTaskCrete(去医院)//任务优先级
}
void 游戏(void)
{
while(1)
{
打游戏();
}
}
void 消息void()
{
while(1)
{
回复消息();
}
}
void 去医院(void)
{
while(1)
{
去医院();
}
}
先高优先的任务执行以后,会把CPU的执行权让出来,也就是又可以回复消息,又可以打游戏了,充分利用CPU的资源。
裸机与RTOS特点
裸机:裸机又称为前后台系统,前台系统指的是中断服务函数,后台系统指的是大循环,即应用程序。
1.实时性差(应用程序)轮流执行
2.delay 空等待,cpu不执行代码
3.结构臃肿(实现功能都放在无限循环中)
FreeRTOS特点:就是免费实时操作系统,强调的实时性
1、分而治之、实现功能划分为多个任务。
2、延时函数 任务调度,充分利用了CPU的资源。
3、抢占式,高优先级任务抢占低优先级任务。
4、任务堆栈,每个任务都有自己的占空间。
注意1:中断可以打断任意任务
注意2:任务可以同等优先级
二、FreeRTOS简介
首先看一下 FreeRTOS 的名字,可以分为两部分:“Free”和“RTOS”,“Free”就是免费的、 自由的、不受约束的意思,“RTOS”全称是 Real Time Operating System,中文名就是实时操作 系统,要注意的是,RTOS 并不是值某一特定的操作系统,而是指一类操作系统,例如,µC/OS, FreeRTOS,RTX,RT-Thread 等这些都是 RTOS 类的操作系统。因此,从 FreeRTOS 的名字中就 能看出,FreeROTS 是一款免费的实时操作系统。可以说RTOS是工作中必不可少的技能。
FreeRTOS是一个免费的嵌入式实时操作系统,他的特点如下:
免费开源:商业产品中使用,无潜在商业风险,无需担心
可裁剪:FreeRTOS的核心代码9000+行,包含3个.c文件中
简单:简单易用,可移植性非常好
优先级不限:任务优先级分配没有限制,多任务可同一优先级,如果是软件上,他的优先级分配没有限制,如果是硬件,会受限,加假如2单片有32位,他的优先级只可设置32,数字越大,优先级越高,和32单片机相反的。
抢占/协程/时间片:支持抢占式,协程式、时间片流转任务调度
可以查看官网学习:https://www.freertos.org/,全英文,嘿