嵌入式常用宏定義(精)_第1頁
嵌入式常用宏定義(精)_第2頁
嵌入式常用宏定義(精)_第3頁
嵌入式常用宏定義(精)_第4頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、寫好C語言,漂亮的宏定義很重要2009-12-09 17:08寫好C語言,漂亮的宏定義很重要,使用宏定義可以防止出錯,提高可移植性,可讀性,方便性 等等。下面列舉一些成熟軟件中常用得宏定義。1,防止一個頭文件被重復(fù)包含 #ifndef COMDEFJH #defi ne COMDEF_H頭文件內(nèi)容#en dif2,重新定義一些類型,防止由于各種平臺和編譯器的不同,而產(chǎn)生的類型字節(jié)數(shù)差異,方便移植。typ edefun sig ned charboolea n;/* Boolea n value type. */typ edefun sig ned long intui nt32;/* Un s

2、ig ned 32 bit value */typ edefun sig ned shortui nt16;/* Un sig ned 16 bit value */typ edefun sig ned charuin t8;/* Un sig ned 8 bit value */typ edefsig ned long intin t32;/* Sig ned 32 bit value */typ edefsig ned shortin t16;/* Sig ned 16 bit value */typ edefsig ned charin t8;/* Sig ned 8 bit value

3、 */下面的不建議使用typ edefun sig ned charbyte;typ edefun sig ned shortword;typ edefun sig ned longdword;typ edefun sig ned charuint1;typ edefun sig ned shortuin t2;/* Un sig ned 8 bit value type. */* Un si nged 16 bit value type. */* Un sig ned 32 bit value type. */* Un sig ned 8 bit value type. */* Un sig

4、 ned 16 bit value type. */typedefunsigned longuint4;/* Unsigned 32 bit value type. */typedefsigned charint1;/* Signed 8 bit value type. */typedefsigned shortint2;/* Signed 16 bit value type. */typedeflong intint4;/* Signed 32 bit value type. */typedefsigned longsint31;/* Signed 32 bit value */typede

5、fsigned shortsint15;/* Signed 16 bit value */typedefsigned charsint7;/* Signed 8 bit value */3,得到指定地址上的一個字節(jié)或字 #define MEM_B( x ) ( *( (byte *) (x) ) ) #define MEM_W( x ) ( *( (word *) (x) ) )4,求最大值和最小值#define MAX( x, y ) ( (x) > (y) ? (x) : (y) )#define MIN( x, y ) ( (x) < (y) ? (x) : (y) )5,得

6、到一個field在結(jié)構(gòu)體(struct)中的偏移量/*lint -e545 */ ( (dword) &( type *) 0)-> field ) /*lint +e545 */6,得到一個結(jié)構(gòu)體中field 所占用的字節(jié)數(shù)#define FSIZ( type, field ) sizeof( (type *) 0)->field )7,按照 LSB 格式把兩個字節(jié)轉(zhuǎn)化為一個 Word #define FLIPW( ray ) ( (word) (ray)0) << 8) + (ray)1 )8,按照 LSB 格式把一個 Word 轉(zhuǎn)化為兩個字節(jié)#define

7、(ray)1 = (val) & 0xFF)9,得到一個變量的地址( word 寬度)#define B_PTR( var ) ( (byte *) (void *) &(var) ) #define W_PTR( var ) ( (word *) (void *) &(var) )10,得到一個字的高位和低位字節(jié) #define WORD_LO(*) (byte) (word)(*) & 255) #define WORD_HI(*) (byte) (word)(*) >> 8)11,返回一個比 X 大的最接近的 8 的倍數(shù)#define RND8

8、( x )(x) + 7) / 8 ) * 8 )12,將一個字母轉(zhuǎn)換為大寫 #define UPCASE( c ) ( (c) >= 'a' && (c) <= 'z') ? (c) - 0x20) : (c) )13,判斷字符是不是 10 進值的數(shù)字#define DECCHK( c ) (c) >= '0' && (c) <= '9')14,判斷字符是不是 16 進值的數(shù)字#define(c) >= 'a' && (c) <=

9、 'f') )15,防止溢出的一個方法 #define INC_SAT( val ) (val = (val)+1 > (val) ? (val)+1 : (val)16,返回數(shù)組元素的個數(shù) #define ARR_SIZE( a ) ( sizeof( (a) ) / sizeof( (a0) ) ) 17,返回一個無符號數(shù) n 尾的值 MOD_BY_P0WER_OF_TWO(X,n) =X%(2n)( (dword)(val) & (dword)(mod_by)-1) )18 ,對于 IO 空間映射在存儲空間的結(jié)構(gòu),輸入輸出處理#define inp(port

10、)(*(volatile byte *) (port)#define inpdw(port)(*(volatile dword *)(port)#define outp(port, val) (*(volatile byte *) (port) = (byte) (val)#define outpw(port, val) (*(volatile word *) (port) = (word) (val)#define outpdw(port, val) (*(volatile dword *) (port) = (dword) (val)19,使用一些宏跟蹤調(diào)試A N S I 標準說明了五個預(yù)

11、定義的宏名。它們是:如果編譯不是標準的, 則可能僅支持以上宏名中的幾個, 或根本不支持。 記住編譯程序也許還提供其它預(yù)定義的宏名。_ L I N E _及_ F I L E _宏指令在有關(guān) # l i n e 的部分中已討論,這里討論其余的宏名。_ D AT E _宏指令含有形式為月 /日/年的串, 表示源文件被翻譯到代碼時的日期。源代碼翻譯到目標代碼的時間作為串包含在 _ T I M E _中。串形式為時:分:秒。如果實現(xiàn)是標準的, 則宏_ S T D C _含有十進制常量 1。如果它含有任何其它數(shù),則實現(xiàn)是非標準的。可以定義宏,例如 :當定義了 DEBUG,輸出數(shù)據(jù)信息和所在文件所在行 #ifdef _DEBUG#define DEBUGMSG(msg,date)printf(msg)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論