首页 > 解决方案 > FreeRTOS:如何交替执行 2 个任务

问题描述

我想在 ESP32 上创建 2 个任务,一个做一些计算(计算 xy 坐标数组),一个在 TFT 显示器上显示曲线。第一个任务将填充坐标数组,然后告诉第二个任务更新显示。当显示被更新时,第一个任务可以开始计算下一个坐标数组。

每个任务将在不同的核心上执行。而且我打算使用2组数组,所以内存访问没有问题。

我的问题是:我应该使用什么机制来确保仅在 task1 完成时启动 task2,然后在 task2 开始后启动 task1?是信号量还是直接通知?

谢谢你的帮助。

标签: esp32freertos

解决方案


我会使用队列:您设置两个任务,任务 1 计算坐标,完成后将它们推送到队列中。

任务 2 侦听队列,每次有一组新坐标进入时,它都会更新显示,然后返回检查队列。你可以让它阻塞,即如果没有其他工作任务2需要做,则等待新数据。

您甚至不必等到任务 1 完成——您可以在显示屏仍在工作时开始更新它。如果这是一个问题,那么在完成之前不要将数据放入队列中。


推荐阅读