什么是微控制器上下文中的原子操作?

What is an atomic operation in the context of microcontrollers?

微控制器中的 "Atomic Operation" 是什么?

正在研究TI F28027单片机

The data sheet says that its operations are atomic。这是什么意思?

我不熟悉那个特定的 MCU,但通常,原子操作是那些修改内存位置的操作,没有其他上下文、硬件或软件可以中断读取和后续写入子操作。这保证了没有其他东西可以从操作中改变内存位置。

例如,增量运算符必须读取目标内存位置,将值加一,然后写回同一位置。如果它不是原子的,其他东西可能会写入两者之间的相同位置。那么回写的时候,中间的写就丢失了。

那么还有哪些上下文会被原子操作阻塞呢?

  • 在 ISR 写入内存的地方中断。
  • DMA 写入 RAM。
  • 多核处理器中的其他内核。

阅读有关 atomic operations 的维基百科文章,了解 "atomic" 的一般含义。摘录如下:

In concurrent programming, an operation (or set of operations) is atomic, linearizable, indivisible or uninterruptible if it appears to the rest of the system to occur instantaneously. Atomicity is a guarantee of isolation from concurrent processes.

TI F28x Piccolo 微控制器系列有一个特殊的原子 ALU(算术逻辑单元),允许以原子方式执行读-修改-写指令。这个C2000 Piccolo Workshop document有一些信息。我相信需要特殊的汇编语法才能利用原子 ALU(第 1-6 页)。我怀疑 TI 的 Code Composer 编译器会尽可能生成原子汇编语法。尽管您编写 C 代码的方式可能会影响编译器的效率(第 3-5 页)。

考虑咨询 TI's E2E Community 以获得更多帮助。

它通常与 require/desire 两次(不止一次)访问的资源或资源功能有关,并且要求这两次访问不会被其他不相关的访问中断。所以读-修改-写,或者测试和设置是两个常见的例子。

如果您没有任何原子或您需要的那种原子,那么您将在软件中必须确保这两个访问在可能的情况下不会被中断或干扰,如果不可能,那么您需要其他解决方案。硬件通常会给你至少一个(比如测试和设置),你可以从中创建软件中的其他受保护功能。例如,软件解决方案可能正在使用中断服务例程保护前台任务,如果中断发生在两次访问之间(测试和设置,读取-修改-写入读取和写入是两次访问),则 isr 可能在第一次读取之后但在接下来的写入之前修改数据,现在进行第一次读取 stale/incorrect。因此,当保护自己免受中断时,您通常会暂时禁用中断,然后重新启用。让硬件这样做可以确保即使发生中断或者即使有其他外围设备可以访问,它也会被推迟,and/or 你会根据优先级被推迟,所以你的原子操作可以不间断地发生.