天天看点

FreeRTOS基础知识

FreeRTOS任务特性:

  • 简单;
  • 没有使用限制;
  • 支持抢占;
  • 支持优先级;
  • 每个任务都有堆栈,但也导致了RAM使用量增大;
  • 如果使用强化在哪的话必须仔细考虑重入的问题;

    协程

  • FreeRTOS的协程已经不再更新维护,不用考虑了;

    FreeRTOS任务状态

  • 运行态
  • 就绪态
  • 阻塞态
  • 挂起态
    FreeRTOS基础知识
    任务优先级
  • 任务优先级决定了任务的执行优先级别,在FreeRTOS中任务优先级可选范围为:
  • 0~configMAX_PRIORITIES-1 //这是个宏定义,这个宏表示最大优先级
  • 数字越大,优先级越高
    FreeRTOS基础知识
  • 在“FreeRTOSConfig.h”文件中,有这个宏,但是这个宏不是说最大优先级的数量有32,而是说最大优先级共有32级,真正的级数是0-31。
  • 同一优先级下可以有多个任务
  • 在创建任务时,需要指定这个任务的任务优先级。

任务实现

FreeRTOS基础知识

任务实现如图所示,用户自己的代码就写在死循环中即可。

  • 需要注意的是,每个任务的死循环中需要一个可以引起任务调度的函数,就是那个第四步的函数:“vTaskDelay();”。

    一般任务创建后我们是不会退出的,但如果要退出,需要执行第5步中的函数:“vTaskDelete(NULL);”

    任务控制块

    FreeRTOS基础知识
  • 每个任务都会有一些属性,我们需要对其进行一些描述,好让系统知道关于这个任务的一些属性,比如这个任务的任务名字、任务堆栈、优先级等等,所以就需要任务控制块这个数据结构了。
  • 任务控制详情在“tasks.c”里面。

    任务堆栈

    FreeRTOS基础知识
FreeRTOS基础知识
  • 注意,任务堆栈大小共占多少字节是:“128*4=512”字节,不是128字节,如上图所示。
  • 任务堆栈的大小根据任务实际情况来调整。
  • 如果在调试国策怀念高中出现程序卡死,基本就是任务堆栈大小没有设定好,比如你如果在一个任务中申请了一个数组,这就比较大了,此时就要根据实际情况把任务堆栈设定的大点。

继续阅读