STM32G4芯片內不同空間運行代碼的速率比較
以下文章來(lái)源于茶話(huà)MCU ,作者M(jìn)iler
最近有人問(wèn)起程序在STM32G4片內不同存儲空間運行的速度差異。說(shuō)實(shí)在的,這個(gè)很難說(shuō)死或說(shuō)出個(gè)絕對的數據,畢竟結果除了跟執行代碼的存放空間有關(guān)外,還跟代碼本身的內容、程序邏輯、編譯工具及優(yōu)化等級等都息息相關(guān)。我這里設計了一個(gè)小測試程序做了下簡(jiǎn)單比較,以供參考。
我們不妨先看看STM32G4系列內部系統框架圖。下圖是STM32G4芯片的系統框架圖,我將測試程序放在圖中三個(gè)黃色高亮位置來(lái)運行。
我將程序分別放在CCM、通用SRAM1、Flash區來(lái)運行,基于不同的配置,即是否開(kāi)啟指令預取、指令/數據Cache等,得到下面一個(gè)表格。代碼所在區域欄里的數據代表各種情形下的執行時(shí)間。
從上面表格可以看出,相同配置下在CCM里執行速率總是最高。
至于代碼放在SRAM和Flash里的執行速率,不同配置下結果并不太一樣。比如在開(kāi)啟prefetch和使能指令/數據Cache時(shí),即第(1)種配置條件下,在SRAM里運行的速率是最慢的,只有在上圖中的第(3)種情形下,代碼在SRAM里運行速率相比在FLASH里運行才凸顯出明顯優(yōu)勢。
對于STM32G4系列芯片,芯片復位后其Prefetch功能是關(guān)閉的,而指令/數據Cache是開(kāi)啟的,即復位后默認為上面的第(2)種情形。結合上圖,我們不難看出情形(1)與情形(2)的差別不大,至少不顯著(zhù)。
上面數據雖只是基于特定代碼測試而得,但作為基本的方向性判斷還是可以的。
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。
物聯(lián)網(wǎng)相關(guān)文章:物聯(lián)網(wǎng)是什么