《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業界動態 > 嵌入式領域,你要了解你的編譯器

嵌入式領域,你要了解你的編譯器

2015-09-18
關鍵詞: 嵌入式 編譯器

  我做嵌入式行業,編程也多和硬件打交道,好多人說編譯器只是工具,重要的在于算法和思想。這話說的本來沒錯,但要有一個條件在先:那就是你真正掌握了你所用的編譯器。但就我來看,真正熟悉編譯器的卻并不多見。當你深入了解一個編譯器后,你能像用匯編一樣用C,可以像匯編那樣隨心所欲的操作MCU!
  了解一個編譯器,首先應該有匯編的基礎,不要求能用匯編編寫程序或做過項目,但至少看的懂!不熟悉匯編的嵌入式程序員是不合格的程序員!
  了解一個編譯器,最好的方法是看它自帶的幫助文件,至少要看過Compiler User's Guide ,至少遇到問題會想到到幫助中查找方法,雖然幫助大多是E文。
  工作以來一直使用keil MDK編譯器,對于這個編譯器的界面以及設置,可以參考博文:http://blog.csdn.net/zhzht19861011/article/details/5964827,在這里先來看一看keil MDK編譯器的一些細節,看看這些細節,你知道多少。
  1. 在所有的內部和外部標識符中,大寫和小寫字符不同。
  2. 默認情況下,char 類型的數據項是無符號的。它們可以顯式地聲明為signed char 或 unsigned char。
  3.基本數據類型的大小和對齊:
  類型         位大小        按字節自然對齊
  char 8 1
  short 16 2
  int 32 4
  long 32 4
  long long 64 8
  float 32 4
  double 64 8
  long double 64 8
  所有指針 32 4
  bool (僅用于C++ ) 8 1
  _Bool (僅用于C ) 8 1
  wchar_t (僅用于C++ ) 16 2
  注:a. 通常局部變量保留在寄存器中,但當局部變量太多放到棧里的時候,它們總是字對齊的。例如局部char變量在棧里以4為邊界對齊;
  b. 壓縮類型的自然對齊方式為1。使用關鍵字__packed來壓縮特定結構,將所有有效類型的對齊邊界設置為1.
  4. 整數以二進制補碼形式表示;浮點量按IEEE格式存儲。
  5. 有符號量的右移是算術移位,即移位時要保證符號位不改變。
  6. 對于int類的值:超過31位的左移結果為零;無符號值或正的有符號值超過31位的右移結果為零。負的有符號值移位結果為-1。
  7. 整數除法的余數的符號于被除數相同,由ISO C90標準得出;
  8. 如果整型值被截斷為短的有符號整型,則通過放棄適當數目的最高有效位來得到結果。如果原始數是太大的正或負數,對于新的類型 ,無法保證結果的符號將于原始數相同。所以強制類型轉化的時候,對轉換的結果一定要清晰。
  9. 整型數超界不引發異常;像unsigned char test;       test=1000;這類是不會報錯的,賦值或計算時務必小心。
  10. 默認情況下,整型數除以零返回零。
  11. 對于兩個指向相同類型和對齊屬性的指針相減,計算結果如下表達式所示:
  ((int)a ? (int)b) / (int)sizeof(指向數據的類型)
  12. 在嚴格C中,枚舉值必須被表示為整型,例如,必須在?2147483648 到+2147483647的范圍內。但keil MDK自動使用對象包含enum范圍的最小整型來實現(比如char類型),除非使用編譯器命令??enum_is_int 來強制將enum的基礎類型設為至少和整型一樣寬。超出范圍的枚舉值默認僅產生警告:#66: enumeration value is out of "int" range
  13. 結構體:struct {
  char c;
  short  s;
  int        x;
  }          //這個結構體占8個字節
  但是,結構體:
  struct {
  char c;
  int        x;
  short  s;
  }          //這個結構體占12個字節
  這是為什么?
  對于結構體填充,據定義結構的方式,keil MDK編譯器用以下方式的一種來填充結構:
  定義為static或者extern的結構用零填充;
  棧或堆上的結構,例如,用 malloc() 或者 auto定義的結構,使用先前存儲在那些存儲器位置的任何內容進行填充。不能使用memcmp() 來比較以這種方式定義的填充結構!
  14. 編譯器不對聲明為volatile 類型的數據進行優化。  我發現還有不少剛入門的嵌入式程序員從沒見過這個關鍵字.
  15. __nop():延時一個指令周期,編譯器絕不會優化它。如果硬件支持NOP指令,則該句被替換為NOP指令,如果硬件不支持NOP指令,編譯器將它替換為一個等效于NOP的指令,具體指令由編譯器自己決定。
  16. 還有一些編譯器知識,我放在了另外一篇博文里,《有趣的keil mdk細節》。

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲美女中出| 亚洲国产综合视频在线观看| 狠狠色综合网| 国产精品久久久久久久久| 欧美另类变人与禽xxxxx| 老鸭窝毛片一区二区三区| 性欧美暴力猛交另类hd| 欧美视频网站| 欧美激情视频免费观看| 一区二区欧美日韩| 亚洲区国产区| 亚洲激情视频在线播放| 亚洲第一视频网站| 久久精品成人欧美大片古装| 午夜精品在线看| 一区久久精品| 好看的日韩av电影| 激情欧美丁香| 在线色欧美三级视频| 一区二区视频免费在线观看 | 欧美视频一区在线| 欧美日韩精品二区| 欧美色中文字幕| 欧美日韩在线第一页| 欧美性生交xxxxx久久久| 欧美手机在线视频| 国产精品午夜春色av| 国产欧美一二三区| 国产一区二区三区黄视频| 国产综合视频在线观看| 尹人成人综合网| 亚洲国产一区二区a毛片| 亚洲日本激情| 国产精品99久久久久久久久| 亚洲午夜在线观看视频在线| 午夜精品在线| 亚洲区第一页| 亚洲午夜未删减在线观看| 午夜久久影院| 久久夜精品va视频免费观看| 欧美极品一区二区三区| 国产精品高清免费在线观看| 国产视频久久| 亚洲国产高清自拍| 一本久久综合亚洲鲁鲁| 欧美一级视频免费在线观看| 亚洲国产精品电影在线观看| 一本久久青青| 欧美影院午夜播放| 欧美a级片网站| 欧美午夜视频| 韩曰欧美视频免费观看| 亚洲精品五月天| 亚洲欧美一区二区原创| 亚洲国产一区二区视频| 亚洲一区二区免费在线| 久久激情视频久久| 欧美另类一区| 国产亚洲成av人片在线观看桃 | 欧美综合二区| 一本色道久久加勒比精品| 欧美一区二区三区精品| 欧美成人精品在线| 国产精品一区二区久久久久| 一区国产精品| 亚洲影院免费| 亚洲美女精品久久| 久久精品99国产精品日本| 欧美片第1页综合| 国产一区二区日韩精品欧美精品| 亚洲三级网站| 久久精品国产一区二区电影 | 久久国产精品一区二区| 一区二区久久久久| 久久视频一区| 国产精品第一区| 亚洲福利小视频| 亚洲欧美日韩综合国产aⅴ| 亚洲精品精选| 久久精品一区二区三区四区| 欧美日韩四区| 在线电影欧美日韩一区二区私密| 中国女人久久久| 99国产精品视频免费观看| 久久亚洲欧美| 国产精品中文在线| 一区二区欧美在线| 亚洲精品免费在线| 久色婷婷小香蕉久久| 国产精品一二| 99精品热视频只有精品10| 亚洲精品久久久蜜桃| 可以看av的网站久久看| 国产午夜精品一区理论片飘花 | 亚洲黄一区二区| 亚洲欧美日韩电影| 欧美日韩国产影片| 亚洲电影自拍| 久久激情视频免费观看| 欧美亚洲一区在线| 国产精品v亚洲精品v日韩精品 | 亚洲一区二区三区四区视频| 免费日韩视频| 国产一区二区三区久久久久久久久| 99国产一区| 一区二区成人精品| 欧美成年人网站| 伊人春色精品| 亚洲电影在线播放| 久久精品五月| 狠狠色2019综合网| 小处雏高清一区二区三区| 亚洲免费中文字幕| 欧美偷拍另类| 一区二区三区国产| 亚洲香蕉视频| 欧美日韩一区二区三区在线观看免| 亚洲日本国产| 99re在线精品| 欧美精品一区二区在线观看| 1024国产精品| 亚洲精品男同| 欧美日韩国产免费| 99re6热只有精品免费观看| 99v久久综合狠狠综合久久| 欧美精品在线观看播放| 最新国产成人在线观看| 一区二区电影免费观看| 欧美三区视频| 亚洲色无码播放| 亚洲欧美综合精品久久成人| 国产精品久久久久一区二区| 亚洲私人黄色宅男| 午夜亚洲福利| 国产日韩在线看| 久久精品三级| 欧美精品一区二| 99在线|亚洲一区二区| 亚洲综合色网站| 国产乱码精品| 久久精品国产清高在天天线| 免费国产自线拍一欧美视频| 亚洲国产欧美一区二区三区久久 | 欧美久久影院| 中文精品视频| 久久不射电影网| 在线播放豆国产99亚洲| 亚洲乱码国产乱码精品精98午夜| 欧美理论视频| 亚洲影院免费| 久久综合色8888| 亚洲精品久久在线| 午夜国产精品影院在线观看| 国产日韩欧美高清免费| 亚洲国产精品视频一区| 欧美国产亚洲另类动漫| 999亚洲国产精| 欧美自拍偷拍| 亚洲第一网站| 亚洲午夜免费视频| 国内精品伊人久久久久av一坑| 91久久精品国产91久久性色| 欧美日韩精品国产| 欧美一级免费视频| 欧美高清一区二区| 亚洲网站在线播放| 老鸭窝91久久精品色噜噜导演| 日韩午夜免费| 久久精品国产一区二区三区| 亚洲国产日韩一级| 新67194成人永久网站| 亚洲第一区中文99精品| 亚洲欧美日本另类| 在线观看成人小视频| 亚洲一级影院| 一区二区视频免费完整版观看| 亚洲一二三区视频在线观看| 国产真实精品久久二三区| 一本一本久久a久久精品牛牛影视| 国产精品视频yy9299一区| 亚洲啪啪91| 国产乱码精品一区二区三区忘忧草 | 欧美久久电影| 欧美在线日韩在线| 欧美日韩亚洲视频一区| 久久国产黑丝| 欧美色另类天堂2015| 亚洲国产小视频| 国产精品亚发布| 99re成人精品视频| 国产一区二区三区久久悠悠色av| 中文精品视频一区二区在线观看| 国产综合久久| 亚洲欧美日韩高清| 亚洲人成在线影院| 久久视频这里只有精品| 中日韩午夜理伦电影免费| 欧美大片免费观看| 欧美一区二区三区男人的天堂| 欧美日韩免费观看一区二区三区|