Embedded 在微控制器的环境中,什么是原子操作?

Embedded 在微控制器的环境中,什么是原子操作?,embedded,microcontroller,Embedded,Microcontroller,在微控制器的上下文中,什么是“原子操作” 我正在学习TI F28027单片机 。这意味着什么?我不熟悉特定的MCU,但通常情况下,原子操作是指修改内存位置的操作,没有其他上下文、硬件或软件可以中断读和写子操作。这保证了没有其他任何东西可以改变操作下的内存位置 例如,增量运算符必须读取目标内存位置,将其添加到值中,然后写回同一位置。如果它不是原子的,那么其他的东西可能会在它们之间写入相同的位置。然后,当发生回写时,中间写入将丢失 那么,什么样的其他上下文被原子操作阻止了呢 ISR写入内存的中断

在微控制器的上下文中,什么是“原子操作”

我正在学习TI F28027单片机


。这意味着什么?

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

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

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

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

阅读维基百科上的文章,了解“原子”的一般含义。下面是一个简单的摘录:

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

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


考虑咨询更多帮助。

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


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

原子(希腊语)意味着不能/不应该被分割成更多的部分。在计算中,原子指令/操作意味着在执行时不能/不应该中断(其较低级别的步骤应分开),或者存在不必要的副作用的风险。中断禁用是强制一系列指令像1一样运行的最粗糙的方法。在RTOS/多任务下,访问同一变量的两个或多个任务需要在原子操作中读取/更新变量。这是通过信号量实现的,或者通过确保不可能同时访问来实现的。简单、通用的定义:如果你反汇编一条高级语言指令,它只生成一条汇编指令,那么它就是原子指令。如果它产生一条以上的汇编指令,它就不是原子的。@Lundin不完全是原子的。有些体系结构的某些指令是可中断的。这不是特定于内存操作的。这是任何无法中断的操作。