• 【FreeRTOS】【STM32】03 FreeRTOSConfig.h头文件简介与修改


    基于[野火®]《FreeRTOS%20内核实现与应用开发实战—基于STM32》.pdf

    FreeRTOSConfig.h头文件是FreeRTOS各项功能的打开与关闭

    FreeRTOSConfig.h头文件简介

    之前也说过了,FreeRTOSConfig.h文件可以添加在工程中任意文件夹,只需要在路径中添加好了就行。
    该头文件对裁剪整个FreeRTOS 所需的功能的宏均做了定义。

    这边是野火电子添加注释版本的FreeRTOSConfig.h,添加了一些中文注释,并且把相关的头文件进行分类,方便查找宏定义已经阅读,详见[野火®]《FreeRTOS%20内核实现与应用开发实战—基于STM32》.pdf

    (1)代码清单中的这类标号在[野火®]《FreeRTOS%20内核实现与应用开发实战—基于STM32》.pdf有具体说明

    #ifndef FREERTOS_CONFIG_H
    #define FREERTOS_CONFIG_H
    
    //针对不同的编译器调用不同的 stdint.h 文件
    #if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__) (1)
    #include 
    extern uint32_t SystemCoreClock;
    #endif
    
     //断言
     #define vAssertCalled(char,int) printf("Error:%s,%d\r\n",char,int)
     #define configASSERT(x) if((x)==0) vAssertCalled(__FILE__,__LINE__) (2)
     
     /************************************************************************
     * FreeRTOS 基础配置配置选项
     *********************************************************************/
     /* 置 1:RTOS 使用抢占式调度器;置 0:RTOS 使用协作式调度器(时间片)
     *
     * 注:在多任务管理机制上,操作系统可以分为抢占式和协作式两种。
     * 协作式操作系统是任务主动释放 CPU 后,切换到下一个任务。
     * 任务切换的时机完全取决于正在运行的任务。
     */
     #define configUSE_PREEMPTION 1 (3)
     
     //1 使能时间片调度(默认式使能的)
     #define configUSE_TIME_SLICING 1 (4)
     
     /* 某些运行 FreeRTOS 的硬件有两种方法选择下一个要执行的任务:
     * 通用方法和特定于硬件的方法(以下简称“特殊方法”)。
     *
     * 通用方法:
     * 1.configUSE_PORT_OPTIMISED_TASK_SELECTION 为 0 或者硬件不支持这种特殊方法。
     * 2.可以用于所有 FreeRTOS 支持的硬件
     * 3.完全用 C 实现,效率略低于特殊方法。
     * 4.不强制要求限制最大可用优先级数目
     * 特殊方法:
     * 1.必须将 configUSE_PORT_OPTIMISED_TASK_SELECTION 设置为 1。
     * 2.依赖一个或多个特定架构的汇编指令(一般是类似计算前导零[CLZ]指令)。
     * 3.比通用方法更高效
     * 4.一般强制限定最大可用优先级数目为 32
     * 
     一般是硬件计算前导零指令,如果所使用的,MCU 没有这些硬件指令的话此宏应该设置为 0!
     */
     #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 (5)
     
     /* 置 1:使能低功耗 tickless 模式;置 0:保持系统节拍(tick)中断一直运行 */
     #define configUSE_TICKLESS_IDLE 0 (6)
     
     /*
     * 写入实际的 CPU 内核时钟频率,也就是 CPU 指令执行频率,通常称为 Fclk
     * Fclk 为供给 CPU 内核的时钟信号,我们所说的 cpu 主频为 XX MHz,
     * 就是指的这个时钟信号,相应的,1/Fclk 即为 cpu 时钟周期;
     */
     #define configCPU_CLOCK_HZ (SystemCoreClock) (7)
    
     //RTOS 系统节拍中断的频率。即一秒中断的次数,每次中断 RTOS 都会进行任务调度
     #define configTICK_RATE_HZ (( TickType_t )1000) (8)
     
     //可使用的最大优先级
     #define configMAX_PRIORITIES (32) (9)
     
     //空闲任务使用的堆栈大小
     #define configMINIMAL_STACK_SIZE ((unsigned short)128) (10)
     
     //任务名字字符串长度
     #define configMAX_TASK_NAME_LE (16) (11)
     
     //系统节拍计数器变量数据类型,1 表示为 16 位无符号整形,0 表示为 32 位无符号整形
     #define configUSE_16_BIT_TICKS 0 (12)
     
     //空闲任务放弃 CPU 使用权给其他同优先级的用户任务
     #define configIDLE_SHOULD_YIELD 1 (13)
     
     //启用队列
     #define configUSE_QUEUE_SETS 1 (14)
     
     //开启任务通知功能,默认开启
     #define configUSE_TASK_NOTIFICATIONS 1 (15)
     
     //使用互斥信号量
     #define configUSE_MUTEXES 1 (16)
     
     //使用递归互斥信号量
     #define configUSE_RECURSIVE_MUTEXES 1 (17)
     
     //为 1 时使用计数信号量
     #define configUSE_COUNTING_SEMAPHORES 1 (18)
     
     /* 设置可以注册的信号量和消息队列个数 */
     #define configQUEUE_REGISTRY_SIZE 10 (19)
     
     #define configUSE_APPLICATION_TASK_TAG 0
     
     
     /*****************************************************************
     FreeRTOS 与内存申请有关配置选项
     *****************************************************************/
     //支持动态内存申请
     #define configSUPPORT_DYNAMIC_ALLOCATION 1 (20)
     //支持静态内存
    #define configSUPPORT_STATIC_ALLOCATION 0
     //系统所有总的堆大小
     #define configTOTAL_HEAP_SIZE ((size_t)(36*1024)) (21)
     /***************************************************************
     FreeRTOS 与钩子函数有关的配置选项
     **************************************************************/
     /* 置 1:使用空闲钩子(Idle Hook 类似于回调函数);置 0:忽略空闲钩子
     *
     * 空闲任务钩子是一个函数,这个函数由用户来实现,
     * FreeRTOS 规定了函数的名字和参数:void vApplicationIdleHook(void ),
     * 这个函数在每个空闲任务周期都会被调用
     * 对于已经删除的 RTOS 任务,空闲任务可以释放分配给它们的堆栈内存。
     * 因此必须保证空闲任务可以被 CPU 执行
     * 使用空闲钩子函数设置 CPU 进入省电模式是很常见的
     * 不可以调用会引起空闲任务阻塞的 API 函数
     */
     #define configUSE_IDLE_HOOK 0 (22)
     
     /* 置 1:使用时间片钩子(Tick Hook);置 0:忽略时间片钩子
     *
     *
     * 时间片钩子是一个函数,这个函数由用户来实现,
     * FreeRTOS 规定了函数的名字和参数:void vApplicationTickHook(void )
     * 时间片中断可以周期性的调用
     * 函数必须非常短小,不能大量使用堆栈,
     * 不能调用以”FromISR" 或 "FROM_ISR”结尾的 API 函数
     */
     #define configUSE_TICK_HOOK 0 (23)
     
     //使用内存申请失败钩子函数
     #define configUSE_MALLOC_FAILED_HOOK 0 (24)
     
     /*
     * 大于 0 时启用堆栈溢出检测功能,如果使用此功能
     * 用户必须提供一个栈溢出钩子函数,如果使用的话
     * 此值可以为 1 或者 2,因为有两种栈溢出检测方法 */
     #define configCHECK_FOR_STACK_OVERFLOW 0 (25)
     
     
     /********************************************************************
     FreeRTOS 与运行时间和任务状态收集有关的配置选项
     **********************************************************************/
     //启用运行时间统计功能
     #define configGENERATE_RUN_TIME_STATS 0 (26)
     //启用可视化跟踪调试
     #define configUSE_TRACE_FACILITY 0 (27)
     /* 与宏 configUSE_TRACE_FACILITY 同时为 1 时会编译下面 3 个函数
     * prvWriteNameToBuffer()
     * vTaskList(),
     * vTaskGetRunTimeStats()
     */
     #define configUSE_STATS_FORMATTING_FUNCTIONS 1
     
     
     /********************************************************************
     FreeRTOS 与协程有关的配置选项
     *********************************************************************/
     //启用协程,启用协程以后必须添加文件 croutine.c
     #define configUSE_CO_ROUTINES 0 (28)
     //协程的有效优先级数目
     #define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) (29)
     
     
     /***********************************************************************
     FreeRTOS 与软件定时器有关的配置选项
     **********************************************************************/
     //启用软件定时器
     #define configUSE_TIMERS 1 (30)
     //软件定时器优先级
     #define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-1) (31)
     //软件定时器队列长度
     #define configTIMER_QUEUE_LENGTH 10 (32)
     //软件定时器任务堆栈大小
     #define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE*2) (33)
     
     /************************************************************
     FreeRTOS 可选函数配置选项
     ************************************************************/
     #define INCLUDE_xTaskGetSchedulerState 1 (34)
     #define INCLUDE_vTaskPrioritySet 1 (35)
     #define INCLUDE_uxTaskPriorityGet 1 (36)
     #define INCLUDE_vTaskDelete 1 (37)
     #define INCLUDE_vTaskCleanUpResources 1
     #define INCLUDE_vTaskSuspend 1
     #define INCLUDE_vTaskDelayUntil 1
     #define INCLUDE_vTaskDelay 1
     #define INCLUDE_eTaskGetState 1
     #define INCLUDE_xTimerPendFunctionCall 1
     
     /******************************************************************
     FreeRTOS 与中断有关的配置选项
     ******************************************************************/
     #ifdef __NVIC_PRIO_BITS
     #define configPRIO_BITS __NVIC_PRIO_BITS (38)
     #else
     #define configPRIO_BITS 4 (39)
     #endif
     //中断最低优先级
     #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 (40)
     
     //系统可管理的最高中断优先级
     #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 (41)
     #define configKERNEL_INTERRUPT_PRIORITY (42)
     ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
     
     #define configMAX_SYSCALL_INTERRUPT_PRIORITY (43)
     ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
     /****************************************************************
     FreeRTOS 与中断服务函数有关的配置选项
     ****************************************************************/
     #define xPortPendSVHandler PendSV_Handler
     #define vPortSVCHandler SVC_Handler
     
     /* 以下为使用 Percepio Tracealyzer 需要的东西,不需要时将
     configUSE_TRACE_FACILITY 定义为 0 */
     #if ( configUSE_TRACE_FACILITY == 1 ) (44)
     #include "trcRecorder.h"
     #define INCLUDE_xTaskGetCurrentTaskHandle 0 
     // 启用一个可选函数(该函数被 Trace 源码使用,默认该值为 0 表示不用)
     #endif
     
     
     #endif /* FREERTOS_CONFIG_H */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223

    FreeRTOSConfig.h 文件修改

    一般来说,参照官方DEMO中的文件就可以了

    FreeRTOSConfig.h 头文件的内容修改的不多,具体是:修改与对应开发板的头文件 ,如果是使用 STM32F1 ,则包含 F1 的头文件#include “stm32f10x.h”,同理是使用了其它系列,则包含对应的头文件即可。
    在这里插入图片描述

  • 相关阅读:
    基于Java毕业设计学生宿舍管理系统源码+系统+mysql+lw文档+部署软件
    【】对peer的WebRtcConnection创建
    进程间通信(IPC)的方法:UNIX域套接字
    2.3.1 协程设计原理与汇编实现
    蓄电池与超级电容混合储能并网逆变系统Simulink仿真
    vs code怎么启动一个vue项目
    【Redis】Redis 数据结构介绍
    CentOS 7.9如何禁止内核自动更新升级
    MySQL (1038, ‘Out of sort memory, consider increasing server sort buffer size‘)
    凌恩客户文章:利用肠道微生物群预测养殖海参的产地和品质
  • 原文地址:https://blog.csdn.net/apythonlearner/article/details/133706751