4

我已經使用微控制器構建了嵌入式系統PCB,如stm32,stm32l,nRF51822,efm32g,其中大多數使用arm cortex m3。並且對它們中的每一個進行編程通常是不同的,也就是說,在一個用於gpio的微控制器中使用的中斷線與另一個微控制器中使用的中斷線不同,配置一個的寄存器與另一個不同,所以我爲一個與另一個不兼容,因爲每個微控制器都與處理器不同地連接其外圍設備。爲什麼代碼在主板之間兼容?

我想在PC架構中的微控制器的等價物是主板的權利?但是代碼如何爲主板(例如使用x86)與其他主板兼容?有沒有標準? 對於所有設計用於運行Windows或Linux的主板,所有中斷線(由硬件鏈接)是否相同?和IO端口是一樣的嗎?接口是否改變時鐘一樣?

通常,當我爲微控制器編程裸機(無OS)代碼時,我得到它的數據表以瞭解如何與外設交互,是否有針對所有主板的統一參考手冊?

如果有人能指點我一些關於此主題的參考資料,我將不勝感激。當我尋找計算機體系結構書籍,或者他們專注於處理器ASIC設計(指令集,管道,緩存等,我已經知道),或者他們真的是基本的東西(如:什麼是硬驅動器)。

回答

4

我認爲簡短的答案是否定的,主板不兼容爲不同的架構製造的主板。編譯器和操作系統內核抽象出架構差異,但操作系統內核本身必須針對每種架構進行編碼。特別是,硬件特定的操作系統部分稱爲該驅動程序的「驅動程序」,並且必須對每個體系結構進行編碼。

當爲OS編寫代碼時,所有硬件訪問都要經過OS內核,OS內核知道如何對該特定硬件體系結構執行硬件訪問。程序本身不做任何中斷,但讓內核完成實際的工作。

程序和編譯器必須知道的一切就是如何在給定的體系結構和操作系統中進行系統調用,以及識別OS API的系統調用編號。

+1

即使兩個主板都有相同的CPU? 那麼,當我在我的機器上安裝Ubuntu或Windows時,它會檢查主板製造商以獲取正確的驅動程序? –

+0

@Lilás - 是的,你甚至可以從你的操作系統獲得與CPU相關的信息。所以,你需要有一個特定的操作系統的圖像,例如。適用於x86,x64,SPARC,ARM等。 –