在微控制器的背景下,什么是原子操作?

时间:2015-12-05 04:08:01

标签: embedded microcontroller

什么是"原子操作"在微控制器的背景下?

我正在研究TI F28027 MCU。

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

3 个答案:

答案 0 :(得分:7)

阅读atomic operations上的维基百科文章,了解“原子”的含义。以下是简要的摘录:

  

在并发编程中,操作(或一组操作)是   原子的,可线性化的,不可分割的或不可中断的   系统的其余部分即时发生。原子性是一种   保证与并发进程隔离。

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

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

答案 1 :(得分:1)

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

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

那么什么样的其他上下文被原子操作阻止了?

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

答案 2 :(得分:1)

它通常与需要/需要两个(多个)访问的资源的资源或功能有关,并且要求这两个访问不被其他一些不相关的访问中断。因此,读 - 修改 - 写,或测试和集是两个常见的例子。

如果您没有任何原子或您需要的原子,那么您在软件中必须确保两个访问不会被中断或干扰,如果不可能,那么您需要其他解决方案。硬件通常会为您提供至少一个(如测试和设置),您可以从中创建软件中的其他受保护功能。例如,软件解决方案可能是使用中断服务程序保护前台任务,如果中断发生在两次访问之间(测试和设置,读 - 修改 - 写读和写是两次访问)那么isr可能在第一次读取之后但在下一次写入之前修改数据,使第一次读取现在变得陈旧/不正确。因此,在保护自己免受中断时,通常会暂时禁用中断,然后重新启用。让硬件执行此操作可确保即使发生中断,或者即使有其他外设具有访问权限,也会保持关闭状态,和/或根据优先级保持关闭状态,因此原子操作可以不间断地进行。 / p>