关于STM32 ARM Cortex M LDRB指令

About STM32 ARM Cortex M LDRB instruction

我试图了解当 STM32H7 (Cortex M7) 执行 LDRB 指令时数据总线上发生了什么(为简化起见,假设缓存被禁用)。是否有 32 位内存访问权限和 4 个字节中的 3 个被丢弃?它取决于内存的类型吗?如果代码在连续地址上执行四个 LDRB,它与执行单个 32 位 LDR 相比如何(在周期数方面)?

Cortex-M7 有一个 64 位 AMBA4 AXI 接口。

这只是部分答案,因为该数据总线将连接到 STM32H7 某处的内存,但我们可以假设内存的接口至少与总线一样宽。内存控制器很可能会从内存中读取整个宽度(但可能不会以核心频率读取)。

读取的数据将返回到总线上,无论握手需要多少个周期,都会占用读取通道。对于字节读取,返回的数据应该是一个字节。

执行 4 字节读取可以避免外部存储器访问,但会使总线忙于 4 次传输。总线可以支持多个未完成的传输(受限于芯片设计,而不是处理器)。在架构上,处理器 允许 合并传输(但这自然会由您已禁用的缓存完成)。

在一阶近似下,您可以在与执行 4 字节读取相同的周期数中加载 8 个 32 位寄存器,因为有一个 64 位 AXI。实际上,它可以更快,因为您可以使用单个 LDM 指令而不是 4 LDRB,并且指令提取共享同一总线。

需要注意的是,存储是 因为很难构建忽略部分写入数据的逻辑,而合并写入相当容易。

(这是一个 'generic' 的答案,而不是 M7 micro-architecture 的反映,你需要自己做基准测试来理解你的问题的详细含义。