Freertos学习笔记(二)任务优先级、任务挂起与恢复、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()
获取 传入参数为任务句柄
返回值越接近零,任务越接近堆栈溢出,堆栈溢出会导致整个系统的重启
使用这个函数消耗的资源比较少
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。