ARM Cortex-M 内存屏障与原子操作详解

引言 在多任务和中断驱动的嵌入式系统中,数据竞争和内存访问顺序问题是导致系统不稳定的常见原因。本文深入探讨 ARM Cortex-M 处理器的内存模型、原子操作实现机制,以及内存屏障指令(DMB/DSB/ISB)的实际应用场景。 1. ARM Cortex-M 内存模型 1.1 弱内存序(Weak Memory Ordering) ARM Cortex-M 采用弱内存序模型,这意味着: CPU 可以重新排序内存访问指令以提高性能 不保证程序中的内存访问顺序与实际执行顺序一致 多核或多主设备系统中可能出现数据不一致 示例问题: // 线程 1 flag = 1; // 步骤 1 data = 0x1234; // 步骤 2 // 线程 2 while (flag == 0); // 等待 flag read = data; // 期望读到 0x1234 问题:由于内存重排序,线程 2 可能在 data 写入之前就读到 flag==1,导致读到旧数据。 1.2 Cortex-M 内存类型 内存类型 特性 使用场景 Normal Memory 可缓存、可缓冲 SRAM、外部 RAM Device Memory 不可缓存、顺序访问 外设寄存器 Strongly Ordered 严格顺序、无缓冲 共享内存区域 2. 原子操作实现原理 2.1 什么是原子操作? 原子操作是不可中断的操作,在执行过程中不会被其他任务或中断打断。 ...

March 31, 2026 · 3 min · Tech Snippets