没志青年
发布于 2025-06-15 / 25 阅读
0

FreeRTOS 配置

从官方示例中得到的配置文件,是不能直接使用的,需要修改,以符合单片机硬件。

FreeRTOS 支持:

  • 时间片调度:任务按时间片执行,时间片通常为1ms。

  • 抢占式调度:高优先级任务抢占低优先级,高优先级任务需让出内存。

  • 抢占式+时间片调度

默认只开启抢占式调度。

系统相关配置

功能启用配置

#define configUSE_QUEUE_SETS 1 // 启用队列集功能

钩子函数

配置模板:

#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H


/*-----------------------------------------------------------
 * FreeRTOS 配置模板
 *----------------------------------------------------------*/

// Cortex-M NVIC 的中断优先级位数(STM32大多是4位) 
#ifndef __NVIC_PRIO_BITS
  #define __NVIC_PRIO_BITS    4
#endif
#define configPRIO_BITS       __NVIC_PRIO_BITS

// 系统主频设置:100MHz
#define configCPU_CLOCK_HZ    (100000000UL)
// Systick时钟频率,如果systick和系统时钟一致的话,不要配置这个,否则systick中断8ms触发一次
//#define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ
// 时钟节拍频率:1ms
#define configTICK_RATE_HZ    1000
// 抢占式调度
#define configUSE_PREEMPTION  1
// 任务时间片调度关闭
#define configUSE_TIME_SLICING 0
#define configTICK_TYPE_WIDTH_IN_BITS TICK_TYPE_WIDTH_32_BITS   // Tick 32位计数

// 最大优先级数量(0 ~ configMAX_PRIORITIES-1)
#define configMAX_PRIORITIES  12
// 最小堆栈大小(单位:words,不是字节)
#define configMINIMAL_STACK_SIZE 128
// 任务名称最大长度
#define configMAX_TASK_NAME_LEN 16

// 任务通知、事件组等功能开关
#define configUSE_TASK_NOTIFICATIONS   1
#define configUSE_MUTEXES              1
#define configUSE_RECURSIVE_MUTEXES    0
#define configUSE_COUNTING_SEMAPHORES  1
#define configUSE_QUEUE_SETS           0
#define configUSE_APPLICATION_TASK_TAG 0

// 堆栈分配方式(支持静态+动态)
#define configSUPPORT_STATIC_ALLOCATION  0   // 需实现 vApplicationGetIdleTaskMemory 和 vApplicationGetTimerTaskMemory 钩子函数
#define configSUPPORT_DYNAMIC_ALLOCATION 1
#define configTOTAL_HEAP_SIZE            (20 * 1024)
#define configAPPLICATION_ALLOCATED_HEAP 0

// 中断优先级配置(值越小优先级越高)
#define configKERNEL_INTERRUPT_PRIORITY       (15 << (8 - configPRIO_BITS)) // 0xF0
#define configMAX_SYSCALL_INTERRUPT_PRIORITY  (5 << (8 - configPRIO_BITS))  // 0x50

// 断言:用于调试
#define configASSERT( x ) \
    if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); __asm("BKPT #0"); for( ;; ); }

/*-----------------------------------------------------------
 * 钩子函数
 *----------------------------------------------------------*/
#define configUSE_IDLE_HOOK            0
#define configUSE_TICK_HOOK            0  // Tick钩子,需实现 vApplicationTickHook()
#define configUSE_MALLOC_FAILED_HOOK   0
#define configUSE_DAEMON_TASK_STARTUP_HOOK 0
#define configUSE_PASSIVE_IDLE_HOOK    0
#define configCHECK_FOR_STACK_OVERFLOW 0  // 堆栈溢出检测等级,需实现 vApplicationStackOverflowHook 钩子函数

// 软件定时器配置
#define configUSE_TIMERS             1     // 打开软件定时器
#define configTIMER_TASK_PRIORITY    (configMAX_PRIORITIES - 1)
#define configTIMER_QUEUE_LENGTH     10
#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE    

		
// 调试/运行统计配置
#define configUSE_TRACE_FACILITY         0
#define configGENERATE_RUN_TIME_STATS    0
#define configUSE_STATS_FORMATTING_FUNCTIONS 0

// 任务调度器相关函数是否启用(按需开启)
#define INCLUDE_vTaskPrioritySet               1
#define INCLUDE_uxTaskPriorityGet              1
#define INCLUDE_vTaskDelete                    0
#define INCLUDE_vTaskSuspend                   1
#define INCLUDE_xResumeFromISR                 1
#define INCLUDE_vTaskDelayUntil                1
#define INCLUDE_vTaskDelay                     1
#define INCLUDE_xTaskGetSchedulerState         1
#define INCLUDE_xTaskGetCurrentTaskHandle      1
#define INCLUDE_uxTaskGetStackHighWaterMark    1  // 用于查看栈使用率
#define INCLUDE_xTaskGetIdleTaskHandle         0
#define INCLUDE_eTaskGetState                  0
#define INCLUDE_xEventGroupSetBitFromISR       1
#define INCLUDE_xTimerPendFunctionCall         1   // 中断程序中调用 xEventGroupSetBitsFromISR 需要打开这个
#define INCLUDE_xTaskAbortDelay                0
#define INCLUDE_xTaskGetHandle                 0
#define INCLUDE_xTaskResumeFromISR             1

/*-----------------------------------------------------------
 * 高级特性与MPU/TrustZone相关(STM32F4等无MPU,全部设为0)
 *----------------------------------------------------------*/
#define configENABLE_MPU                        0
#define configENABLE_TRUSTZONE                  0
#define configRUN_FREERTOS_SECURE_ONLY          0
#define configENABLE_FPU                        1   // 若使用FPU浮点运算,设为1
#define configENABLE_MVE                        0
#define configCHECK_HANDLER_INSTALLATION        1

// 以下为内核内部高级配置(按需使用)
#define configIDLE_SHOULD_YIELD                 1
#define configQUEUE_REGISTRY_SIZE               0
#define configNUM_THREAD_LOCAL_STORAGE_POINTERS 0
#define configSTACK_DEPTH_TYPE                  size_t
#define configMESSAGE_BUFFER_LENGTH_TYPE        size_t
#define configHEAP_CLEAR_MEMORY_ON_FREE         1
#define configSTATS_BUFFER_MAX_LENGTH           0xFFFF
#define configUSE_MINI_LIST_ITEM                1

/*-----------------------------------------------------------
 * 事件组 & 流缓冲
 *----------------------------------------------------------*/
#define configUSE_EVENT_GROUPS                  1
#define configUSE_STREAM_BUFFERS                1

#endif // FREERTOS_CONFIG_H