Pre ARMv6 MPUs/MCUs 有SWP指令(例如良好的 ole 和仍然有效的 ARM7TDMI)。在 ARMv6 架構中LDREX/ STREXpair 已經被引入和SWP移除。然而,除了一個例外——ARMv6-M (Cortex-M0/M0 ) 既沒有LDREX/STREX也沒有SWP. 奇怪的。
那么如何在這個平臺上實作原子操作/同步原語呢?以老式方式使用“啟用中斷”/“禁用中斷”?還是我錯過了什么?例如 ChromiumOS 使用老式的方法。
禁用中斷將適用于單核 MCU,但多核 MCU呢?這種方法是否適用于例如RP2040(雙核 Cortex-M0 ,Raspberry Pi Pico的核心)?
uj5u.com熱心網友回復:
這個問題的不幸答案是:你沒有。在 ARM Cortex-M0/M0 上無法進行原子讀/修改/寫操作。如果您需要此類功能,則必須依賴專用硬體。
例如,RP2040 為外圍設備上的原子 RMW 操作提供了特殊的記憶體區域。它還提供了一個特殊的自旋鎖外設,用于兩個內核之間的同步以及用于內核間通信的硬體 FIFO。所有這些都是必需的,因為 Cortex-M0 內核本身不提供任何原子記憶體操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528227.html
標籤:部件手臂原子多核皮质-m
