ARM 不关中断操作内存,互斥存取,读-改-写。
成对出现读&写,读打上标记,写去除标记。(另 clrex 也可以清除标记,在多核处理器中和 strex 作用略有不同)
本身不能互斥操作,操作过程被打断会返回 1 进行通知,可以再次操作。
参考文档:
RTX4 源码;
dui0552a_cortex_m3_dgug;
#if ((__TARGET_ARCH_7_M || __TARGET_ARCH_7E_M) && !NO_EXCLUSIVE_ACCESS)
#define __USE_EXCLUSIVE_ACCESS
#else
#undef __USE_EXCLUSIVE_ACCESS
#endif
#ifdef __USE_EXCLUSIVE_ACCESS
#define rt_inc(p) while(__strex((__ldrex(p)+1),p))
#define rt_dec(p) while(__strex((__ldrex(p)-1),p))
#else
#define rt_inc(p) __disable_irq();(*p)++;__enable_irq();
#define rt_dec(p) __disable_irq();(*p)--;__enable_irq();
#endif