【发布时间】:2021-09-16 04:35:53
【问题描述】:
我目前正在研究诸如 RAM/ROM/Stack/Heap 和数据段等主题。 我正在查看 ARM Cortex-M3 内存映射并看到标有“外部 RAM”的区域。
根据随机Cortex-M3 STM32 MCU的data sheet,外部RAM区域从0x60000000-0x9FFFFFFF映射,所以它相当大!
我找不到关于该区域实际使用方式的明确答案。
我想你会有一个外部SRAM,你会在两个选项之间进行选择。
- (1) 通过 SPI 接口读取并放入本地缓冲区(堆栈),然后将该本地缓冲区加载到外部 ram 区域。这个选项似乎有很多负面后果,例如如果请求的数据非常大,会占用 CPU 并临时增加堆栈。
- (2) 利用 DMA 并从 SPI 接口传输到外部 ram 区域。
现在我就想不通了,为什么要把数据映射到这个特定的地址范围,有什么好处,为什么不直接把数据放到那个巨大的内存区域呢?
现在我问这个问题是因为我有一种轻微的感觉,我完全错过了外部 RAM 区域的真正含义。
-编辑- 在链接到 STM32 器件的数据手册中,存储区域“外部 RAM”被标记为保留。我的结论是 ARM 列出的内存区域显示了 32 位 MCU 的全部潜力,因为我错误地指出外部 RAM 区域“非常大!”并不一定意味着这是该区域的“真实”大小,即使使用它,也取决于供应商在 MCU 硬件中可以实现的物理性能,我想他们会限制硬件能力以在价格、功率方面具有竞争力消费等
【问题讨论】:
-
我不明白这个问题。 “该区域的实际使用方式”取决于您。并不是有一个操作系统可以为您决定这一点。可能因为这种误解,这两个选项也没有意义。此外,链接的数据表甚至没有提到“外部 RAM”。
-
AFAIK,有一些用于外部存储器的标准接口,您的 uC 需要特定的硬件来支持它们。一旦在初始化期间正确配置,您就可以像访问内部内存位置一样访问它们,该过程对用户变得透明。
-
@MSalters 我假设不同的供应商会遵循这种布局developer.arm.com/documentation/dui0552/a/…
-
@Sorenp:嗯,这也描述了一个 512 MB 的嵌入式 SRAM 区域,这比您的设备实际拥有的 20 kB 多 25000 倍。 Linus Torvalds 理所当然地抱怨 ARM 缺乏标准化。两个 CPU 被称为“ARM”这一事实主要意味着两个制造商向 ARM,Ltd 支付版税,这并不意味着这两个 CPU 在任何方面都兼容,当然也不是我们对 PC 的期望。
-
@MSalters 好的,我实际上认为这是 CMSIS 的标准格式 :) 很高兴知道,谢谢!既然您提到了,在我所知道的任何设备中,SRAM 绝对不是 512 MB。我认为 arm 显示的内存映射是 32 位系统 0x0000 0000 - 0xFFFF FFFF 的全部潜力。这样特定区域被定义为一些基地址 + 比如说 20kB 或在小型 MCU 上物理上可能的任何东西。
标签: embedded stm32 cortex-m3 memory-mapping