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()获取 传入参数为任务句柄

返回值越接近零,任务越接近堆栈溢出,堆栈溢出会导致整个系统的重启

使用这个函数消耗的资源比较少

posted @ 2024-12-06 16:44  shumei52  阅读(37)  评论(0)    收藏  举报