什么是"原子操作"在微控制器的背景下?
我正在研究TI F28027 MCU。
答案 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,然后回写到同一位置。如果它不是原子的,那么其他东西可能写入其间的相同位置。然后,当发生回写时,中间写入将丢失。
那么什么样的其他上下文被原子操作阻止了?
答案 2 :(得分:1)
它通常与需要/需要两个(多个)访问的资源的资源或功能有关,并且要求这两个访问不被其他一些不相关的访问中断。因此,读 - 修改 - 写,或测试和集是两个常见的例子。
如果您没有任何原子或您需要的原子,那么您在软件中必须确保两个访问不会被中断或干扰,如果不可能,那么您需要其他解决方案。硬件通常会为您提供至少一个(如测试和设置),您可以从中创建软件中的其他受保护功能。例如,软件解决方案可能是使用中断服务程序保护前台任务,如果中断发生在两次访问之间(测试和设置,读 - 修改 - 写读和写是两次访问)那么isr可能在第一次读取之后但在下一次写入之前修改数据,使第一次读取现在变得陈旧/不正确。因此,在保护自己免受中断时,通常会暂时禁用中断,然后重新启用。让硬件执行此操作可确保即使发生中断,或者即使有其他外设具有访问权限,也会保持关闭状态,和/或根据优先级保持关闭状态,因此原子操作可以不间断地进行。 / p>