以下笔记基于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()获取 传入参数为任务句柄
返回值越接近零,任务越接近堆栈溢出,堆栈溢出会导致整个系统的重启
使用这个函数消耗的资源比较少