下文來說明微控制器與x86cpu的具體途徑:
pc機在執行程式的時候先把程式從硬碟中,調入ram中執行,cpu從ram中讀取程式和資料.
而微控制器的程式則是固化在flash 中,cpu執行的時候直接從flash 中讀取程式,從ram中讀取資料.
造成這種差別的原因:
x86架構的cpu是基於馮.諾伊曼體系的,即資料和程式儲存在一起,而且pc機的ram資源相當豐富,從幾十m到幾百m甚至是幾個g,客觀上能承受大量的程式資料.
而微控制器的架構大多是哈弗體系的,即程式和資料分開儲存,而且微控制器的片內ram資源是相當有限的,內部的ram過大會帶來成本的大幅度提高.
微控制器的程式能儲存在ram中嗎
通過上面的分析可得知:微控制器的程式能儲存於flash中是基於兩點考慮,即體系結構和ram資源的多少.因此,在技術不但進步片內ram容量不但增多的今天,ram資源已經不再是制約這種差別的主要因素,而對於體系機構我們只要更改cpu讀取程式的方式就可以.
我仔細研究了一下鏈結指令碼,用的是gnu的linux的交叉工具鏈.位址分配是寫在乙個ld指令碼中的.
他們是這樣實現的:
1,將你需要在ram中執行的**寫在單獨的乙個c檔案中,然後在指令碼中設定其執行位址與存放位址分開.設定好必要的**起始和結束的標誌變數.
2,在**中將存放位址處的**拷貝到執行位址中.
馮.諾依曼體系與哈佛體系的區別
二者的區別就是程式空間和資料空間是否是一體的. 早期的微處理器大多採用馮諾依曼結構,典型代表是intel公司的x86微處理器.取指令和取運算元都在同一匯流排上,通過分時復用的方式進行的.缺點是在高速執行時,不能達到同時取指令和取運算元,從而形成了傳輸過程的瓶頸.
哈佛匯流排技術應用是以dsp和arm為代表的.採用哈佛匯流排體系結構的晶元內部程式空間和資料空間是分開的,這就允許同時取指令和取運算元,從而大大提高了運算能力.
例如tms320lf240x系列dsp是增強型的哈佛結構通過三組並行的匯流排訪問多個儲存空間.它們分別是:程式位址匯流排(pab),資料位址讀匯流排(drab)和資料位址寫匯流排(dwrb).
微控制器的ROM與RAM
rom read only memory 程式儲存器 在微控制器中用來儲存程式資料及常量資料或變數資料,凡是c檔案及h檔案中所有 全域性變數 區域性變數 const 限定符定義的常量資料 startup.asm檔案中的 類似arm中的bootloader或者x86中的bios,一些低端的微控制器是沒...
10 4 51微控制器RAM區域的劃分
前邊介紹微控制器資源的時候,我們提到過 stc89c52 共有 512 位元組的 ram,是用來儲存資料的,比如我們定義的變數都是直接存在 ram 裡邊的。但是微控制器的這 512 位元組的 ram在地位上並不都是平等的,而是分塊的,塊與塊之間在物理結構和用法上都是有區別的,因此我們在使用的時候,也...
微控制器中段程式 微控制器程式的存放
1 對於燒錄在微控制器裡面的程式,程式的 段,data段,bss段,rodata段等都存放在微控制器的flash中。當微控制器上電後,初始化彙編 將data段,bss段,複製到微控制器的ram中,並建立好堆疊,開始呼叫程式的main函式。以後,便有了程式儲存器和資料儲存器之分,程式執行時從flash...