FreeRTOS任务任务状态
就绪态:处于就绪态的任务还没有运行,因为有一个同优先级或更高优先级的任务正在运行。
阻塞态:任务进入阻塞态即任务在等待队列、信号量、事件组、通知或互斥信号量时会进入阻塞状态。
挂起状态:任务进入挂起状态后不能被调度器调用进入运行状态
任务优先级
1.任务优先级可以分为32个等级,任务优先级最好设置满足应用的最小值,能够减小RAM的消耗。
2.数字越低表示任务的优先级越低,调度器总是有限调用高优先级任务获得处理器使用权。
任务函数
1.硬件要执行什么任务都是在任务函数中实现,任务函数的返回类型一定要为void类型,任务的参数也是void类型指针,任务函数名可以根据实际情况进行定义。
2.不能从任务函数中返回或退出,如果一定要从任务中退出的话那一定要调用函数vTaskDelete(NULL)来删除此任务。
3.FreeRTOS的延时函数,可以调用切换的API函数替代,如请求信号量、队列等,甚至直接调用任务调度器。常用的是FreeRTOS的演示函数。
任务控制块
FreeRTOS每个任务都有一些属性进行存储,FreeRTOS把这些属性集合到一起用一个结构体来表示,这个结构体叫做人物控制块:TCB_t
任务堆栈
FreeRTOS 能够实现任务之间的切换是因为有任务堆栈的存在, 任务调度器在执行任务切换的时候会将当前的任务CPU寄存器的值等保存在此任务的任务堆栈中,等到下次切换回这个任务时就会先用堆栈中保存的值来恢复现场。
任务创建函数
用这个函数创建任务需要从FreeRTOS的堆中分配内存,因此必须提供内存管理文件,新建任务默认是就绪状态,如果没有比他更高优先级那么这个任务立即进入运行状态。
静态创建任务需要用户指定存储空间
删除任务函数
vTaskDelete(TaskHandle_t xTaskToDelete)
参数 xTaskToDelete:要删除的任务
任务创建参数定义
- 动态创建任务,定义任务所需参数
- 初始化硬件和时钟
- 静态创建任务
- 任务挂起、恢复、中断函数中恢复一个任务