我很感兴趣,因为这个值会影响我想要使用(很棒的)ldrex/strex
同步原语的数据结构在内存中的位置。
ARMv7-M体系结构参考说:
标记的内存块的大小称为Exclusives保留颗粒Exclusives保留颗粒是由IMPLEMENTATION定义的介于:
- 一个单词,在a==2的实现中
- 512个字,在a==11的实现中
因此,对于STM32F407这样的给定实现,我应该能够找到所使用的值。但我不能,在我查阅的各种文件中。
有人知道吗?还有,你是怎么找到的?
STM32F407有一个Cortex-M4内核,这意味着ERG的大小实际上是4GB。
来自Cortex-M4 TRM:
处理器内的本地监视器已被构造为不保存任何物理地址,而是将任何访问视为与前一个LDREX的地址匹配。这意味着所实现的互斥保留颗粒是整个内存地址范围。
STM32F407 TRM没有提到任何关于实现外部监视器的系统的内容,所以我认为它没有。如果没有其他CPU进行同步,那也没什么大不了的——我想不出有什么好的理由需要使读-修改-写原子不被DMA覆盖。