FreeRTOS基础知识

FreeRTOS任务特性:

  • 简单;

  • 没有使用限制;

  • 支持抢占;

  • 支持优先级;

  • 每个任务都有堆栈,但也导致了RAM使用量增大;

  • 如果使用强化在哪的话必须仔细考虑重入的问题;
    协程

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

  • 运行态

  • 就绪态

  • 阻塞态

  • 挂起态
    FreeRTOS基础知识_第1张图片
    任务优先级

  • 任务优先级决定了任务的执行优先级别,在FreeRTOS中任务优先级可选范围为:

  • 0~configMAX_PRIORITIES-1 //这是个宏定义,这个宏表示最大优先级

  • 数字越大,优先级越高
    FreeRTOS基础知识_第2张图片

  • 在“FreeRTOSConfig.h”文件中,有这个宏,但是这个宏不是说最大优先级的数量有32,而是说最大优先级共有32级,真正的级数是0-31。

  • 同一优先级下可以有多个任务

  • 在创建任务时,需要指定这个任务的任务优先级。

任务实现
FreeRTOS基础知识_第3张图片
任务实现如图所示,用户自己的代码就写在死循环中即可。

  • 需要注意的是,每个任务的死循环中需要一个可以引起任务调度的函数,就是那个第四步的函数:“vTaskDelay();”。
    一般任务创建后我们是不会退出的,但如果要退出,需要执行第5步中的函数:“vTaskDelete(NULL);”
    任务控制块
    FreeRTOS基础知识_第4张图片
  • 每个任务都会有一些属性,我们需要对其进行一些描述,好让系统知道关于这个任务的一些属性,比如这个任务的任务名字、任务堆栈、优先级等等,所以就需要任务控制块这个数据结构了。
  • 任务控制详情在“tasks.c”里面。
    任务堆栈
    FreeRTOS基础知识_第5张图片

FreeRTOS基础知识_第6张图片

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

你可能感兴趣的:(FreeRTOS)