入门RTOS第四篇(多个任务使用一个函数)

多个任务使用同一个函数,怎么体现他们的差别?

1.栈不同

2.创建任务时可以传入不同的参数

下面是一个使用相同任务函数创建多个任务的框架示例,以及对它的解释:

#include "FreeRTOS.h"
#include "task.h"

// 任务函数原型,接受一个指向参数的指针
void vCommonTaskFunction(void *pvParameters);

// 任务参数结构体
typedef struct {
    int taskNumber;
} TaskParams_t;

// 任务函数实现
void vCommonTaskFunction(void *pvParameters) {
    TaskParams_t *pxParams = (TaskParams_t *)pvParameters;
    for (;;) {
        // 使用参数执行任务特定的操作
        vTaskDelay(pdMS_TO_TICKS(1000)); // 示例:每个任务延迟1秒
        printf("Task %d is running.\n", pxParams->taskNumber);
    }
}

// 主函数
int main(void) {
    // 任务参数
    TaskParams_t Task1Params = { .taskNumber = 1 };
    TaskParams_t Task2Params = { .taskNumber = 2 };

    // 创建任务
    xTaskCreate(vCommonTaskFunction, "Task 1", configMINIMAL_STACK_SIZE, &Task1Params, tskIDLE_PRIORITY, NULL);
    xTaskCreate(vCommonTaskFunction, "Task 2", configMINIMAL_STACK_SIZE, &Task2Params, tskIDLE_PRIORITY, NULL);

    // 启动调度器
    vTaskStartScheduler();

    // 如果调度器启动,将永远不会到达这里
    for (;;);
    return 0;
}

解释

  1. 任务函数vCommonTaskFunction是所有任务共享的任务函数。它接受一个void*类型的参数,这个参数指向一个TaskParams_t结构体,里面包含了任务特定的参数(在这个例子中是taskNumber)。

  2. 任务参数结构体TaskParams_t是一个自定义的结构体,用于传递任务特定的参数。在这个例子中,它包含一个taskNumber成员,用于区分不同的任务。

  3. 创建任务:在main函数中,我们为两个任务创建了两个不同的TaskParams_t实例,分别为Task1ParamsTask2Params,并给它们设置了不同的taskNumber。然后,我们使用xTaskCreate函数创建了两个任务,都指向同一个任务函数vCommonTaskFunction,但是传递了不同的参数。

  4. 启动调度器:使用vTaskStartScheduler函数启动FreeRTOS的调度器,开始执行创建的任务。

  5. 任务执行:在vCommonTaskFunction中,每个任务都会无限循环地执行。任务会根据传递的参数执行特定的操作,并打印出任务编号。vTaskDelay函数用于让任务延迟一段时间,模拟任务的工作。

通过这种方式,你可以使用同一个任务函数创建多个任务,并通过传递不同的参数来控制每个任务的行为。这种模式在需要创建大量相似任务时非常有用,可以减少代码的重复,并提高代码的可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

No Bugs ToDay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值