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