嵌入式控制系統設計/軟體工具鏈
|
的華夏公益教科書
嵌入式控制系統設計
|
本章介紹了一些軟體工具,可以幫助系統開發人員。不僅在建立控制系統的軟體方面,而且在整個 設計過程中,包括硬體和軟體。
一個 整合開發環境 (IDE) 是幫助程式設計師開發軟體(僅限軟體!)的軟體。IDE 通常包括一個 原始碼編輯器、一個 編譯器、一個 連結器/定位器 以及通常的 偵錯程式。通常,還會包含各種簡化程式碼構建的工具,例如 版本控制 支援,以及與可重複使用程式碼的軟體框架的整合。有時,IDE 專注於一種特定的程式語言或一種(系列)特定的處理器或硬體(例如,用於對特定供應商的機器人進行程式設計的軟體),但更多情況下,IDE 支援多種語言、處理器等。一些常用的嵌入式系統 IDE 有 GNU 編譯器集合 (gcc)、Eclipse、Delphi、Kylix、KDevelop、Matlab、Microsoft Visual Studio、Netbeans、Powerbuilder、DevC++、Jdeveloper、IntelliJ 等。
該行業(不僅僅是嵌入式系統行業!)正在轉向 開源 Eclipse 框架或 專有 Visual Studio。這兩個 IDE 很可能在未來繼續存在的原因是 報酬遞增 的效應:一個 IDE 已經提供了元件工具之間的許多整合,更容易吸引更多使用者,而更多使用者則會吸引更多進一步的開發機會。(這種效應無論工具是開源還是專有都適用。)嵌入式 行業在很大程度上選擇了 Eclipse。
原始碼編輯器是一種專門用於編輯原始碼以控制嵌入式系統的文字編輯器程式。它可以是一個獨立的應用程式,也可以內建到整合開發環境 (IDE) 中。原始碼編輯器可能具有專門設計用於簡化和加速原始碼輸入的功能,例如語法高亮和自動完成功能。這些功能簡化了程式碼開發。一些常用的嵌入式系統編輯器有 BBEdit(適用於 Mac)、Emacs(GNU)、Kate(KDE)、Microsoft Visual Studio(內建編輯器)和 Vi (vim)
編譯器是一個將原始碼翻譯成計算機語言(目的碼)的計算機程式。通常,輸出採用適合由其他程式處理的形式(例如,連結器),但也可能是一個人類可讀的文字檔案。編譯器將原始碼從高階語言翻譯成低階語言(例如,組合語言或機器語言)。想要翻譯原始碼的最常見原因是建立可以在計算機或嵌入式系統上執行的程式。如果原始碼被編譯以在與編譯器執行平臺不同的平臺上執行,則編譯器稱為交叉編譯器。對於嵌入式系統,編譯器始終在另一個平臺上執行,因此需要一個交叉編譯器。交叉編譯器是在無法或不方便在目標平臺上編譯的平臺上使用的工具,例如執行記憶體量很小的微控制器。由於許多嵌入式系統資源有限,交叉編譯非常常見。
編譯器可能會執行以下操作中的許多或全部操作:詞法分析、預處理、解析、語義分析、程式碼生成和程式碼最佳化。一些常用的嵌入式系統編譯器有 GCC(GNU)、Visual C/C++、CPPBuilder(Delphi/Kylix)。
連結器或連結編輯器是一個程式,它接收由編譯器生成的多個目標檔案,並將它們組裝成一個可執行程式或庫,該程式或庫稍後可以自連結。編譯產生的所有目標檔案都必須以特殊的方式組合,然後程式才能執行。目標檔案本身是不完整的,最明顯的是一些內部變數和函式引用尚未解析。連結器的作用是組合這些目標檔案,並在該過程中解析所有未解析的符號。連結器可以從一個稱為庫的集合中獲取目標檔案。一些連結器不會將整個庫包含在輸出中。它們只會包含從其他目標檔案或庫中引用的符號。存在用於各種目的的庫,通常預設情況下會連結一個或多個系統庫。不幸的是,在嵌入式程式中使用標準庫例程之前,通常需要對其進行一些更改。這裡的問題是,大多數軟體開發工具套件提供的標準庫僅以目標檔案形式提供。因此,您很少有機會訪問庫原始碼以自己進行必要的更改。如果您沒有在嵌入式系統上工作,那麼您就完成了軟體構建。對於嵌入式系統,除了一個方面之外,程式已經完成:程式碼和資料尚未分配記憶體地址。您必須提供有關目標板上記憶體的資訊作為定位器的輸入。定位器使用這些資訊將物理記憶體地址分配給每個程式碼和資料部分。它將產生一個包含可以載入到目標 ROM 中的二進位制映像的輸出檔案。一個常用的嵌入式系統連結器/定位器是ld(GNU)。
偵錯程式是一個用於測試和除錯其他程式的計算機程式。要檢查的程式碼可以執行在指令集模擬器 (ISS) 上,這是一種技術,它在遇到特定條件時允許強大地停止,但通常比直接在相應處理器上執行程式碼要慢得多。當程式崩潰時,偵錯程式會顯示原始程式碼中的位置(如果它是原始碼級偵錯程式或符號偵錯程式),這在整合開發環境中很常見。如果是低階偵錯程式或機器語言偵錯程式,它會顯示反彙編中的行。通常,程式設計師使用單元測試器。這些測試器可以測試最小軟體元件或模組。模擬器幫助程式設計師測試他們的軟體,它使使用硬體在迴路進行測試成為可能。模擬器模擬必須由嵌入式系統控制的系統。可以使用標準測試訪問埠 (JTAG) 在嵌入式系統上除錯軟體。這些標準定義了一個 5 線序列協議,用於訪問和控制數位電路引腳上的訊號電平,並且具有一些擴充套件,用於測試晶片本身的內部電路。一些常用的嵌入式系統除錯程式有 GDB(GNU)、Microsoft Visual Studio 偵錯程式
程式設計師通常使用錯誤資料庫。錯誤資料庫程式可以建立包含所有錯誤及其描述的資料庫。因此,同事可以輕鬆地找到有關錯誤的資訊。他們不必浪費時間搜尋錯誤解決方案,因為其他人已經解決了。一些錯誤資料庫程式可以使工程師之間討論錯誤成為可能。一個常用的程式是 Bugzilla。
版本控制是對同一資訊單元的多個修訂版本進行管理。它最常用於工程和軟體開發,用於管理數字文件(如應用程式原始碼和其他關鍵資訊)的持續開發,這些資訊可能由一個團隊的人員共同處理。對這些文件的更改透過遞增相關編號或字母程式碼(稱為“修訂號”)來識別,並將更改與進行更改的人員歷史關聯起來。人們越來越認識到,用於版本控制的軟體工具對於幾乎所有軟體開發專案都是必要的。如今,大多數產品都是由多個元件組成的。為了瞭解構建產品時使用了哪個版本的每個元件,需要將所有資訊儲存在詳細的資料庫中。在未來,版本控制軟體應該提供一項功能來跟蹤特定版本產品的每個元件的所有版本。這將使以後更容易解決產品的問題。目前用於嵌入式系統的版本控制軟體有 Concurrent Version System (CVS)、Subversion(CVS 的新版本)和 GNU arch。
過去,有一種趨勢是將軟體工具鏈的不同步驟整合到一個整合開發環境中。這種趨勢仍在繼續,IDE 中添加了越來越多的功能。未來的趨勢是將軟體開發與 計算機輔助工程 (CAE) 分析更加整合。例如:軟體開發人員必須調整他們的軟體程式碼,因為系統對控制的動態響應存在問題。在未來,動態響應的 CAE 模型和有限元分析將被固有地嵌入到軟體設計中。
UML2、SysML、Marte、AADL
用於嵌入式系統開發的重要 MDE 專案包括:www.Topcased.org、www.openEmbedd.org 和 www.papyrusuml.org;這些專案正在合作實現更多互操作性。
- 計算機程式設計 討論了通用程式設計(主要面向桌面和網路伺服器計算機)。
- Eclipse 是一個流行的 IDE
- Revctrl : 版本控制維基 討論並比較了各種版本控制系統。
- OpenJTAG 維基