标签:god png info compiler 编译 https arm crazy 内存
起因是学习 crazyflie 的代码中出现 **__ sync_fetch_and_add ** 这个操作比较好奇,查阅后发现 __sync_fetch_and_add 有一些列的操作函数用于实现原子操作 **fetch **是先返回然后再进行 add 操作
其他同类型的原子操作函数,gcc 支持的 keil 和 **iar ** 是否支持有待查证。
补充一下原子操作的定义,最早了解这个概念是在以前学习 RTOS 的时候接触到
相看具体实现但是尝试汇编之后还是看不到实现
后面在@穿越、寂寞≯ 兄的提醒下使用 gcc 在线编译平台编译后就可以看见具体实现的汇编指令
Compiler Explorer (godbolt.org)
关键就是使用 ldrex 和 strex 实现内存的排他性访问从而实现原子操作
具体参考
ARM平台下独占访问指令LDREX和STREX的原理与使用详解_Roland_Sun的专栏-CSDN博客
标签:god png info compiler 编译 https arm crazy 内存
原文地址:https://www.cnblogs.com/neriq/p/14888281.html