#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
);

参数详解

  1. pvTaskCode:任务入口函数。

  2. pcName:任务名称,用于调试。

  3. usStackDepth:堆栈大小(字为单位)。

  4. pvParameters:传递给任务的参数。

  5. uxPriority:任务优先级。

  6. pxCreatedTask:返回的任务句柄。

  7. xCoreID:绑定的核心 ID(如 01tskNO_AFFINITY)。

返回值

  • 成功返回 pdPASS,失败返回 pdFAIL


本站由 小马 使用 Stellar 创建。