#Task-Priority
优先级范围: FreeRTOS 的任务优先级由
configMAX_PRIORITIES定义,数值越大优先级越高。优先级从
0开始,默认最低优先级为0。高优先级任务会抢占低优先级任务。
调度规则:
使用抢占式调度(Preemptive Scheduling)。
同优先级任务按时间片轮转运行(需启用时间片调度)。
注意事项:
不建议将所有任务设置为相同优先级。
系统空闲任务(Idle Task)优先级始终为
0。
#Task-Stack
堆栈大小: 每个任务在创建时需要分配独立堆栈,大小以字(Word)为单位指定。
在 32 位系统中,1 字 = 4 字节。
堆栈大小需合理设置,避免溢出或浪费内存。
堆栈溢出检测: FreeRTOS 提供机制检测堆栈溢出,例如通过
uxTaskGetStackHighWaterMark()查看剩余堆栈空间。堆栈分配方式: 支持多种动态内存管理方式(如
heap_1.c,heap_4.c),影响内存分配效率和碎片化程度。
#xTaskCreatePinnedToCore
函数原型
BaseType_t xTaskCreatePinnedToCore(
TaskFunction_t pvTaskCode, // 任务入口函数
const char * const pcName, // 任务名称
configSTACK_DEPTH_TYPE usStackDepth, // 堆栈深度
void *pvParameters, // 参数
UBaseType_t uxPriority, // 优先级
TaskHandle_t *pxCreatedTask, // 返回的任务句柄
BaseType_t xCoreID // 绑定的核心 ID
);参数详解
pvTaskCode:任务入口函数。
pcName:任务名称,用于调试。
usStackDepth:堆栈大小(字为单位)。
pvParameters:传递给任务的参数。
uxPriority:任务优先级。
pxCreatedTask:返回的任务句柄。
xCoreID:绑定的核心 ID(如
0、1或tskNO_AFFINITY)。
返回值
成功返回
pdPASS,失败返回pdFAIL。