最近有人問(wèn)起程序在STM32G4片內(nèi)不同存儲(chǔ)空間運(yùn)行的速度差異。說(shuō)實(shí)在的,這個(gè)很難說(shuō)死或說(shuō)出個(gè)絕對(duì)的數(shù)據(jù),畢竟結(jié)果除了跟執(zhí)行代碼的存放空間有關(guān)外,還跟代碼本身的內(nèi)容、程序邏輯、編譯工具及優(yōu)化等級(jí)等都息息相關(guān)。我這里設(shè)計(jì)了一個(gè)小測(cè)試程序做了下簡(jiǎn)單比較,以供參考。
我們不妨先看看STM32G4系列內(nèi)部系統(tǒng)框架圖。下圖是STM32G4芯片的系統(tǒng)框架圖,我將測(cè)試程序放在圖中三個(gè)黃色高亮位置來(lái)運(yùn)行。
我將程序分別放在CCM、通用SRAM1、Flash區(qū)來(lái)運(yùn)行,基于不同的配置,即是否開(kāi)啟指令預(yù)取、指令/數(shù)據(jù)Cache等,得到下面一個(gè)表格。代碼所在區(qū)域欄里的數(shù)據(jù)代表各種情形下的執(zhí)行時(shí)間。
從上面表格可以看出,相同配置下在CCM里執(zhí)行速率總是最高。
至于代碼放在SRAM和Flash里的執(zhí)行速率,不同配置下結(jié)果并不太一樣。比如在開(kāi)啟prefetch和使能指令/數(shù)據(jù)Cache時(shí),即第(1)種配置條件下,在SRAM里運(yùn)行的速率是最慢的,只有在上圖中的第(3)種情形下,代碼在SRAM里運(yùn)行速率相比在FLASH里運(yùn)行才凸顯出明顯優(yōu)勢(shì)。
對(duì)于STM32G4系列芯片,芯片復(fù)位后其Prefetch功能是關(guān)閉的,而指令/數(shù)據(jù)Cache是開(kāi)啟的,即復(fù)位后默認(rèn)為上面的第(2)種情形。結(jié)合上圖,我們不難看出情形(1)與情形(2)的差別不大,至少不顯著。
上面數(shù)據(jù)雖只是基于特定代碼測(cè)試而得,但作為基本的方向性判斷還是可以的。
編輯:jq
-
芯片
+關(guān)注
關(guān)注
462文章
53179瀏覽量
453713 -
STM32
+關(guān)注
關(guān)注
2301文章
11073瀏覽量
369367 -
CCM
+關(guān)注
關(guān)注
0文章
169瀏覽量
25275
原文標(biāo)題:STM32G4芯片內(nèi)不同空間運(yùn)行代碼的速率比較
文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
?基于STM32G474的數(shù)字電源控制板設(shè)計(jì)解析與應(yīng)用指南

at_device 包 ml307長(zhǎng)時(shí)間運(yùn)行有內(nèi)存泄漏問(wèn)題怎么解決?
STM32F103長(zhǎng)時(shí)間運(yùn)行,串口發(fā)送失敗怎么解決?
STM32IDE如何設(shè)定代碼到ITCM中運(yùn)行?
STM32G431移植FreeModbus
在IMX93自定義構(gòu)建期間運(yùn)行bitbake imx image full時(shí)遇到報(bào)錯(cuò)怎么解決?
使用STM32G431做HID Keyboard與CDC符合設(shè)備,為什么做不了?
使用Hal庫(kù)的SPI讀取磁邊傳感器導(dǎo)致STM32G4無(wú)法運(yùn)行怎么解決?
STM32G4 CAN為什么無(wú)法檢測(cè)到bus-off狀態(tài)?
在STM32L431上使用內(nèi)部RTC,時(shí)間運(yùn)行到23:59:59秒后,變?yōu)榱?4:00:00并不是00:00:00,為什么?
STM32和MCP2515通信,STM32這端還需要接CAN PHY嗎?
STM32G474的DAC4無(wú)輸出怎么解決?
DLPC3478長(zhǎng)時(shí)間運(yùn)行投影停止是什么原因?qū)е碌模?/a>
基于STM32設(shè)計(jì)的大氣氣壓檢測(cè)裝置

評(píng)論