两个任务之间的同步

标签 synchronization embedded firmware

这实际上是嵌入式系统中固件的设计问题 我有两个独立执行的 ISR(具有相同的优先级)。 这些 ISR 在硬件生成数据时触发。 我想要一个必须在task1和task2之间同步的机制。任务 2 必须知道在任务 1 中计算的某些值,然后在计算任务 2 中的某些值时必须考虑这些值。 我没有要使用的操作系统原语,即系统没有任何操作系统。 Task1 在 ISR1 的上下文中执行,task2 在 ISR2 的上下文中执行。 我们使用的处理器是 STMicroelectronics 32 Controller

编辑:附加信息 处理器连接到某些 IP,当它们准备好数据时触发中断。这些 IP 充当输入流帧数据的累加器类型。

最佳答案

我不会在中断上下文中进行繁重的处理,只需读取数据并设置一个标志。

然后可以在主循环中的简单调度程序中检查标志,以根据需要执行任务。所以任务不能互相打断,也不能看到其他任务的输出不一致。

一个任务也可以设置这样一个标志来激活另一个任务。例如。 Task1 可以激活 Task2,因为 Task2 需要来自 Task1 的值。

对于在 ISR 中读取的数据,您需要一些缓冲区。取决于传入数据的时间,可能是环形缓冲区或双缓冲区。

关于两个任务之间的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1221470/

相关文章:

php - 如何将 postgresql 数据库与 mysql 数据库中的数据同步?

embedded - 保证 TCP 数据包大小

embedded - 使用 Fritzing 运行 Arduino 草图

c++ - 为什么虚拟方法会生成对 _sbrk 的 undefined reference ?

php - 如何提取 dd-wrt ​​固件镜像进行开发?

c - 是否可以创建支持多种不同微 Controller 的 PIC 固件二进制文件?

Java同步外部文件

c# - 使用进程间同步对象同步 2 个进程 - Mutex 或 AutoResetEvent

asynchronous - 如何在 UWP 中创建同步新闻源

c - 功能根本没有执行或没有正确执行