#FreeRtos 基础知识

什么是多任务系统

单任务系统:又叫前后台任务,前台:中断服务程序,后台:while(1)
#FreeRtos 基础知识_第1张图片
缺点:CPU 利用率低
FreeRTOS:抢占式实时多任务系统
#FreeRtos 基础知识_第2张图片
高优先级任务打断低优先级任务

FreeRTOS的任务与协程

协程放弃只搞任务(官方不更新)

任务特性

每个任务独立运行:不依赖其他任务,不依赖RTOS调度器
时间点唯一:每个时间点只能有一个任务运行,哪个任务运行由RTOS调度器决定
RTOS调度器作用:负责确保当前一个任务开始在执行的时候(寄存器值,堆栈内容)与任务上一次退出的时候相同。
任务堆栈:每个任务有一个自己的堆栈,负责保存任务切换时的上下文环境。

任务状态

FreeRTOS中的任务永远处于下面几个状态中的一个

运行态

正在使用CPU(CPU正在处理的任务),单核处理器永远只有一个任务处于运行态。

就绪态

当更高优先级任务运行,此任务没有被阻塞或者挂起,等高优先级任务运行完毕,运行此任务的状态。

阻塞态

任务等待某个外部事件的话就成为阻塞态。比如调用vTaskDelay(),就会等到延时周期完成再继续运行此时就是阻塞态。此外任务等待:队列、信号量、事件组、通知或者互斥信号量也会进入阻塞态。阻塞态有超时时间,超过超时时间,会退出阻塞态。

挂起态

通过电泳函数vTaskSuspend()进入挂起态,xTaskResume解挂。挂起的任务不被调度器调用且没有超时时间。
#FreeRtos 基础知识_第3张图片

任务优先级

每个任务可以设置为0~configMAX_PRIORITIES-1优先级。configMAX_PRIORITIES在一般情况下不超过32。设置应尽量小。
数字越大优先级越搞和UCOS相反。空闲任务优先级为0
宏configUSE_TIME_SLICING定义为1时,多个任务可以共用一个优先级,此时处于相同优先级的任务使用时间片轮转调度器获取运行时间

任务实现

用函数xTaskCreat() xTaskCreateStatic()来创建任务。pxTaskCode为函数名称。
1)任务本身是函数。任务函数返回类型一定要是void,参数也得是viod*
2)任务本身是个死循环
3)具体任务实现在死循环里
4)任务函数运行后不允许跳出死循环。如果非要跳出调用vTaskDelete(NULL)删除此任务。

任务控制块

任务控制块:是一个结构体TCB_t 储存任务的属性。在创建任务时会自动分配一个任务控制块。

任务堆栈

堆栈作用:进行任务切换时保护现场。
使用xTaskCreate()创建任务时任务堆栈会由此函数自动创建,使用静态法创建时需手动指定

堆栈大小:为我们设置的数✖4个字节大小

你可能感兴趣的:(freeRTOS,stm32)