zoukankan      html  css  js  c++  java
  • STM32用FreeRTOS时任务优先级和中断优先级说明

    下面对 FreeRTOS 优先级相关的几个重要知识点进行下说明,这些知识点在以后的使用中务必要掌握牢固。

    FreeRTOS 中任务的最高优先级是通过 FreeRTOSConfig.h 文件中的 configMAX_PRIORITIES 进行
    配置的,用户实际可以使用的优先级范围是 0 到 configMAX_PRIORITIES – 1。比如我们配置此宏定
    义为 5,那么用户可以使用的优先级号是 0,1,2,3,4,不包含 5,对于这一点,初学者要特别的注意。
    用户配置任务的优先级数值越小,那么此任务的优先级越低,空闲任务的优先级是 0。
    建议用户配置宏定义 configMAX_PRIORITIES 的最大值不要超过 32,即用户任务可以使用的优先级
    范围是0到31。因为对于CM内核的移植文件,用户任务的优先级不是大于等于32的话, portmacro.h
    文件中的宏定义configUSE_PORT_OPTIMISED_TASK_SELECTION会优化优先级列表中要执行的最
    高优先级任务的获取算法(对于 CM 内核的移植文件,此宏定义默认是使能的,当然,用户也可以在
    FreeRTOSConfig.h 文件中进行配置)。 相比通用的最高优先级任务获取算法,这两种方式的对比如
    下:
       通用方式,没有优化---配置宏定义 configUSE_PORT_OPTIMISED_TASK_SELECTION 为 0:
       所有平台的移植文件都可以配置为 0,因为这是通用方式。
       纯 C 编写,比专用方式效率低。
       可用的优先级数量不限制。
       专用方式,进行优化---配置宏定义 configUSE_PORT_OPTIMISED_TASK_SELECTION 为为 1:
       部分平台支持。
       这些平台架构有专用的汇编指令,比如 CLZ(Count Leading Zeros)指令,通过这些指令可以加速算法执行速度。
       比通用方式高效。
       有最大优先级数限制,通常限制为 32 个。

    如果用户在 FreeRTOSConfig.h 文件中配置宏定义 configUSE_TIME_SLICING 为 1,或者没有配置

    此宏定义,时间片调度都是使能的。 另外,只要芯片资源允许,可以配置任意多个同优先级任务。
    (备注:没有定义 configUSE_TIME_SLICING,也能使用时间片调度是因为此宏定义默认已经在
    FreeRTOS.h 文件中使能)
    FreeRTOS 中处于运行状态的任务永远是当前能够运行的最高优先级任务。 下一章节讲解调度器,大
    家会对这个知识点有一个全面的认识。

    任务优先级分配方案
    对于初学者,有时候会纠结任务优先级设置为多少合适,因为任务优先级设置多少是没有标准的。对
    于这个问题,我们这里为大家推荐一个标准,任务优先级设置推荐方式如下图 13.1 所示:

     

    IRQ 任务:IRQ 任务是指通过中断服务程序进行触发的任务,此类任务应该设置为所有任务里面优先级最高的。

    高优先级后台任务:比如按键检测,触摸检测,USB 消息处理,串口消息处理等,都可以归为这一类任务。

    低优先级的时间片调度任务:比如 emWin 的界面显示,LED 数码管的显示等不需要实时执行的都可以归为这一类任务。 实际应用中用户不必拘泥于将这些任务都设置为优先级 1 的同优先级任务,可以设置多个优先级,只需注意这类任务不需要高实时性。
    空闲任务:空闲任务是系统任务。
    特别注意:IRQ 任务和高优先级任务必须设置为阻塞式(调用消息等待或者延迟等函数即可),只有
    这样,高优先级任务才会释放 CPU 的使用权,,从而低优先级任务才有机会得到执行。
    这里的优先级分配方案是我们推荐的一种方式,实际项目也可以不采用这种方法。 调试出适合项目需求的才是最好的。 

    中断优先级和任务优先级区别
    部分初学者也容易在这两个概念上面出现问题。 简单的说,这两个之间没有任何关系,不管中断的优
    先级是多少,中断的优先级永远高于任何任务的优先级,即任务在执行的过程中,中断来了就开始执行中
    断服务程序。
    另外对于 STM32F103,F407 和 F429 来说,中断优先级的数值越小,优先级越高。 而 FreeRTOS
    的任务优先级是,任务优先级数值越小,任务优先级越低。

  • 相关阅读:
    springboot配置视图控制器
    springboot测试的方法
    cookie之sameSite
    docker 安装Elasticsearch +kibana
    find + xargs 删除文件名中含有空格的文件
    git,composer 代理
    Composer更新依赖报错Fatal error解决方案
    compose 设置代理 SET HTTP_PROXY="http://192.168.1.103:8080"
    php使用composer常用问题及解决办法集:zlib_decode():data error......
    ERROR: .FileNotFoundError: [Errno 2] No such file or directory: '.\docker-compose.yml:docker-compose.apache.yml'
  • 原文地址:https://www.cnblogs.com/-colin/p/9086720.html
Copyright © 2011-2022 走看看