嵌入式系統發展到今天,對應于各種微處理器的硬件平臺一般都是通用的、固定的、成熟的,這就大大減少了由硬件系統引入錯誤的機會。此外,由于嵌入式操作系統屏蔽了底層硬件的復雜性,使得開發者通過操作系統提供的API函數就可以完成大部分工作,因此大大簡化了開發過程,提高了系統的穩定性。嵌入式系統的開發者現在已經從反復進行硬件平臺設計的過程中解脫出來,從而可以將主要精力放在滿足特定的需求上。
嵌入式系統通常是一個資源受限的系統,因此直接在嵌入式系統的硬件平臺上編寫軟件比較困難,有時候甚至是不可能的。目前一般采用的解決辦法是首先在通用計算機上編寫程序,然后通過交叉編譯生成目標平臺上可以運行的二進制代碼格式,再下載到目標平臺上的特定位置上運行。
需要交叉開發環境(Cross Development Environment)的支持是嵌入式應用軟件開發時的一個顯著特點,交叉開發環境是指編譯、鏈接和調試嵌入式應用軟件的環境,它與運行嵌入式應用軟件的環境有所不同,通常采用宿主機/目標機模式。
宿主機(Host)是一臺通用計算機(如PC機或者工作站),它通過串口或者以太網接口與目標機通信。宿主機的軟硬件資源比較豐富,不但包括功能強 大的操作系統(如Windows和Linux),而且還有各種各樣的開發工具(如WindRiver的Tornado、Microsoft的 Embedded Visual C++等),能夠大大提高嵌入式應用軟件的開發速度和效率。
目標機(Target)一般在嵌入式應用軟件開發期間使用,用來區別與嵌入式系統通信的宿主機,它可以是嵌入式應用軟件的實際運行環境,也可以是能夠替代實際運行環境的仿真系統,但軟硬件資源通常都比較有限。嵌入式系統的交叉開發環境一般包括交叉編譯器、交叉調試器和系統仿真器,其中交叉編譯器用于在宿主機上生成能在目標機上運行的代碼,而交叉調試器和系統仿真器則用于在宿主機與目標機間完成嵌入式軟件的調試。在采用宿主機/目標機模式開發嵌入式應用軟件時,首先利用宿主機上豐富的資源和良好的開發環境開發和仿真調試目標機上的軟件,然后通過串口或者以網絡將交叉編譯生成的目標代碼傳輸并裝載到目標 機上,并在監控程序或者操作系統的支持下利用交叉調試器進行分析和調試,目標機在特定環境下脫離宿主機單獨運行。
建立交叉開發環境是進行嵌入式軟件開發的步,目前常用的交叉開發環境主要有開放和商業兩種類型。開放的交叉開發環境的典型代表是GNU工具鏈、 目前已經能夠支持x86、ARM、MIPS、PowerPC等多種處理器。商業的交叉開發環境則主要有Metrowerks CodeWarrior、ARM Software Development Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++等。