我目前正在使用 STM32F303xx 系列芯片。它们具有核心耦合存储器 (CCMRAM),可以执行与 F4 系列上的 CCM 不同的代码。我已将关键例程(例如 ISR)放入 CCM 并想知道什么是最有效的设置,将中断向量表也放入 CCM 或普通 SRAM 中,但我有点坚持那个。任何人都可以向我暗示正确的方向吗?
我不确定它是否直接对代码执行性能产生任何影响,但关键在于总线架构、数据和代码的放置位置,以及是执行 DMA 操作还是写入闪存。
闪存、SRAM 和 CCM 各自位于单独的总线上,在许多 STM32 部件上是 SRAM,对于较大的部件,闪存进一步分为多个总线。因此,当从一个执行代码时,可以从另一个并发获取数据。但是,如果您将数据和指令放在同一个内存中,则指令和数据访问必须串行化。同样,如果您对内存进行 DMA 操作,这也会影响数据访问和从同一内存中获取指令。
在大多数情况下,由于闪存加速器,STM32 上片上闪存的代码执行延迟很少或没有延迟,因此将代码放入 CCM 可能根本没有什么好处。在对闪存进行编程时需要执行的代码是一个例外,因为闪存写/擦除操作会在 STM32 上使总线停顿很长时间。
为了提高性能,最好将其安排为 DMA、取指令和数据访问大部分都发生在不同的总线上。还要记住,您不能通过 DMA 或位带访问 CCM。因此,CCM 适用于指令或数据(其中不需要 DMA 或位带访问),但理想情况下不能同时使用。
当 CCM 或 SRAM 用于代码时,您会增加将代码放入 RAM 中的链接器/启动复杂性,并且与片上闪存相比,错误代码或安全缺陷可能导致代码损坏,而性能优势很小或没有显着优势. 任何类型的外部存储器都会明显变慢 - 部分原因是 EMIF 的时钟速率,还因为它是所有外部存储器的数据和指令的单一总线。
| 归档时间: |
|
| 查看次数: |
1838 次 |
| 最近记录: |