1. 程式人生 > >深入淺出處理器(上)

深入淺出處理器(上)

fff 1.3 地址空間 數據 函數調用 引導 概念 mov 段地址

專題1—深入淺出處理器

1.處理器基本概念

1.1處理器於微控制器的區別:

?微控制器一般是指:CPU + 片內內存 + 片外外設
?微處理器一般指單充的CPU
對於目前的嵌入式設備而言,通常使用的都是微控制器,或這稱為SoC(system on chip),低成本、地功耗。對於軟件工程師而言,微控制器和微處理器沒有任何區別

1.2什麽是CPU?

CPU在固定頻率的時鐘控制下節奏運行。
CPU可以通過總線讀取外部存儲設備中的二進制指令集,然後解碼執行。
這些可以被CPU解碼執行的二進制指令集是CPU設計的時候確定的,是CPU的設計者(ARM公司等)定義的,本質上是一串由1和0組成的數字。這就是CPU的匯編指令集。

從源代碼到CPU執行過程:
技術分享圖片

1.3寄存器的分類;

A.CPU寄存器
—CPU寄存器負責專有指令執行,數據運算,變量處理、參數傳遞
B.外設寄存器
—外設寄存器用於控制外設的行為和工作方式,配置值需要根據外設的芯片手冊完成。
—外設寄存器是編程者控制硬件的關鍵,是留作外設被編程控制的“活動開關”,正如匯編指令集是CPU的編程接口API一樣,寄存器是外設硬件的軟件編程接口API。使用軟件編程控制某一硬件,其實就是編程讀寫該硬件的寄存器。

1.4兩個關鍵寄存器

對於CPU寄存器我們需要特別關註這兩個寄存器
A.PC指針-程序計數器(指令指針IP)
之所以被稱之為PC指針,是因為其指向的是即將執行的下一條指令(這裏我們不考慮多級緩存的問題),類似於指針。每執行一條指令,PC的值就會發生相應的變化。

B.SP指針-棧指針
棧指針始終只想棧空間的頂部,實現LIFO特性
保存中斷斷點、函數調用的的返回值,保存CPU現場等
PC指針和SP指針的使用示例:最初PC指針指向mov 指令,進行下一次跳轉(執行jmp)指令之前會進行現場保存,從SP指針所指的位置開始,將數據保存在棧空間,SP指針依次移動,這裏還有一個BP指針(基址指針),用於保存上一次SP的值,則此時BP與SP之間保存的就是指令跳轉前的現場,當函數返回,或者中斷執行完畢後,就會從該段地址進行現場恢復,SP指針指向其原來的值。
技術分享圖片

1.5 IO操作

處理器的IO操作:
A.處理器與外設之間的數據通過IO操作完成
B.內存映射IO空間(內存與IO統一編址)

外設通過精密的硬件連接映射到處理器的地址空間
通過地址訪問的方式與外設進行通信
C.獨立IO映射(內存與IO獨立編址)
a)獨立於地址空間,無法通過地址訪問外設
b)使用專用指令於外設進行通信
D.操作IO其實就是配置控制寄存器,對寄存器進行讀寫操作。

1.6地址映射

通過具體的硬件設計,可以使得地址總線上的值在某個範圍內,片選信號為真,即:使能連接設備從而讀取相應地址中的數據。
片選信號由地址線產生。
技術分享圖片
地址映射示例:
如下面的地址0XFFFF1234,這是一個32位地址,如何映射到只有16位的地址空間??
通常的做法,使用高位地址通過&&運算產生一個片選信號,然後直接通過低位地址訪問實際的內存空間。
技術分享圖片

1.7處理器啟動過程

處理器上電之後,PC指針固話了一個默認值(通常是0),PC指針的默認值用於決定第一條執行的指令。然後接著執行後續的指令,整個過程如下圖所示。
技術分享圖片
啟動程序(BootLoader):
BootLoader是系統上電後運行的第一個程序,通常用於啟動操作系統。根據運行階段,體積和功能的不同分為三個部分(通常的做法):
BL0-固話於硬件之中,用於初始化最基本的硬件,並加載BL1;
BL1-存儲於外部存儲設備中,用於初始化主存,加載並運行BL2;
BL2-存儲於外部設備中,用於引導和啟動操作系統。
實例分析:
對於S3C6410,這款芯片,其啟動過程的設計和我們上面所講的完全相符
第一階段:首先系統上電後會運行固化在IROM內部的BL0,這部分程序的工程完成最基本的初始化工作(關看門狗、初始化指令cache、初始化棧、堆,加載BL1到內部IRAM,跳轉到BL1去執行)。
第二階段:然後IRAM中的代碼負責初始化內存(SDRAM)然後加載BL2到SRM中,並跳轉到SRAM.
第三階段:BL2在SDRAM中運行,然後加載OS到SDRAM並啟動操作系統
技術分享圖片

深入淺出處理器(上)