#FreeRtos 基础知识

什么是多任务系统

单任务系统:又叫前后台任务,前台:中断服务程序,后台:while(1)
在这里插入图片描述
缺点:CPU 利用率低
FreeRTOS:抢占式实时多任务系统
在这里插入图片描述
高优先级任务打断低优先级任务

FreeRTOS的任务与协程

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

任务特性

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

任务状态

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

运行态

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

就绪态

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

阻塞态

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

挂起态

通过电泳函数vTaskSuspend()进入挂起态,xTaskResume解挂。挂起的任务不被调度器调用且没有超时时间。
在这里插入图片描述

任务优先级

每个任务可以设置为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个字节大小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值