跳转到内容

嵌入式控制系统设计/异步活动

来自维基教科书,开放书籍,开放世界

本章介绍了如何在两个并行运行的活动之间交换数据,或者同步它们的执行。

中断和ISR

[编辑 | 编辑源代码]

中断和ISR(中断服务程序)是异步活动的最底层。所有更高层都是建立在这个基础之上的。在某些情况下,RTOS 将为您处理所有底层细节。

我们在其他章节中更详细地讨论了中断和ISR --

线程共享内存

[编辑 | 编辑源代码]

在两个共享内存的线程之间交换数据...

中等水平

进程间通信

[编辑 | 编辑源代码]

高级(= 通过在独立受保护内存区域中的进程之间异步消息传递进行进程间通信)。

计算机到计算机通信

[编辑 | 编辑源代码]

RPC(远程过程调用)...

软件问题

[编辑 | 编辑源代码]

在机器人中实现软件代码时,同步线程可能存在问题。本节提供了多线程系统中的一些不良编程示例。它以C代码来说明。它们之所以引起关注是因为它是了解由于在更高层面上进行并发工程而导致的问题的第一步。


  • 当一个程序有一个全局变量和同步线程时,线程 1 可能在全局变量被写入之前被中断,而线程 2 可能在旧数据上工作。这可能仍然是可以接受的,但程序的结果不是程序员想要的。



  • 当全局变量在第 4 行和第 8 行之间从正值变为负值时,没有一个条件为真。没有函数调用,这会导致问题。


  • 当两个线程使用相同的资源时,可以使用互斥原则。这可以使用全局变量计数器来实现。当计数器为负数时,一个线程在进入临界区之前被阻塞,而另一个线程仍在执行临界区内的代码。第一个线程设置全局变量,第二个线程使用它进行计算。

如果第一个线程递减计数器,然后被抢占,第二个线程也会递减计数器,并在之后对其进行评估。两个线程都无法继续,因为计数器现在为 -1。在执行的程序中出现了死锁情况。

这个问题也可能出现在更高级别的抽象中。下一节将描述Petri网中的死锁情况。

进一步阅读

[编辑 | 编辑源代码]
华夏公益教科书