|
txms0dyki4464012697142.gif (60.41 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
txms0dyki4464012697142.gif
2024-10-18 21:58 上傳
) T4 ~: q G9 e點(diǎn)擊上方藍(lán)色字體,關(guān)注我們! D( N& i' ?3 o
9 W& X6 o1 b+ P4 f0 `以下是我的一些看法。
' F3 Q4 U% J4 l! h: {2 u9 m; d& Y) t: n0 M8 O
MCU中的程序通常可以直接在FLASH中運(yùn)行,但在對(duì)性能有特殊需求或需要?jiǎng)討B(tài)修改代碼的情況下,可以將程序搬到RAM中執(zhí)行。
2 }" g% o! I4 E/ g2 k( T0 [& _' c. J- H: v- A: w7 k+ A! Q; {
同時(shí),片內(nèi)與片外存儲(chǔ)器在速度和訪問(wèn)延遲上確實(shí)存在明顯差異,這會(huì)影響系統(tǒng)的設(shè)計(jì)決策。
& u( x5 |! H- r! d1
* U* c: Y) S& A0 p# D程序從FLASH執(zhí)行還是搬到RAM執(zhí)行?0 w3 G5 Z* X/ a, s, I2 P5 A2 d9 N
一般情況下,嵌入式系統(tǒng)的程序代碼是存儲(chǔ)在片內(nèi)的FLASH中的。. \. y" U7 B, } w% _
( E0 i/ o4 b; t: T4 n& K在MCU上電復(fù)位后,系統(tǒng)的啟動(dòng)過(guò)程大致如下:4 Q. c% \$ |/ a
上電復(fù)位(Power-on Reset):MCU會(huì)進(jìn)入復(fù)位狀態(tài),內(nèi)部電路開(kāi)始初始化。啟動(dòng)代碼(Boot Code):上電后,芯片的啟動(dòng)代碼會(huì)被執(zhí)行。這個(gè)啟動(dòng)代碼可能是由芯片廠家提供的ROM引導(dǎo)代碼,負(fù)責(zé)初始化時(shí)鐘、棧指針等關(guān)鍵硬件資源,并將程序計(jì)數(shù)器(PC指針)指向FLASH中預(yù)定的入口點(diǎn)(通常是復(fù)位向量)。執(zhí)行用戶代碼: 此時(shí),程序開(kāi)始從FLASH中讀取指令,并由處理器逐條執(zhí)行。
* G% e* j1 f9 B/ r; \8 x9 I$ d
+ Y b6 ?, _1 W7 F# m" R, l; R2* X; H& W2 o. S- M! `9 E
FLASH中的代碼是如何運(yùn)行的?( J! a. T1 l& a" o/ b& }
當(dāng)程序計(jì)數(shù)器(PC)指向FLASH中某個(gè)地址時(shí),處理器會(huì)從該地址讀取指令,解碼后執(zhí)行。也就是說(shuō),程序?qū)嶋H上可以直接從FLASH中運(yùn)行,不一定需要搬到RAM。
: T4 Q) q. X$ Z4 ]
& k1 o3 s* s/ V* j( j對(duì)于絕大多數(shù)嵌入式應(yīng)用來(lái)說(shuō),這是最常見(jiàn)的做法,因?yàn)檫@樣可以節(jié)省寶貴的RAM空間。. a) t4 ]. m% c7 k# {' M8 a7 Z
/ O; j$ f6 t4 N+ |) \/ e5 P
在大多數(shù)ARM或PowerPC架構(gòu)的MCU中,啟動(dòng)流程是:. Y& i5 Q& ~- W0 Z* d
復(fù)位向量:通常是FLASH的起始地址或者某個(gè)固定位置,用于存放初始PC值(也就是程序入口地址)。程序計(jì)數(shù)器(PC)的設(shè)置:上電時(shí),PC由啟動(dòng)代碼或復(fù)位向量設(shè)定為FLASH中的起始地址,之后按順序讀取FLASH中的指令。
5 r s8 E0 |$ R
# V: y6 y' Y, C6 H5 z3
' A$ ]' K3 z( G2 z' {9 y. ?必須搬到RAM中才能運(yùn)行嗎?不這樣做有什么不妥?
0 X* \7 h# N. ^) A9 p雖然代碼可以直接從FLASH中執(zhí)行,但有時(shí)搬到RAM中運(yùn)行更具優(yōu)勢(shì),主要有以下幾種原因:( w6 {" R& C" L7 U& N. _) W, U/ _
執(zhí)行速度:RAM的訪問(wèn)速度通常比FLASH更快。如果對(duì)性能要求較高,可以將部分代碼(如關(guān)鍵中斷服務(wù)程序)加載到RAM中運(yùn)行,能顯著提升執(zhí)行效率。寫(xiě)入或擦除FLASH的限制:在執(zhí)行寫(xiě)入或擦除FLASH操作時(shí),往往會(huì)阻塞對(duì)FLASH的讀訪問(wèn)。因此,為了避免程序運(yùn)行中出現(xiàn)問(wèn)題,有時(shí)需要將代碼搬到RAM中執(zhí)行,以便在對(duì)FLASH進(jìn)行操作時(shí)仍能正常運(yùn)行。代碼自修改:某些高級(jí)應(yīng)用中,程序可能會(huì)修改自身的指令。這種情況下,代碼必須位于可寫(xiě)的存儲(chǔ)器(如RAM)中,因?yàn)镕LASH不支持動(dòng)態(tài)修改。! N/ ]5 R2 ~# X7 N' ~7 ~2 d+ `
2 W) I8 n5 h4 v4
- `5 z3 x4 u5 r- t0 a. _片內(nèi)和片外存儲(chǔ)的區(qū)別( ~3 i8 x7 {, L" z( F. q
片內(nèi)RAM/FLASH:通常片內(nèi)存儲(chǔ)器的訪問(wèn)速度更快,延遲更低,因?yàn)樗鼈冎苯优c處理器內(nèi)核集成在一起。片內(nèi)RAM通常用于高速緩存或需要高頻訪問(wèn)的數(shù)據(jù),而片內(nèi)FLASH用于存儲(chǔ)穩(wěn)定的程序代碼。
* C% g2 E3 C/ ?. m% p- `% a, }; Y7 m4 ^/ U% n3 T( M1 k5 J
片外RAM/FLASH:片外存儲(chǔ)器通過(guò)外部總線連接,訪問(wèn)速度和片內(nèi)相比會(huì)稍慢,尤其在使用串行總線(如SPI FLASH)時(shí)延遲更大。如果程序和數(shù)據(jù)需要頻繁訪問(wèn)片外存儲(chǔ)器,性能會(huì)明顯下降。1 g& M: ?$ i7 f) b
Y( B7 [6 e0 w
因此,一般情況下,片外存儲(chǔ)更多是作為數(shù)據(jù)存儲(chǔ)或者大容量擴(kuò)展,而不是執(zhí)行的主要位置。
% P* u, J. V) R) Y! m5
, F$ A5 \$ Z- _/ b如果程序大小超過(guò)RAM怎么辦?
: d8 I+ }, T/ A! a在程序代碼超過(guò)RAM可用空間時(shí),通常不會(huì)整個(gè)搬移,而是采用分段加載或“XIP”(Execute In Place,原地執(zhí)行)技術(shù):. f" h3 |) V+ j! |/ E' Q+ M' Y8 k
XIP(原地執(zhí)行): 直接從FLASH中讀取和執(zhí)行指令,不需要搬到RAM。絕大多數(shù)MCU都支持這種方式。分頁(yè)加載或分段執(zhí)行:在一些高級(jí)系統(tǒng)(如操作系統(tǒng)驅(qū)動(dòng)的系統(tǒng))中,可以將程序分割為多個(gè)段,按需加載到RAM中執(zhí)行。但這對(duì)于資源受限的MCU來(lái)說(shuō),通常不會(huì)這么復(fù)雜。) `, q8 g/ |4 k. ], N
/ G Y6 U8 P4 h# L0 U% a1 D6
) j) g ~* y& f片外FLASH和SRAM的速度差異. K0 g$ ^4 v3 I% z* ^: y$ A
片外FLASH和SRAM相對(duì)片內(nèi)存儲(chǔ)器,訪問(wèn)速度會(huì)更慢。% c; ]: l6 ? ^2 G4 m$ E
: j% q: {: `8 C; Y, X* K
主要原因包括:$ V4 Y6 |) E' I( z
訪問(wèn)延遲:片外存儲(chǔ)器需要通過(guò)總線協(xié)議進(jìn)行數(shù)據(jù)傳輸,可能涉及地址解碼和等待周期。帶寬限制:外部存儲(chǔ)器的讀寫(xiě)帶寬通常不如片內(nèi)存儲(chǔ)器高,如果是串行接口(如SPI FLASH),帶寬瓶頸會(huì)更明顯。內(nèi)存控制器的影響:外部存儲(chǔ)器訪問(wèn)可能還依賴于內(nèi)存控制器的配置,訪問(wèn)速度受限于控制器的性能。2 J2 x! o' w D1 Z. M$ A
! B6 D) W9 T/ f. K- G* l' @
: g& _! _( Q+ j. h: @3 o% M* |
v0qhdpmel3264012697242.jpg (71.14 KB, 下載次數(shù): 7)
下載附件
保存到相冊(cè)
v0qhdpmel3264012697242.jpg
2024-10-18 21:58 上傳
4 M9 {+ v( y$ V/ }/ w8 J" S- S
m00exvkrk5f64012697342.gif (45.46 KB, 下載次數(shù): 5)
下載附件
保存到相冊(cè)
m00exvkrk5f64012697342.gif
2024-10-18 21:58 上傳
4 M0 L" @; O9 p, Y4 J點(diǎn)擊閱讀原文,更精彩~ |
|