簡體   English   中英

核心耦合存儲器(CCM),中斷和STM32F3xx

[英]Core Coupled Memory (CCM), Interrupts and STM32F3xx

我目前正在使用STM32F303xx系列芯片。 它們具有核心耦合存儲器(CCMRAM),與F4系列上的CCM不同,它允許執行代碼。 我已將關鍵例程(例如ISR)放入CCM,並想知道什么是最有效的設置,將中斷向量表也放入CCM或普通SRAM中,並且有點卡在那個上面。 任何人都可以向我暗示正確的方向嗎?

我不確定它直接對代碼執行性能有任何影響,但關鍵是總線架構,放置數據和代碼的位置,以及是執行DMA操作還是寫入閃存。

閃存,SRAM和CCM都在一個單獨的總線上,在SRAM的許多STM32部件上,對於較大的部件,閃存進一步分為多個總線。 因此,當從一個代碼執行代碼時,可以從另一個代碼同時獲取數據。 但是,如果將數據和指令放在同一存儲器中,則必須序列化指令和數據訪問。 同樣,如果您對內存進行DMA操作,也可能同時影響數據訪問和從同一內存中獲取指令。

在大多數情況下,由於閃存加速器 ,STM32上的片上閃存的代碼執行很少或沒有延遲,因此將代碼放入CCM可能幾乎沒有什么好處。 編程閃存時需要執行的代碼是一個例外,因為閃存寫/擦除操作會在STM32上使總線停頓很長一段時間。

對於性能,最好安排它,使得DMA,指令獲取和數據訪問大部分都發生在不同的總線上。 還要記住,您不能對CCM進行DMA或位帶訪問。 因此CCM適用於指令或數據(不需要DMA或位帶訪問),但理想情況下不能同時進行。

當CCM或SRAM用於代碼時,您會增加鏈接器/啟動復雜性,將代碼放入RAM中,並且與片上閃存相比,錯誤代碼或安全漏洞可能導致代碼損壞,幾乎沒有或沒有顯着的性能優勢。 任何類型的外部存儲器都會明顯變慢 - 部分原因在於EMIF的時鍾速率,還因為它是用於所有外部存儲器的數據和指令的單個總線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM