【軟體開發底層知識修煉】一 深入淺出處理器之一 微處理器與微控制器

楊柳_發表於2019-01-22

學習交流加

  • 個人qq: 1126137994
  • 個人微信: liu1126137994
  • 學習交流資源分享qq群: 962535112

深入淺出處理器這幾篇文章可能你覺得對軟體開發用處不大,這個看個人理解吧,若是想貫通上下,知其然還要知其所以然的話,或許還是有點用處的。學習處理器的篇章非常少,花一點時間學一下也無所謂的!

在我之前還是做硬體的時候,我一直不理解微處理器和微控制器的區別。 之前寫過一篇文章,講X86處理器的,可以點選檢視:X86處理器

1、 處理器

處理器分為兩種:微處理器和微控制器。

微處理器與微控制器有以下區別:

  • 微處理器

    -- CPU

  • 微控制器

    --CPU + 片內記憶體 + 片內外設

注意:

  1. 微控制器具有成本低,功耗低等優點,常用於嵌入式系統設計
  2. 對於軟體工程師而言,微處理器與微控制器沒有任何區別

其中,CPU與外設(包括微控制器的片內外設與片外外設)都有暫存器,但是它們的用處卻是非常的不一樣。之前寫過的X86處理器那篇文章中,已經講了一些X86處理器的暫存器的用處,大致就是儲存資料的,但是微控制器上的外設中的暫存器,不是用來儲存資料的,而是用來控制外設的行為和工作方式的。

1.1、暫存器分類

  1. CPU暫存器

    -- 專用指令執行,資料運算, 變數處理,引數傳遞

  2. 外設暫存器

    -- 用於控制外設的行為和工作方式、

    --暫存器值的配置需要檢視相應的硬體手冊

1.2、處理器中的關鍵暫存器

今天我們只瞭解兩個暫存器:PC程式計數器暫存器,SP棧指標暫存器。

  • PC程式計數器(指令指標暫存器IP)

    -- PC實際上就是程式碼中的每一條指令的地址,這個地址剛好就是記憶體中程式碼段中的偏移地址

    --每執行一條指令,PC中的值,就會發生變化

    -- PC始終儲存著一條指令,這條指令就是CPU即將要執行的那條指令(下一條要執行的指令)

  • SP棧指標(Stack Pointer)

    --SP暫存器,始終儲存著棧空間的棧頂地址,實現LIFO特性

    -- SP棧指標用於保護函式呼叫的現場,比如中斷斷點,通用暫存器,函式的返回值等。具體如何保護,在以後的文章中會講解

具體使用方法,會在後面的文章中講解,今天暫時知道這兩個暫存器的概念與用法。

1.3、處理器的IO操作

眾所周知,一臺電腦有很多外設,USB,音效卡,顯示卡等,這些都是外設。那麼處理器是如何與外設進行資料通訊的呢?

處理器與外設之間的通訊通過IO操作完成。

那麼既然有IO操作,肯定是要有CPU去定址的過程,在CPU所能定址的範圍內,找到外設的地址,對該地址進行讀寫就可以與外設進行通訊。那麼外設如何通過IO將自己的地址空間對映給CPU的定址空間呢?

  • 通過記憶體對映IO空間

    -- 外設通過精密的硬體連結對映到CPU的定址空間。

    -- 然後CPU通過地址訪問與外設進行資料讀寫訪問

  • 獨立的IO空間

    --外設獨立於CPU的地址空間,無法通過CPU的定址來與外設進行通訊

    -- 此時,需要使用專用的指令與外設進行通訊

上面是CPU與外設的基本通訊方式,我們不必糾結於具體的硬體實現,畢竟我們是做軟體開發。

那麼,CPU現在可以與外設進行通訊了,那麼CPU如何操作外設呢?

  1. 通過IO埠配置控制暫存器
  2. 通過IO埠讀取資料暫存器

從軟體工程師的角度來看,只要對不同的IO埠讀寫,就可以操作外設;讀寫IO埠時候的具體值和意義需要查詢具體的硬體手冊。

2、硬體設計的關鍵

上一節我們知道了CPU是如何與外設打交道的。那麼在硬體上,大概設怎樣的設計呢?

首先CPU與外設之間要有地址匯流排與資料匯流排,然後需要有一個片選訊號用來確保是否“啟動”該外設。

在這裡插入圖片描述

通過具體的硬體設計,可以使地址匯流排上的值在某個範圍時,片選訊號為“真”,即:使能連線的外設,從而讀取相應地址中的資料!!!

具體的硬體如何設計不去細究,這裡知道大概原理即可,

3、處理器的啟動過程

在一開始,我們的電腦是沒有作業系統的,那麼處理器是如何啟動的呢?

  • 處理器啟動後,PC(IP)暫存器固話了一個預設值
  • PC預設值決定了CPU上電後第一條執行指令在哪
  • 第一條執行指令,是CPU的啟動程式BIOS(BIOS以後講解)

下圖為CPU簡易的啟動過程

在這裡插入圖片描述

大致瞭解一下BIOS:

固化於硬體中的一個程式,用於初始化硬體,然後將指令指標暫存器PC(IP)指向主引導扇區程式,主引導扇區程式再來引導作業系統核心的自舉程式,然後啟動作業系統。(後期會專門學習作業系統,現在暫時不用瞭解)

4、總結

本系列文章學習記錄軟體開發底層的基礎知識。

相關文章