我想创建两个在 FreeRTOS 中同时运行的任务。第一个任务将处理 LED,第二个任务将监视温度。 我有两个问题:
- 这段代码会创建两个同时运行的任务吗?
如何在任务之间发送数据,例如:如果温度超过 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/