gpt4 book ai didi

arm - LDREX/STREX 与 Cortex M3 和 M4

转载 作者:行者123 更新时间:2023-12-02 08:06:26 25 4
gpt4 key购买 nike

我正在阅读 LDREX 和 STREX 以实现互斥锁。通过查看 ARM 引用手册:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.100166_0001_00_en/ric1417175928887.html

LDREX/STREX 似乎只存储地址粒度是整个内存空间,因此您最多只能在一个 32 位寄存器上使用 LDREX/STREX。

这是正确的还是我遗漏了什么?如果是这样,这会使 LDREX/STREX 非常有限。我的意思是你可以做一个位映射互斥锁,也许得到 32 个互斥锁。

有人在 M3 或 M4 上使用 LDREX/STREX,如果是,他们如何使用它?

最佳答案

所以我联系了 ARM 并获得了更多信息。例如,如果您这样做,LDREX/STREX 会失败:

LDREX 地址1

LDREX 地址2

STREX 地址1

即使最后一个 LDREX 不是针对 address1 的,到 address1 的 STREX 也会通过。这是正确的,因为 LDREX/STREX 地址解析是整个内存空间。

所以我担心如果你有两个任务:第一个任务在第一个 LDREX 之后被中断,然后第二个任务在第二个 LDREX 到地址 2 之后被中断,然后第一个任务让处理器返回并尝试STREX 会导致问题。但是,ARM 似乎在每次异常/中断进入和退出时都会发出 CLREX。因此,STREX 将失败,因为任务必须通过中断抢占。也就是说,如果 LDREX 和 STREX 之间发生任何中断,则 STREX 将失败。因此,您希望 LDREX 和 STREX 之间的代码尽可能小,以减少中断的机会。此外,如果 STREX 失败,您很可能希望在放弃之前再尝试一次或两次 LDREX/STREX 过程。

这同样适用于单核 M3/M4/M7。

请注意,我发现 CLREX 被清除异常的唯一地方是 ArmV7-M 架构引用手册 A3.4.4 上下文切换支持部分。这份文件比我在网上找到的描述 LDREX/STREX 实际工作原理的任何文件都要好得多。

关于arm - LDREX/STREX 与 Cortex M3 和 M4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51043489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com