1、ARM的異常
異常在嵌入式開發中是很常見的事件,它也是非常重要的事件。簡單來說,異常就是一種會打斷程序正常執行的事件。異常通常又稱為“中斷”。
異常的種類大致可分為如下幾種:
1、中斷
IRQ / FIQ 由外部硬件觸發的中斷。
2、軟中斷
soft interrupt 由系統調用的中斷事件,由軟件產生的中斷事件。
3、復位
Reset
4、未定義指令
5、數據異常
例如數據越界等。
中斷:
ARM 有兩級外部中斷:1、FIQ;2、IRQ。
但大多數的嵌入式系統都有多于兩個的外部中斷源,為了能正常響應所有的外部中斷事件,就需要一個“中斷控制器”。
嵌入式系統的中斷響應架構大致如下圖所示:
當在短時間內產生大量中斷事件時,CPU無法保證能及時響應所有的中斷事件。為了避免發生丟失中斷的問題,每一個中斷事件都會作一個“記錄”,即我們常見的設置“中斷標志位”。當CPU查到中斷標志位的值有效時,就會發起一個中斷事件。當然,一個中斷事件我們一般只需要處理一次,因此,通常我們要在中斷處理函數中將對應的中斷標志位作清除操作。
ARM 系統會有一個“中斷向量表”的機制來專門存儲中斷響應函數地址。
2、裸機開發
什么是祼機開發?
祼機開發就是指在嵌入式開發板中,直接編寫程序控制硬件設備的開發模式。在開發板上沒有操作系統,板上各種內圍、外圍硬件資源均由需要使用到它的程序來全權操作。
祼機開發除了軟件編程能力,還有一個很重要的就是要能看懂硬件電路圖以及各種芯片手冊。
在嵌入式領域電路圖設計中,經常可以看到CPU管腳與某些設備不是直接相連的,而是要通過一個“三極管”來間接控制。這么設計的原因是為了降低CPU在控制各種外圍設備時被外圍設備的合計電流燒毀的風險。拿LED燈控制電路來說,一個LED燈通常都是供3.3v的電壓,并接入一個 1k 的電阻。如此一來,LED燈在工作時的電流就約為3.3ma。若CPU的管腳直接控制LED燈的亮滅,當板上有大量LED燈同時亮起時,輸入到CPU的電流累加起來就會比較大,CPU的發熱也會水漲船高,燒毀的風險也更大。而通過一個三極管間接控制LED燈,就不會有這個風險,LED燈工作時的電流將不會直接作用到CPU上。
在電路圖設計中,有一個概念非常常見:上拉、下拉電阻。它們是指在對應元器件的電路上外接一個或一組電阻元件。上拉是指電阻元件與電源相連接,下拉則是指電阻元件與地相連接。
ARM芯片往往都有很多的引腳,其中會有若干組 GPIO 引腳。GPIO 的全稱是:General purpose input/output,可以簡單理解為這些引腳就是專門給我們自由實現軟件邏輯功能的。而為了節省硬件資源與開發成本,通常同一個芯片引腳還可以有多個功能用途。我們在編程時就需要首先確定好某個引腳的功能用途,然后才去設置引腳的值。因此,ARM芯片的引腳控制通常都需要操作到兩個寄存器:
1、功能控制寄存器;
2、數值寄存器。
在軟件開發過程中,首先通過功能控制寄存器設置好我們要用的引腳的功能用途,是普通GPIO模式還是其它功能,是輸入方向還是輸出方向。然后才是將對應的電平值寫到數值寄存器中。
在編程編寫完成后,需要編譯生成可執行文件才能在ARM芯片上運行。
編譯過程通常都使用 Linux 操作系統來完成。編譯還需要使用到專用的“編譯鏈”,即與要運行該程序的平臺相匹配的 gcc 工具。PC 端的 Linux 系統默認的 gcc 是針對 x86 架構芯片的,用它所編譯出來的可執行程序只能在 x86 架構芯片上運行。而與平臺相匹配的 gcc 工具需要自行下載安裝,或者可以詢問芯片廠商索要。
ARM裸機開發模式還被稱為“交叉開發環境”。它是指程序的開發與運行是分開完成的。通常我們都使用PC來編寫、編譯程序,然后再將編譯生成的可執行程序下載到開發板中運行。這種開發環境就叫“交叉開發環境”。
有些開發板在出廠時會預置 uboot 程序,在 uboot 模式下可以直接通過 loadb 命令將程序下載到開發板內存中,然后再通過 go + 內存地址 這條命令來運行我們的“裸機程序”。當然,這種模式不是所有的 ARM 開發板都支持的,具體要看廠商是否有提供這個功能。
-
ARM
+關注
關注
134文章
9121瀏覽量
368238 -
cpu
+關注
關注
68文章
10889瀏覽量
212386 -
中斷
+關注
關注
5文章
900瀏覽量
41590 -
嵌入式開發
+關注
關注
18文章
1033瀏覽量
47632
發布評論請先 登錄
相關推薦
評論