32位嵌入式系統的軟件開發過程中,字節對齊問題是相當重要的。我們現在就拿ARM處理器和ADS1.2開發環境作為例子說明字節對齊的概念。
在此之前,我先聲明幾個基本的概念:
(1)、對象:在C語言中使用結構體類型、共同體類型、或內部基本類型所定義的變量或常量,就稱為對象。對象占據了一塊實際的存儲器空間,這塊空間有固定的起始地址和字節數。
(2)、引用:使用對象有兩種方法:“對象名”和“引用”。當你在源代碼中定義一個對象時,編譯器就會為它分配一塊存儲器,此時你就可以使用“對象名”來操作該對象。但是對于程序運行時動態分配的某一塊存儲器空間(對象),你就沒法使用“對象名”了,而只能使用“引用”,所以,“引用”就是指向特定類型的對象的指針。
好了,我們轉入正題。
在32位嵌入式系統中,單字節對象是1字節對齊的;雙字節對象是2字節對齊的;四字節對象是4字節對齊的;其它結構體或共同體對象是8字節對齊的。也就是說,當你定義一個單字節對象時,該對象的起始地址可以是任何整數;當你定義一個雙字節對象時,該對象的起始地址必定是2的倍數的整數;當你定義一個四字節對象時,該對象的起始地址必定是4的倍數的整數;當你定義一個結構體或共同體對象時,該對象的起始地址必定是8的倍數的整數。以上說的對象包括“結構體或共同體對象的成員對象”。
字節對齊的故障只能出現在“引用”的使用過程中。當你使用“對象名”來操作對象時,根本不用擔心字節對齊問題。
在ADS環境下,有“ALIGN” 、“__align(x)” 、“__packed”關鍵字用于字節對齊處理。ALIGN用于匯編語言,__align(x)用于C語言,__packed用于放棄字節對齊。
單字節對齊類型的引用可以操作任何對象,雙字節對齊類型的引用可以操作雙字節、四字節、八字節對齊的對象,…………。只有遵守這個規則,你的程序才可能是健壯的。
如果你確實想使用雙字節對齊類型的引用來操作單字節對齊對象,那么你在定義該引用時必須使用__packed關鍵字!
上一篇:ARM處理器的節能優勢
下一篇:stm32入門——跑馬燈(基于stm32f103zet6)
推薦閱讀
史海拾趣
隨著物聯網技術的快速發展,昆泰芯微電子緊跟時代步伐,深度布局物聯網應用領域。公司專注于面向物聯網應用的傳感器芯片研發、生產和銷售,致力于成為傳感器信號鏈及物聯網芯片的行業領導者。在消費電子、智能制造、智能交通、智能家居以及新能源汽車等多個領域,昆泰芯微電子的產品得到了廣泛應用,為這些領域的發展提供了強有力的技術支持。
2009年,CSR plc以1.36億美元成功收購了SiRF技術控股公司。這一收購為CSR plc帶來了GPS和A-GPS的知識產權組合、航位推算和位置中心平臺等重要技術資源,使其在世界無晶圓半導體廠商中的地位得到了進一步鞏固。此次收購也讓CSR plc的客戶群體得到了極大的擴展,包括世界排名前七位的手機制造商中的六家,以及世界前五位的個人導航設備制造商等。
背景:2004年,為了適應國家經濟發展和產業布局調整的需要,振華新云面臨從凱里白午山區調遷至貴陽市新添高新技術開發區的挑戰。
內容:在調遷過程中,公司克服了種種困難,如設備搬遷、員工安置、生產線重建等。通過精心組織和周密安排,確保了調遷工作的順利進行。
成果:調遷完成后,振華新云在貴陽市新添高新技術開發區迎來了新的發展機遇,為公司后續的快速發展提供了有力保障。
Clever Little Box公司成立于1964年,當時正值電子行業的蓬勃發展時期。創始人憑借對音頻和電子技術的深厚理解,以及對市場的敏銳洞察,決定成立這家公司,專注于音頻和電子組件的分銷。創業初期,公司面臨著資金短缺、市場競爭激烈等諸多挑戰,但創始人憑借堅定的信念和不懈的努力,逐漸在市場中站穩了腳跟。
近年來,AAC公司一直致力于技術創新和產品研發。在聲學、光學、觸感、傳感器及半導體等領域,AAC積累了近三十年的技術經驗。這些技術積累使得AAC能夠不斷推出具有創新性和競爭力的新產品。例如,AAC在某次創新峰會上發布了超寬頻音質的Opera高低音分頻方案、旗艦級體驗大眾化的聲學觸覺一體化Combo方案以及安卓觸感“天花板級”的仿生振感馬達等三大技術新品。這些新品的發布不僅彰顯了AAC在電聲元器件領域的技術實力,也為智能手機等消費電子行業注入了新的活力。
這五個故事只是AAC公司發展歷程中的一部分,但它們足以展現AAC在電子行業中的不斷進取和創新精神。從一個合資企業起步,到如今成為全球著名的電聲元器件制造商之一,AAC憑借敏銳的市場洞察、堅定的發展決心以及持續的技術創新,在電子行業書寫了自己的傳奇篇章。
請注意,以上內容僅是基于參考文章的事實性描述,并未涉及對AAC公司的任何評價或判斷。同時,由于我無法獲取AAC公司的實時信息,因此以上內容可能與AAC公司的最新發展情況有所出入。如需了解更多關于AAC公司的最新信息,建議查閱相關新聞或訪問AAC公司官方網站。
FEIG ELECTRONIC成立于1978年,作為德國射頻識別(RFID)系統的先驅,公司從一開始就專注于RFID技術的研發與制造。在創立初期,FEIG憑借其獨特的技術視角和對市場需求的敏銳洞察,成功開發了一系列RFID系統,為物流、零售等行業提供了有效的解決方案。通過不斷的技術創新和市場拓展,FEIG逐漸在RFID領域嶄露頭角。
放大器與比較器的主要區別是閉環特性! 放大器大都工作在閉環狀態,所以要求閉環后不能自激.而比較器大都工作在開環狀態更 追求速度.對于頻率比較低的情況放大器完全可以代替比較器(要主意輸出電平),反過來比 較器大部分情況不能當作放大器使用. ...… 查看全部問答∨ |
本帖最后由 paulhyde 于 2014-9-15 08:58 編輯 在第三屆“ZLG杯”中國大學生ARM嵌入式系統電子設計競賽我們組的作品“基于EasyARM1138和RFID的病房無線體溫監測終端”排在65名(全國500組),獲得“優勝獎。 其實,對于這樣的成績,我們 ...… 查看全部問答∨ |
偶是做web開發轉過來的,什么都搞不定,很郁悶很郁悶。 開個題散點分給大家。 順便調查一哈大家做嵌入式開發的工資情況 ——地點,工作年限,工資水平。… 查看全部問答∨ |
CETK測試sd卡驅動的問題 用CETK測試SD卡的驅動的時候,一共有三項。 其中Strorage Device Block Driver Read/Write Test Cases 和Storage Device Block Driver API Test Cases這兩項都能通過, 另外一項:Storage Device Block Driver Benchm ...… 查看全部問答∨ |
本帖最后由 ddllxxrr 于 2016-1-7 17:11 編輯 片子是在淘寶上買的MSP430F1232,高速晶振在沒有軟件設置的時候竟然起振了,Jtag一直都連不上去。后來果斷換了一家實體店,片子一換上去就好了。以前買過51的假片,現在竟然買到430的啦!無良賣家是在 ...… 查看全部問答∨ |
|
TI 推出首個用于光度測定的完全集成的模擬前端系列。 AFE44xx 系列集成了所有前端組件,以及相關的典型光度測定解決方案的計時控制電路。 應用包括臨床和家庭保健脈動式血氧計、基于光度測定的血糖儀,以及基于光體積描記器 (PPG) 的心率監視器。通 ...… 查看全部問答∨ |
學模擬+TINA-TI Make Design Easier 本帖最后由 dontium 于 2015-1-23 11:44 編輯 博文鏈接:deyisupport./blog/b/analogwire/archive/2013/11/02/tina.aspx 就像博文最開始說的那樣,雖然自己在試驗室動手調試、測量電路是最直觀的,但有時候卻不是最有效的 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- NVIDIA驅動花式翻車!外媒:史上最糟糕的發布
- 果鏈巨頭緊急回應美對華關稅:影響有限 進口商承擔主要成本
- Linux系統編程篇丨迅為IMX6ULL-對應視頻講解
- 嵌入式學習丨4412開發板-uboot源碼-匯編-源碼分析(一)嵌入式學習丨4412開發板-uboot源碼-匯
- 迅為IMX6ULL開發板-主頻和時鐘配置例程(二)
- 迅為IMX6ULL開發板-主頻和時鐘配置例程
- 迅為IMX6ULL開發板安裝VMware Tool工具
- i.MX6ULL終結者Debian文件系統的構建i.MX6ULL 移植Debian文件系統
- 迅為i.MX6ULL開發板按鍵例程編譯及運行
- 迅為-i.MX6開發板手冊更新-非設備樹uboot-修改默認環境變量