内核耦合存储器(CCM),中断和STM32F3xx

时间:2018-10-04 11:12:22

标签: embedded stm32

我目前正在使用STM32F303xx系列芯片。它们具有核心耦合存储器(CCMRAM),与F4系列上的CCM不同,它允许执行代码。我已将关键例程(例如ISR)放入CCM,并想知道哪种方法最有效,将中断向量表也放入CCM或普通SRAM中,并且有点卡在那上面。有人可以向我暗示正确的方向吗?

1 个答案:

答案 0 :(得分:4)

我不确定这直接影响代码执行性能,但关键是总线体系结构,数据和代码的放置位置以及执行DMA操作还是将写入闪存中。

闪存,SRAM和CCM均位于单独的总线上,在SRAM的许多STM32部分上,对于较大的部分,闪存进一步分为多个总线。因此,当从一个执行代码时,可以从另一个同时获取数据。但是,如果将数据和指令放置在同一存储器中,则必须对指令和数据访问进行序列化。同样,如果您有往返于内存的DMA操作,这也可能影响从同一内存进行的数据访问和指令提取。

在大多数情况下,由于 flash加速器,从STM32上的片上闪存执行代码的延迟很少或没有,因此将代码放置在STM32中可能没有什么好处。完全CCM。编程闪存时需要执行的代码是一个例外,因为闪存写/擦除操作使总线在STM32上停滞了很长时间。

出于性能方面的考虑,最好将其安排为使DMA,指令提取和数据访问大部分都发生在单独的总线上。还请记住,您不能通过DMA或位带访问CCM。因此,CCM适用于指令或数据(不需要DMA或位带访问),但理想情况下不能同时使用两者。

将CCM或SRAM用于代码时,您将链接/启动复杂性提高了,将代码放置在RAM中,与错误代码相比,错误代码或安全漏洞导致代码损坏的可能性很小,甚至没有明显的性能优势。芯片闪存。任何形式的外部存储器都将显着变慢-部分原因是因为EMIF的时钟速率,而且还因为它是所有外部存储器的数据和指令总线。