操作系统
前言
目前跟着原子哥补课
一些基础知识,之前学习过了,这里就不放上来了。
零、裸机和RTOS
经典例子
0.0、裸机
裸机:裸机又称为前后台系统,前台系统指的中断服务函数,后台系统指的大循环,即应用程序。
简单直观的代码展示。
while(1)
{
打游戏();
回复信息();
}
是轮询的。
0.1、操作系统
void 信息(void)
{
while(1)
{
信息();
}
}
void 游戏(void)
{
while(1)
{
打游戏();
}
}
void mian(void)
{
//创建打游戏任务
xTaskCreat(打游戏)
//创建回复信息任务
xTaskCreate(回复信息)
}
相当于,(任务优先级相同)打游戏执行1ms,回复信息执行1ms,在宏观表现上,二者就是同时执行的。
0.3、中断
中断是一瞬间的事情,不能放太多的步骤。因此大多数时候我们使用标志位的方式
0.4、任务调度器
使用相关的调度算法来决定当前需要执行的哪个任务。
FreeRTOS支撑的三个
1、抢占式调度
主要是针对优先级不同的任务
,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。
2、时间片调度
主要针对优先级相同的任务,当多个任务的优先级相同时, 任务调度器会在每一次系统时钟节拍
到的时候切换任务。
3、协程式调度
当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务
FreeRTOS现在虽然还支持,但是官方已经表示不再更新协程式调度。
(实时性较差)
一、Free RTOSConfig.h配置文件
1.1 INCLUDE_开始的宏
二、基础知识
2.1 任务状态
四种状态:
1、运行态:当前任务正在运行。
2、就绪态:告诉任务调度器,程序可以运行了,考虑优先级高就可以运行了。
3、阻塞态:等待事件发生,不能浪费等待的时间,于是进入阻塞态。
4、挂起态:暂停运行。
四个任务可以相互转换的。
在STM32中,同一时间仅一个任务处于运行态。
总结
1、仅就绪态可转变成运行态。
2、其他状态的任务想运行,必须先转变成就绪态。
3、这四种状态中,除了运行态,其他三种任务状态的任务都有其对应的任务状态列表。
2.2 任务优先级
这个需要区分裸机开发中的中断优先级,中断优先级是数字越小优先级越大!!!
configMAX_PRIORITIES我这里初始化是5,意味着不做修改的话,我这里运行的优先级范围是0~4。
2.3 任务实现
具体工作内容
2.4 任务控制块
就是保存参数的结构体 ,
2.5 任务堆栈
总结
这篇文章依旧没有总结