1.基本概念
????????嵌入式:以應用為心,以計算機技術為礎,軟便件可被的專用計算機系統。
????????計算機系統的軟件基本組成:? ?系統軟件、應用軟件。
? ? ? ? 計算機系統的硬件基本組成:運算器、控制器、存諸器、輸入設備、輸出設備
日常生活中遇到的專業術語:
? ? ? ? CPU中央處理器(Center Processing Unit):一種通用的強大處理器。
? ? ? ? GPU圖形處理器(Graphics Processing Unit):處理圖像的處理器
? ? ? ? FPU浮點型運算單元(Float Processing Unit)
在嵌入式行業里:
? ? ? ? MPU(Mico Processing Unit):微處理器,偏向處理,強調通用
? ? ? ? MCU(Mico Contral Unit):微控制器,偏向控制,強調集成度
? ? ? ? 單片機:單片微型計算機
? ? ? ? DSP(Digital Signal Processing):數字信號處理器,高強度數學計算的專用芯片
? ? ? ? SOC(System On Chip):片上系統,SOC是一個設計和集成的概念,把MPU,MCU,
GPU,DSP,modam(調制解調器)規劃在一起形成功能完善的藍圖。
? ? ?RAM(隨機存儲器)(Random Access Memory):價格貴,地址總線鏈接,每一個字節都可以被處理器直接尋址,運行速度較ROM快,掉電數據丟失
? ? ?ROM(只讀存儲器)(Read-only Memory)(塊設備):價格便宜,運行速度滿,掉電數據不丟失。
本次我們學習ARM使用的開發板是正點原子的IMAX6ULL
CISC:復雜指令集架構(體積大,功耗大,適用于電腦)
SISC:精簡指令集架構(體積小,功耗小,適合應用于小型移動設備)
ARM
核心架構版本:ARM1-ARM11,11之后ARM分為A(CortexA-app應用),R(CortexR-realtime實時),M(CortexM-mcu單片機)
指令集版本:v1-v9
ALU算數邏輯單元:位于內核,如int a = 1,int b = 2, int c = a + b ,RAM將數據發送到位于內核的通用寄存器,通過ALU計算得出結果。由于通用寄存器不能被指針地址訪問,因此無法通過c語言進行操作,需要用匯編語言對通用寄存器進行操作。而外設寄存器下掛在地址總線,需要通過總線(指針)進行訪問。
存儲器分類:RAM(內存),ROM(外存),register(寄存器),Cache(高速緩存)其分為數據Cache和指令Cache,其與MMU類似,使用那部分就打開那部分,將不使用的部分關閉,避免地址映射錯誤,使用Cache可以避免例如for循環中對變量的重復讀取和修改,提高了運行效率。
?棧(頂)背靠內核,向下生長,避免向上生長數據越界到內核空間導致系統崩潰。
CPSR(current program status register):當前程序狀態寄存器
SPSR(saved program status register):備份程序狀態寄存器
寄存器組示意圖:
sp(stack point):棧指針寄存器,用來記錄棧頂位置。?
lr(link regist):鏈接寄存器,保存程序跳轉前的下一行程序地址,方便程序執行完后返回繼續執行。
pc(program conter):程序計數器 ,指向要執行的下一行代碼,每執行一行代碼會自加一次,向后偏移,當執行函數調用時,pc跳轉到要執行的函數地址,在函數執行完后返回lr寄存器保存的跳轉前的下一行程序位置繼續執行 。
那么問題來了,lr只有一個,當進行函數嵌套的時候,lr多次保存會導致地址覆蓋,那函數是怎么精準的返回的呢?
? ? ? ? 答案是lr在被覆蓋前會將先前的地址放入棧中,雖然lr只能存放一個地址,但是相對棧來說棧的空間無限大且連續,壓棧和彈棧的順序都是固定的,因此通過lr和棧配合下程序可以做到準確返回。
面向應用的ARM最小系統:
存儲器的結構層次:
單總線結構和多總線結構
RAM和ROM的分類:
馮諾依曼架構(普林斯頓架構):其核心是共享存儲,分時訪問。代碼和數據公用一個內存空間和總線,取數據和取指令串行交替執行。
哈佛架構:其核心是分離存儲,并行訪問。指令和數據存儲在兩個獨立的物理內存模塊中,并且使用兩條獨立的總線進行訪問。我們所學的ARM就是采用的改進型哈佛架構,即在芯片內部采用哈佛架構,在芯片外部采用馮諾依曼架構。
ARM工作模式:
每種模式的棧是獨立的,sp指向的空間不同。? ? ? ??
cpsr(程序狀態寄存器):
N:程序執行后最高位的數值(運算符號1負0正)
Z:記錄操作結果是否為0。如果結果為0,則?Z = 1。如果結果不為0,則?Z = 0。
C:記錄無符號數運算的進位或借位。對于加法(ADD, ADC):如果加法產生了進位(結果小于任意一個加數),則?C = 1,否則為0。對于減法(SUB, SBC, CMP):如果減法沒有發生借位,則?C = 1;如果發生了借位,則?C = 0。這一點容易混淆,可以理解為:C = 1
?表示無符號減法結果有效(被減數 >= 減數),C = 0
?則表示下溢(被減數 < 減數)。
V:記錄有符號數運算是否發生了溢出。如果操作導致溢出(結果超出了有符號數所能表示的范圍),則?V = 1。否則,V = 0。
M位(0-4bit):負責記錄處理器模式。
SPSR(保存的程序狀態寄存器):它的唯一目的就是:當異常(或中斷)發生時,自動地、硬件地保存當前模式下的 CPSR 狀態。
異常向量表:CPU硬件設計中的一個關鍵機制,它決定了當發生異常或中斷時,CPU應該去哪里找到處理這個事件的代碼。存放著異常處理程序的入口地址。