裸机和Rtos区别:
裸机特点:
- 实时性差
- delay中属于空等待,CPU不执行其它代码
- 结构臃肿,实现的功能函数都会放到while循环里
Rtos特点:
1.实现功能划分多个任务
2.在延时函数中,CPU会执行别的代码
3.高优先级任务会抢占低优先级任务
4.每个任务都有自己的栈空间,
5.中断可以打断任意任务,任务可以同等优先级
任务调度:
- 抢占式调度:主要是针对优先级不同的任务,优先级高的可以抢占优先级低的,在rtos中,数字越大,优先级越高
- 时间片调度:主要针对优先级相同的,每一次系统时间片到达时切换下一个任务
- 协程式调度:主要是轮询,目前官方已经停止开发
任务状态
- 运行态:正在执行的任务,同一时间只有一个任务执行
- 就绪态:任务能够执行,但还未被执行
- 阻塞态:即一个任务因为延时或者外部事件发生,这个任务就处于该状态
- 挂起态:暂停。调用**vTaskSuspend()**进入挂起态,**vTaskResume()**进入就绪态
只有就绪态可以转变成运行态,其它状态需要转变成就绪态
除了运行态都有对应的任务状态列表:
1.就绪列表:pxReadyTaskList[x],x表示任务优先级
2.阻塞列表:pxDelayedTaskList
3.挂起列表:xSuspendedTaskList
调度器总是在所有处于就绪列表的任务中,选择具有最高优先级的任务来执行