目录
  1. 1. 系统配置文件FreeRTOSConfig.h
  2. 2. INCLUDE_*
    1. 2.0.1. INCLUDE_xTaskGetSchedulerState
    2. 2.0.2. INCLUDE_vTaskPrioritySet
      1. 2.0.2.1. INCLUDE_uxTaskPriorityGet
    3. 2.0.3. INCLUDE_vTaskDelete
    4. 2.0.4. INCLUDE_vTaskCleanUpResources
    5. 2.0.5. INCLUDE_vTaskSuspend
    6. 2.0.6. INCLUDE_vTaskDelayUntil
    7. 2.0.7. INCLUDE_vTaskDelay
    8. 2.0.8. INCLUDE_eTaskGetState
    9. 2.0.9. INCLUDE_xTimerPendFunctionCall
  • 3. config_*
    1. 3.1. FreeRTOS基础配置选项
      1. 3.1.1. 1为抢占式调度,0为协程,抢占式调度器会在内核的中断中进行任务的切换,协程的话,会在三种情况下,进行任务的切换:
      2. 3.1.2. configUSE_TIME_SLICING
      3. 3.1.3. configUSE_PORT_OPTIMISED_TASK_SELECTION
      4. 3.1.4. configUSE_TICKLESS_IDLE
      5. 3.1.5. configUSE_QUEUE_SETS
      6. 3.1.6. configCPU_CLOCK_HZ
      7. 3.1.7. configTICK_RATE_HZ
      8. 3.1.8. configMAX_PRIORITIES
      9. 3.1.9. configMINIMAL_STACK_SIZE
      10. 3.1.10. configMAX_TASK_NAME_LEN
      11. 3.1.11. configUSE_16_BIT_TICKS
      12. 3.1.12. configIDLE_SHOULD_YIELD
      13. 3.1.13. configUSE_TASK_NOTIFICATIONS
      14. 3.1.14. configUSE_MUTEXES
      15. 3.1.15. configQUEUE_REGISTRY_SIZE
      16. 3.1.16. configCHECK_FOR_STACK_OVERFLOW
      17. 3.1.17. configUSE_RECURSIVE_MUTEXES
      18. 3.1.18. configUSE_MALLOC_FAILED_HOOK
      19. 3.1.19. configUSE_APPLICATION_TASK_TAG
      20. 3.1.20. configUSE_COUNTING_SEMAPHORES
    2. 3.2. FreeRTOS与内存申请有关配置选项
      1. 3.2.1. configSUPPORT_DYNAMIC_ALLOCATION
      2. 3.2.2. configTOTAL_HEAP_SIZE
  • 4. 总结
  • STM2F407与FreeRTOS的FreeRTOSConfig.h详解<1>

    FreeRTOS是一个RTOS类的嵌入式实时操作系统,并且是开源免费的,与其他实时操作系统相比,是一个很好的选择。在移植好FreeRTOS到STM32上面之后,需要根据板子外设配置相应的功能,FreeRTOSConfig.h里面的宏完成对系统的裁剪和配置。

    系统配置文件FreeRTOSConfig.h

    在编译移植好的FreeROTS工程之后,需要都这个系统配置文件进行宏配置,这个配置文件与我们在编译kernel时的menuconfig类似,里面定义的宏,是对板子外设的和功能的裁剪配置。这个里面主要分为两个类的宏,一个是“INCLUDE_”开始的宏,一个是“config”开始的宏。FreeRTOSConfig.h是我们自己填充的.h文件,RTOS工程自带一个FreeRTOS.h文件,我们在FreeRTOSConfig.h定义的宏会对FreeRTOS.h进行条件编译。

    INCLUDE_*

    这个宏的主要功能就是使能或者是失能,FreeRTOS中的API函数的,如果我们需要使用某个api函数就需要把这个宏置1,否则就是置0。在FreeRTOSConfig.h,在上面部分是宏的声明,在对应的.c文件里面会有条件编译,这个就可以达到减少系统占有的ROM和RAM。

    INCLUDE_xTaskGetSchedulerState

    这个宏是对xTaskGetSchedulerState函数的条件判断,是获取任务调度表状态的函数。

    INCLUDE_vTaskPrioritySet

    这个宏是对vTaskPrioritySet函数的条件判断,是任务优先级设置的函数。

    INCLUDE_uxTaskPriorityGet

    这个宏是对uxTaskPriorityGet函数的条件判断,是获得任务优先级的函数。

    INCLUDE_vTaskDelete

    这个宏是对vTaskDelete函数的条件判断,是获得任务优先级的函数。

    INCLUDE_vTaskCleanUpResources

    这个宏是对vTaskCleanUpResources函数的条件判断,是对删除的任务进行资源回收的函数。

    INCLUDE_vTaskSuspend

    这个宏是对vTaskSuspend函数的条件判断,是对任务进行挂起的函数。

    INCLUDE_vTaskDelayUntil

    这个宏是对vTaskDelayUntil函数的条件判断,是设置任务延迟绝对时间的函数。

    INCLUDE_vTaskDelay

    这个宏是对vTaskDelay函数的条件判断,是设置任务延迟相对时间的函数。

    INCLUDE_eTaskGetState

    这个宏是对eTaskGetState函数的条件判断,是获得某个任务的状态的函数。

    INCLUDE_xTimerPendFunctionCall

    这个宏是对xTimerPendFunctionCall函数的条件判断,是获得某个任务的状态的函数

    config_*

    FreeRTOS基础配置选项

    1为抢占式调度,0为协程,抢占式调度器会在内核的中断中进行任务的切换,协程的话,会在三种情况下,进行任务的切换:

    1. 一个任务调用函数taskYIELD();
    2. 一个任务调用可以使任务进入阻塞状态的API函数;
    3. 应用程序明确定义了在中断中执行上下文切换;

    configUSE_TIME_SLICING

    为1的话,在相同优先级下的任务使用合作式调度器,也就是时间片轮流执行。为0的话则不会。

    configUSE_PORT_OPTIMISED_TASK_SELECTION

    选择下一个要执行的任务,为0是通用的方法,为1是特殊方法,使用硬件指令计算。

    configUSE_TICKLESS_IDLE

    FreerRTOS支持低功耗tickless模式,为1使能,tickless低功耗模式是RTOS通过的低功耗方法,

    configUSE_QUEUE_SETS

    设置成1使能队列集功能(可以阻塞、挂起到多个队列和信号量),设置成0取消队列集功能。

    configCPU_CLOCK_HZ

    设置CPU工作的频率。

    configTICK_RATE_HZ

    设置滴答定时器的中断频率,这里设置为1000,周期就是1ms。

    configMAX_PRIORITIES

    设置优先级的数量,范围为0~(configMAX_PRIORITIES-1),0为最低优先级,值越大优先级越高,而且我们的任务不可使用0优先级,

    configMINIMAL_STACK_SIZE

    设置最小任务堆栈大小,也就是空闲任务大小,单位是字,

    configMAX_TASK_NAME_LEN

    设置任务名最大长度,字节为单位

    configUSE_16_BIT_TICKS

    设置系统节拍计数器变量数据类型。设为 1后portTickType 将被定义为无符号的16位整形类型,configUSE_16_BIT_TICKS 设为0 后portTickType 则被定义为无符号的32位整型。

    configIDLE_SHOULD_YIELD

    这宏的作用是定义了与空闲任务(idle task)和其他任务处于同等优先级时,为1时,时间片轮到空闲任务的时候,空闲任务会将cpu的使用权交给其他任务 。

    configUSE_TASK_NOTIFICATIONS

    为1 则开启任务通知功能。

    configUSE_MUTEXES

    为1使用互斥信号量。

    configQUEUE_REGISTRY_SIZE

    设置可以注册队列和信号量的最大数量,在内核调试器查询队列和信号量的时候需要设置这个宏,

    configCHECK_FOR_STACK_OVERFLOW

    设置堆栈溢出检测,每个任务的堆栈是从FreeRTOS的ucHeap中分配的,如果任务的堆栈溢出的话,会造成程序不稳定,为1的话则设置为堆栈溢出检测功能,需要和钩子函数结合使用,也就是一个回调函数,当溢出是会调用这个回调函数。

    configUSE_RECURSIVE_MUTEXES

    为1的话是使能递归互斥信号量。

    configUSE_MALLOC_FAILED_HOOK

    为1使用内存分配失败的钩子函数,

    configUSE_APPLICATION_TASK_TAG

    这个宏为1是使能两个函数进行编译:

    1. configUSE_APPLICATION_TASK_TAGF()这个函数
    2. vTaskSetApplicationTaskTag(),这个函数是为任务分配一个标签值。

    configUSE_COUNTING_SEMAPHORES

    设置1会启动计数型信号量,

    FreeRTOS与内存申请有关配置选项

    configSUPPORT_DYNAMIC_ALLOCATION

    定义为1的话FreeRTOS内核对象所需要的RAM会从FREERTOS的堆中动态的获取内存,为0则需要内核对象自己提供。

    configTOTAL_HEAP_SIZE

    设置堆空间(Heap)的大小。只有当程序中采用FreeRTOS 提供的内存分配算法时才会用到。

    总结

    总是我们没有用到的宏有些不会在FreeRTOSConfig.h定义,需要在FreeRTOS.h中查找,并且上面和针对config的宏还有部分配置解释。

    文章作者: ZhaoH.T
    文章链接: http://www.funful.ink/2019/05/18/STM32_FreeRTOS_config_1/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 FunfulBlog

    评论