問一個最基本的問題,也是我一直沒搞清楚的問題
當程序被下載到flash中,程序運行時,是先把代碼復(fù)制到ram中然后從ram中取指令開始運行,還是直接從flash中取指令運行?
提問者:龔浩洋2
地點:-
瀏覽次數(shù):177
提問時間:10-06 12:19
我有更好的答案
- 11條回答
-
vewwerwr
10-06 18:08
馮.諾依曼結(jié)構(gòu)是在從ram中取指令執(zhí)行,包括arm體系的內(nèi)核;哈福結(jié)構(gòu),cpu直接執(zhí)行程序存儲器的指令,包括51體系的內(nèi)核;
-
brdtv
10-10 00:13
我感覺51內(nèi)核還是馮.諾依曼結(jié)構(gòu),雖然它的數(shù)據(jù)存儲和程序存儲是分開的
-
60user177
10-14 16:34
實際上看你怎么想了,不必過于糾結(jié)
-
guangchuan
10-06 23:14
一般在rom中運行, 如 PC 的bios
-
JasonXiong
10-09 22:07
還是不太清楚,有沒有一個清楚的說法,或者舉出哪些是從RAM中取指令的,哪些是從ROM中取指令的。
-
男友力MAX
10-16 09:26
這個問題在各自的處理器資料里都會提到
-
平凡的世界12
10-09 07:14
我現(xiàn)在主要用的是M3系列和ARM7系列
-
leyun
10-06 14:02
ARM一般的片子,flash都會比RAM大很多,如何能將程序先復(fù)制到RAM中再運行呢?
-
lanjie66
10-15 12:54
M3系列是在MCU內(nèi)置的FLASH里跑的。
ARM7沒有帶Flash,接可以接nor Flash, 讓程序在FLash里面跑,也可以把程序拷么內(nèi)存跑,看你接的內(nèi)存大小。如果接的是Nand Flash就是能拷貝到內(nèi)存跑。
-
wq644921241
10-08 10:44
我記得STM32F103有兩個引引,BOOT0、B00T1,通過控制這兩個引腳,即可以在RAM中跑,也可以在flash中跑。
-
snake123
10-14 10:28
BootLoader的啟動又有兩種情況,
一種情況是你有nor Flash,那好辦,直接就能運行BoolLoader,程序都運行起來了,接下去你想怎拷都得。
另一種情況是你只有Nand FLash,這就只能靠具體的CPU產(chǎn)家了,如三星、ATMEL。因為沒有它們,你連一條指令都執(zhí)行不了。
三星做法:三星在用戶通過硬接線,告訴它要在NandFlash啟后時,在上電后,會把NandFlash的第一塊數(shù)據(jù)拷貝到內(nèi)部的SRAM運行。接下去,你的BoolLoader就得見機行事了,SRAM只有4K,三星是拷不完整的,趕緊他SDRAM內(nèi)存初始化掉,然后自己拷個完整的。
ATMEL:ATMEL里頭有個類似與BIOS的ROM在CPU里頭,是出廠就寫好程序的,CPU啟動時會先運行里頭的引導(dǎo)程序。引導(dǎo)程序如果識別到NandFLash,會做和三星類似的事情,把NandFlash的第一塊數(shù)據(jù)拷貝到內(nèi)部的SRAM運行,接下去你要做的,也一樣。