Freertos学习笔记(二)
此篇文章在2022年1月29日被记录
任务优先级、任务挂起与恢复、Task系统信息显示、Task堆栈的大小设置与调试
以下笔记基于esp32-idf
第四课 任务的优先级
- 优先级数值为0~MAX-1 MAX=25
- 如果设定超过最大值,则默认为最大值,设定最大值时最大不能超过32,优先级越大优先级越高,但是并不是越大越好,在某些情况下可能会阻塞其他任务运行,导致其他任务运行不了
- 使用
uxTaskPriorityGet
获得优先级,传入参数为任务句柄。 - 相同优先级的任务共享相同时间片,谁先创建谁运行
- 不同优先级运行优先级别高的任务
- 使用修改优先级
vTaskPrioritySet();
//传入参数 任务句柄,优先级级别
第五课 任务的挂起与恢复
- 任务的状态
Running、Ready、Blocked、Suspended
- 在任何时候都可以进入挂起状态
vTaskSuspend();
- 恢复使用
xTaskResume();
- 传入参数均为句柄,如果传入参数为空,则为挂起自己。
vTaskSuspendAll()
、xTaskResume()
在一个任务中,如果不想被外界所打扰(这个程序严格时间控制),使用这个函数挂起其他所有函数,在计算完成后再恢复其他函数;
第六课 Task系统信息显示
vTaskList()
打开宏定义:在menuconfig中:enable FreeRTOS trace facility enable FreeRTOS stats formalting functions
定义一个buff[]指针,然后用vTaskList()
,这种方式比较占用内存与CPU资源
stack是一个比较重要的指示
第七课 Task堆栈的大小设置与调试
先估计一个较大的值,然后在使用时取得需要的任务的堆栈值变化
使用uxTaskGetStackHighWaterMark()
获取 传入参数为任务句柄
返回值越接近零,任务越接近堆栈溢出,堆栈溢出会导致整个系统的重启
使用这个函数消耗的资源比较少