官术网_书友最值得收藏!

  • 嵌入式通信系統
  • 張曉勇 彭軍
  • 1211字
  • 2019-10-12 16:30:33

1.6 嵌入式通信系統的開發與應用

1.6.1 嵌入式通信系統開發相關技術

相對于在Windows環境下的開發應用程序,嵌入式通信系統開發有著很多的不同。不同的硬件平臺和操作系統帶來了許多附加的開發復雜性。

1.開發過程

在嵌入式開發過程需要用到宿主機和目標機,宿主機是編譯、連接、定址過程的計算機;目標機是運行軟件的嵌入式設備。首先須把應用程序轉換成可以在目標機上運行的二進制代碼。這一過程包含3個步驟:編譯、連接、定址。編譯過程由交叉編譯器實現。所謂交叉編譯器就是運行在一個計算機平臺上并為另一個平臺產生代碼的編譯器。常用的交叉編譯器有GNUC/C++(gcc)。編譯過程產生的所有目標文件被連接成一個目標文件,稱為連接過程。定址過程會把物理存儲器地址指定給目標文件的每個相對偏移處。該過程生成的文件就是可以在嵌入式平臺上執行的二進制文件。

2.向嵌入式平臺移植軟件

在PC上編寫軟件時,要注意軟件的可移植性,選用具有較高移植性的編程語言(如C語言),盡量少調用操作系統函數,注意屏蔽不同硬件平臺帶來的字節順序、字節對齊等問題。

(1)字節順序

字節順序是指占內存多于一個字節的數據在內存中的存放順序,通常有小端、大端兩種字節順序。小端字節順序指低字節數據存放在內存低地址處,高字節數據存放在內存高地址處;大端字節順序是高字節數據存放在低地址處,低字節數據存放在高地址處。基于x86平臺的PC是小端字節序的,而有的嵌入式平臺則是大端字節順序的。通常認為,在通信信道中傳輸的字節的順序即網絡字節順序為標準順序,考慮到與協議的一致以及與同類其他平臺產品的互通,在程序中發數據包時,將主機字節序轉換為網絡字節序,收數據包處將網絡字節順序轉換為主機字節順序。

(2)字節對齊

有的嵌入式處理器的尋址方式決定了在內存中占2字節的int16、uint16等類型的數據只能存放在偶數內存地址處,占4字節的int32、uint32等類型數據只能存放在4的整數倍的內存地址處;占8字節的雙精度浮光型類型數據只能存放在8的整數倍的內存地址處;而在內存中只占1字節的字符類型數據可以存放在任意地址處。由于這些限制,在這些平臺上編程時有很大的不同。若對內存中數據以強制類型轉換的方式讀取,字節對齊的不同會引起數據讀取的錯誤。

(3)位段

由于位段的空間分配方向因硬件平臺的不同而不同,對x86平臺,位段是從右向左分配的;而一些嵌入式平臺,位段是從左向右分配的。分配順序的不同導致了數據存取的錯誤。解決這一問題的一種方法是采用條件編譯的方式,針對不同的平臺定義順序不同的位段;也可以在前面所述的兩個函數中加上對位段的處理。

(4)代碼優化

嵌入式通信系統對應用軟件的質量要求更高,因而在嵌入式開發中尤其需要注意對代碼進行優化,盡可能地提高代碼的效率,減少代碼的大小。雖然現代C和C++編譯器都提供了一定程度的代碼優化,但大部分由編譯器執行的優化技術僅涉及執行速度和代碼大小的平衡,不可能使程序既快又小,因而必須在編寫嵌入式軟件時采取必要的措施。包括:提高代碼的效率;減小代碼的大小;避免內存泄漏等措施。

主站蜘蛛池模板: 华蓥市| 尉犁县| 鹰潭市| 临泽县| 宜黄县| 东乌| 溧阳市| 绵阳市| 碌曲县| 邯郸县| 文登市| 鹤岗市| 武夷山市| 九龙县| 东港市| 雅安市| 建瓯市| 枝江市| 盐城市| 德江县| 高阳县| 绥德县| 荔浦县| 扬中市| 老河口市| 开封县| 永昌县| 丽江市| 陈巴尔虎旗| 灵丘县| 遂宁市| 沙雅县| 浑源县| 东乡县| 勐海县| 宁都县| 五原县| 万全县| 新河县| 镇江市| 海南省|