首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在多核Cortex-M0/M0+ (无SWP,无LDREX/STREX)上实现原子操作?

如何在多核Cortex-M0/M0+ (无SWP,无LDREX/STREX)上实现原子操作?
EN

Stack Overflow用户
提问于 2022-11-06 04:59:58
回答 1查看 112关注 0票数 2

Pre ARMv6 MPU/MCU具有SWP指令(例如,良好的ole和仍然活着的ARM7TDMI)。在ARMv6体系结构中,引入了LDREX/STREX对,删除了SWP。然而,除了一个例外- ARMv6-M (Cortex-M0/M0+)没有LDREX/STREXSWP。真奇怪。

那么如何在这个平台上实现原子操作/同步原语呢?用老式的方式使用“启用中断”/“禁用中断”?还是我漏掉了什么?例如,ChromiumOS使用老式的方法

禁用中断将在单核MCU、上工作,但多核MCU怎么办?这个方法能在RP2040 (双核覆盆子皮皮的心脏)上工作吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-06 11:28:57

这个问题的不幸答案是:你没有。在ARM Cortex-M0/M0+上,原子读/修改/写操作是不可能的。如果您需要这样的功能,您将不得不依赖特殊用途的硬件。

例如,RP2040为外围设备上的原子RMW操作提供特殊的内存区域。它还为两个核之间的同步提供了一个特殊的自旋锁外设,以及用于内核间通信的硬件FIFO。所有这些都是必需的,因为Cortex-M0+核本身不提供任何原子内存操作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74333402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档