ARM 内核中实现原子操作
前言
起因是学习 crazyflie 的代码中出现 **__ sync_fetch_and_add ** 这个操作比较好奇,查阅后发现 __sync_fetch_and_add 有一些列的操作函数用于实现原子操作 **fetch **是先返回然后再进行 add 操作
其他同类型的原子操作函数,gcc 支持的 keil 和 **iar ** 是否支持有待查证。
原子操作的定义
补充一下原子操作的定义,最早了解这个概念是在以前学习 RTOS 的时候接触到
ARM中的硬件指令支持
相看具体实现但是尝试汇编之后还是看不到实现
后面在@穿越、寂寞≯ 兄的提醒下使用 gcc 在线编译平台编译后就可以看见具体实现的汇编指令
Compiler Explorer (godbolt.org)
关键就是使用 ldrex 和 strex 实现内存的排他性访问从而实现原子操作
具体参考