码迷,mamicode.com
首页 > 其他好文 > 详细

ARM 内核中实现原子操作

时间:2021-06-16 18:05:50      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:god   png   info   compiler   编译   https   arm   crazy   内存   

前言

起因是学习 crazyflie 的代码中出现 **__ sync_fetch_and_add ** 这个操作比较好奇,查阅后发现 __sync_fetch_and_add 有一些列的操作函数用于实现原子操作 **fetch **是先返回然后再进行 add 操作

技术图片

技术图片

其他同类型的原子操作函数,gcc 支持的 keil 和 **iar ** 是否支持有待查证。

原子操作的定义

补充一下原子操作的定义,最早了解这个概念是在以前学习 RTOS 的时候接触到
技术图片

ARM中的硬件指令支持

相看具体实现但是尝试汇编之后还是看不到实现

技术图片

后面在@穿越、寂寞≯ 兄的提醒下使用 gcc 在线编译平台编译后就可以看见具体实现的汇编指令

Compiler Explorer (godbolt.org)

技术图片

技术图片

关键就是使用 ldrexstrex 实现内存的排他性访问从而实现原子操作

具体参考

ARM平台下独占访问指令LDREX和STREX的原理与使用详解_Roland_Sun的专栏-CSDN博客

ARM 内核中实现原子操作

标签:god   png   info   compiler   编译   https   arm   crazy   内存   

原文地址:https://www.cnblogs.com/neriq/p/14888281.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!