esp32 - FreeRTOS:如何交替执行 2 个任务
问题描述
我想在 ESP32 上创建 2 个任务,一个做一些计算(计算 xy 坐标数组),一个在 TFT 显示器上显示曲线。第一个任务将填充坐标数组,然后告诉第二个任务更新显示。当显示被更新时,第一个任务可以开始计算下一个坐标数组。
每个任务将在不同的核心上执行。而且我打算使用2组数组,所以内存访问没有问题。
我的问题是:我应该使用什么机制来确保仅在 task1 完成时启动 task2,然后在 task2 开始后启动 task1?是信号量还是直接通知?
谢谢你的帮助。
解决方案
我会使用队列:您设置两个任务,任务 1 计算坐标,完成后将它们推送到队列中。
任务 2 侦听队列,每次有一组新坐标进入时,它都会更新显示,然后返回检查队列。你可以让它阻塞,即如果没有其他工作任务2需要做,则等待新数据。
您甚至不必等到任务 1 完成——您可以在显示屏仍在工作时开始更新它。如果这是一个问题,那么在完成之前不要将数据放入队列中。
推荐阅读
- c - 是否可以同时使用静态和动态库编译 ac 程序
- python - 计算中的不一致 - Python & numpy
- java - 部署JAR文件后更新spring boot静态资源
- javascript - Javascript 中的有效注释
- linux - “0/1 * * * *”的时间表在kubernetes cron作业中是什么意思
- flutter - Flutter google_sign_in package 登录问题,PlatformException
- php - Wordpress - 子主题不会在新的 index.php 上加载我的 CSS
- reactjs - 错误:应用程序(...):渲染没有返回任何内容。这通常意味着缺少返回语句
- swift - 如何从 macOS 应用程序中的文件系统读取图像
- unity3d - 使用 Hololens 1 和 Optitrack Trio bar 匹配对象位置和方向