gpt4 book ai didi

c - FreeRTOS 并发任务

转载 作者:行者123 更新时间:2023-11-30 20:50:07 25 4
gpt4 key购买 nike

我想创建两个在 FreeRTOS 中同时运行的任务。第一个任务将处理 LED,第二个任务将监视温度。我有两个问题:

  1. 这段代码会创建两个同时运行的任务吗?
  2. 如何在任务之间发送数据,例如:如果温度超过 x 度,则打开 LED?

    void firstTask(void *pvParameters) {
    while (1) {
    puts("firstTask");
    }
    }

    void secondTask(void *pvParameters) {
    while (1) {
    puts("secondTask");
    }
    }

    int main() {
    xTaskCreate(firstTask, "firstTask", STACK_SIZE, NULL, TASK_PRIORITY, NULL);
    xTaskCreate(secondTask, "secondTask", STACK_SIZE, NULL, TASK_PRIORITY, NULL);
    vTaskStartScheduler();
    }

最佳答案

同等优先级的任务按循环调度。这意味着,firstTask 将连续运行,直到其时间片结束或被阻塞,然后 secondTask 将运行完整的时间片或者直到它被阻止然后返回到 firstTask 无限期地重复。

从表面上看,您没有阻塞调用,但如果您为 stdio 实现了 RTOS 感知缓冲 I/O,则有可能在其缓冲区时 puts() 可能会阻塞已满。

单核处理器上的任务永远不会真正并发,而是根据调度算法根据需要调度运行。 FreeRTOS 是一个基于优先级的抢占式调度程序。

您的示例可能会或不会按您的预期运行,但这两个任务都会获得 CPU 时间并以某种方式运行。这可能主要是学术性的,因为这不是 RTOS 的非常实际或有用的用途。

关于c - FreeRTOS 并发任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51233686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com