打印
[STM32H7]

创建任务并调度

[复制链接]
810|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 | 只看该作者
我们需要定义任务函数,这是实际运行的任务代码。

使用特权

评论回复
5
heimaojingzhang| | 2025-1-4 17:59 | 只看该作者
int main(void) {
    // 初始化硬件和FreeRTOS内核
    // ...

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

    // 启动调度器
    vTaskStartScheduler();

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


使用特权

评论回复
6
keaibukelian| | 2025-1-4 19:47 | 只看该作者
vTaskStartScheduler用于启动FreeRTOS调度器,开始任务调度

使用特权

评论回复
7
paotangsan| | 2025-1-4 21:33 | 只看该作者
xTaskCreate函数是否可以一次性创建多个任务呢

使用特权

评论回复
8
renzheshengui| | 2025-1-4 23:21 | 只看该作者
确保你的系统时钟已经正确配置,因为FreeRTOS依赖于系统时钟来进行时间管理

使用特权

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

使用特权

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

本版积分规则

134

主题

1427

帖子

1

粉丝