FreeRTOS
裸机
不带任何操作系统

只能先打完游戏回复信息
- 实时性差,程序轮流执行
 - delay空等待,CPU不执行其他代码
 - 结构臃肿,实现功能都在while循环
 
RTOS
实时操作系统


会执行打游戏一个时间片再回复信息一个时间片交替执行
在宏观下人类不能发现切换
- 分而治之,实现功能划分为多个任务
 - 延时函数,任务调度
 - 抢占式,高优先级任务抢占低优先级任务
 - 任务堆栈,每个任务都有自己的栈空间
 
- 中断可以打断任意任务
 - 任务的优先级是软件实现,中断优先级是内核实现
 - 任务之间可以同等优先级
 
FreeRTOS
FreeRTOS是一个免费的嵌入式实时操作系统
- 免费开源
 - 可裁剪
 - 简单易用,可移植性非常好
 - 优先级不限,多任务可同一优先级
 - 可创建的实时任务数量没有软件限制
 - 支持抢占,协程、时间片流转任务调度
 
核心文件


调度方式
抢占式调度
每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务
- 数值越大优先级越高
 


- 高优先级的任务优先执行
 - 高优先级的任务不停止,低优先级的任务就无法执行
 - 被抢占的任务将会进入就绪态
 
时间片调度
主要针对优先级相同的任务,当多个任务的优先级相同时,任务调度器会在每一次系统时钟节拍到的时候切换任务
同等优先级任务轮流享有相同的CPU时间,叫做时间片,再freertos中,一个时间片就是SysTick中断周期

- 同等优先级任务,轮流执行,时间片流转
 - 一个时间片大小,取决为滴答定时器中断周期
 - 没有用完的时间片不会再使用,下次任务还是按照一个时间片的时钟节拍运行
 
协程式调度
当前正在执行任务会一直运行,不能被抢占,适合RAM比较小的MCU
任务的状态

- 仅有就绪态可以转变成运行态
 - 优先级高的就绪态的任务先运行
 - 其他的状态的任务想运行必须先变成就绪态
 
状态列表
除了运行态,都有任务列表,类似于链表
运行态,都有任务列表,类似于链表
-  
就绪列表 pxReadyTasksLists[x],其中x代表任务优先级数值
 -  
阻塞列表 pxDelayTasksLists[x]
 -  
挂起列表 xSuspendedTasksLists[x]
 



















