我想這是一個很基礎的問題. 對於x86的pc機和微控制器等嵌入式開發系統程式的儲存是截然相反的, 即:x86的pc機cpu在執行的時候程式是儲存在RAM中的, 而微控制器等嵌入式系統則是存於flash中 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,在程式碼中將存放地址處的程式碼複製到執行地址中. 馮.諾依曼體系與哈佛體系的區別
我想這是一個很基礎的問題. 對於x86的pc機和微控制器等嵌入式開發系統程式的儲存是截然相反的, 即:x86的pc機cpu在執行的時候程式是儲存在RAM中的, 而微控制器等嵌入式系統則是存於flash中 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,在程式碼中將存放地址處的程式碼複製到執行地址中. 馮.諾依曼體系與哈佛體系的區別