1. 程式人生 > >cpu、flash、DDR(記憶體)、馮諾伊曼、哈佛之間的關係

cpu、flash、DDR(記憶體)、馮諾伊曼、哈佛之間的關係

程式首先躺在flash裡面,分為3個段,程式碼段、資料段,bss段,控制器讀取到CPU內部通用暫存器,cpu的機制會在記憶體中給他們各自分配好記憶體空間,比如程式碼段程式碼執行過程,CPU對內部IROM進行直接讀取並解析指令後初始化部分DDR,指令會自動在記憶體上分配程式碼段(在記憶體上分配的還有其他4個段),將flash上的程式碼(如SD卡、nandflash等)cp到記憶體的程式碼段,然後cpu讀取並執行解析程式碼,資料CPU的運算器會工作,在DDR的堆和棧中不斷的存取資料,再根據解析下一行或下幾行的程式碼的要求,訪問指定地址的空間,去存放等操作。因為要處理資料,放入記憶體中執行時,會有多出2部分(堆和棧)用來處理資料,DDR和flash也是外設(實際的硬體),他們也需要一段程式碼去初始化他們的暫存器,使他們能被使用,所以一般會有一段啟動程式碼在irom,CPU上電就會執行裡面的程式碼,這是硬體設計好的。

兩類暫存器:

通用暫存器:(ARM中有37個)是CPU的組成部分,CPU的很多活動都需要通用暫存器的支援和參與)

SFR:(specialfunctionregister,特殊功能暫存器)不在CPU中,而存在於CPU的外設中,我們通過訪問外設的SFR來程式設計操控這個外設,這就是硬體程式設計控制的方法。

         
馮諾依曼結構和哈佛結構


馮諾依曼結構是:資料和程式碼放在一起。
哈佛結構是:資料和程式碼分開存在。
在S5PV210中執行的linux系統上,執行應用程式時:這時候所有的應用程式的程式碼和資料都在DRAM,所以這種結構就是馮諾依曼結構;在微控制器中,我們把程式程式碼燒寫到Flash(NorFlash)中,然後程式在Flash中原地執行,程式中所涉及到的資料(全域性變數、區域性變數)不能放在Flash中,必須放在RAM(SRAM)中。這種就叫哈佛結構。

名詞解釋:

 程式碼段:(.text),又叫文字段,程式碼段其實就是函式編譯後生成的東西

 資料段:(.data),資料段就是C語言中有顯式初始化為非0的全域性變數

 bss段:(.bss),又叫ZI(zero initial)段,就是零初始化段,對應C語言中初始化為0的全域性變數。

 棧:棧是一種資料結構C語言中使用棧來儲存區域性變數。

解釋:棧管理記憶體特點         先進後出

棧是有大小的,不同的開發板定義的棧的大小根據實際需要,如samsungS5PV210在uboot中,設定了棧,程式碼段,資料段,bss段堆的

大小。

堆:和棧一樣也是一種管理記憶體的方式