[STM32H7]

创建任务并调度

[复制链接]
662|8
手机看帖
扫描二维码
随时随地手机跟帖
米多0036|  楼主 | 2024-12-13 11:38 | 显示全部楼层 |阅读模式
TE, ID, UL, or, REA, ar
任务创建
使用 xTaskCreate 创建任务,并指定任务函数、优先级、栈大小等。
示例代码:
c
复制代码
void Task1(void *pvParameters)
{
    for (;;)
    {
        // 用户任务逻辑
        vTaskDelay(1000 / portTICK_PERIOD_MS); // 延迟1秒
    }
}

void Task2(void *pvParameters)
{
    for (;;)
    {
        // 另一个任务逻辑
    }
}

int main(void)
{
    HAL_Init();
    SystemClock_Config();

    // 创建任务
    xTaskCreate(Task1, "Task1", 128, NULL, 1, NULL);
    xTaskCreate(Task2, "Task2", 128, NULL, 2, NULL);

    // 启动调度器
    vTaskStartScheduler();

    for (;;); // ***不会到达这里
}
任务优先级
任务优先级从0开始,数值越大优先级越高。
高优先级任务可以抢占低优先级任务。

使用特权

评论回复
是你的乱码| | 2024-12-31 00:41 | 显示全部楼层
在 FreeRTOS 中,任务是通过 xTaskCreate 函数来创建的。xTaskCreate 函数不仅定义了任务的执行函数,还指定了任务的优先级、栈大小和其他参数。

使用特权

评论回复
是你的乱码| | 2024-12-31 00:41 | 显示全部楼层
栈大小要根据任务的复杂性和局部变量的数量来设置。如果任务栈太小,可能导致栈溢出

使用特权

评论回复
tpgf| | 2025-1-4 11:08 | 显示全部楼层
我们需要定义任务函数,这是实际运行的任务代码。

使用特权

评论回复
heimaojingzhang| | 2025-1-4 17:59 | 显示全部楼层
int main(void) {
    // 初始化硬件和FreeRTOS内核
    // ...

    // 创建任务
    xTaskCreate(
        vTaskFunction,        // 任务函数
        "Task",               // 任务名称
        configMINIMAL_STACK_SIZE, // 堆栈大小
        NULL,                 // 传递给任务函数的参数
        tskIDLE_PRIORITY + 1, // 任务优先级
        NULL                  // 任务句柄(可选)
    );

    // 启动调度器
    vTaskStartScheduler();

    // 如果调度器启动失败,执行以下代码
    for (;;);
}


使用特权

评论回复
keaibukelian| | 2025-1-4 19:47 | 显示全部楼层
vTaskStartScheduler用于启动FreeRTOS调度器,开始任务调度

使用特权

评论回复
paotangsan| | 2025-1-4 21:33 | 显示全部楼层
xTaskCreate函数是否可以一次性创建多个任务呢

使用特权

评论回复
renzheshengui| | 2025-1-4 23:21 | 显示全部楼层
确保你的系统时钟已经正确配置,因为FreeRTOS依赖于系统时钟来进行时间管理

使用特权

评论回复
wowu| | 2025-1-5 10:59 | 显示全部楼层
如果你使用的是某些特定的硬件平台,可能需要进行额外的初始化工作,例如设置中断优先级、配置GPIO等

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

131

主题

1417

帖子

0

粉丝