FreeRTOS-stm32f407学习笔记-任务特点

参考正点原子官方视频和开发指南

FreeRTOS任务特点

1.简单
2.无使用限制
3.支持抢占
4.支持优先级
5.每个人物都拥有堆栈导致RAM使用量增大
6.如果使用抢占必须考虑重入的问题

1.多任务系统

多任务系统是和单任务系统相比而言:

在没有配置操作系统的51,stm32单片机中主函数main()中有while(1)做得一个循环来完成所有操作处理,中间包括一些中断,称之为单任务系统,或者前后台系统。相对于多任务系统,单任务系统实时差,前后台系统各个任务均需要排队轮流执行。如下

在这里插入图片描述

多任务系统
将大型任务分为多个小任务,每个小任务执行时间很短,某种程度上可以认为小任务是并发处理。FreeRTOS使用的任务调度器是抢占式。具体情况如下:
在这里插入图片描述
高优先级的任务可以打断低优先级的任务从而获得CPU使用权,从而保证紧急任务的执行(即优先级高),紧急任务一般为高实时性任务,如检测。高优先级任务结束后低优先级任务可以使用CPU.

由于任意一个时间点只能运行一个任务,因此RTOS会调度器重复开启关闭任务,并且开启关闭后上下文环境(寄存器值,堆栈内容等)和任务上一次退出时候一致。为做到这一点,每个人物都必须有个堆栈,当任务切换的时候将上下文环境保存在堆栈中,这样
当任务再次执行的时候就可以从堆栈中取出上下文环境,任务恢复运行。

##2. 任务状态
在这里插入图片描述

运行态

正在运行的任务,单核处理器一个时刻只会执行一次任务。

就绪态

已经准备就绪可以运行但还没运行的任务所在状态

阻塞态

一个任务当前正等待某个外部事件时其处于阻塞态,如等待信号量,通知,事件组。任务进入阻塞态会有超时时间,超过时间就会强制退出阻塞态。

挂起态

任务挂起后无法被调度器调用从而进入运行态,且没有超时时间。

3.任务优先级

FreeRTOS每个任务可以分配一个从0~(configMAX_PRIORITIES-1)个优先级,一般为0-32。表示优先度的数字越高,优先级越高;反之越低。
调度器只会让处于就绪态的最高级任务运行。

4.任务实现和控制块

使用的是xTaskCreate()或xTaskCreateStatic()来创建任务,这两个函数的第一个参数pxTaskCode,就是这个任务的任务函数。任务函数特点如下
1.函数返回值类型和参数都是void型
2.任务具体执行过程为一个大循环,循环里是真正任务代码
3。任务函数一般不允许跳出循环,如果一定要跳出循环的话跳出循环后一定要使用vTaskDelete(NULL)删除此任务!
每个人任务都有一些属性需要储存,FreeRTOS用的事结构体,这个结构体就是任务控制,名称为TCB_t

5.任务堆栈

堆栈是保证多任务系统能够正常运作的保障,创建任务(无论是动态xTaskCreate()由系统自动创建还是使用xTaskCreateStatic())自定义任务堆栈,然后把堆栈首地址作为参数puxStackBuffer传给函数。如图:
在这里插入图片描述

堆栈大小

我们需要指定任务堆栈大小,数据类型为StackType_t,为uint32_t,定义于portmacro.h。由于StackType_t类型为4个字节,则实际任务堆栈大小是所定义的4倍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值