Windows CE驅動開發常用巨集定義

2021-06-14 00:49:07 字數 3112 閱讀 5073

**:

巨集的確是個好**,在ce驅動開發過程中,正確,準確的使用恰當的巨集,能使得**非常精煉,書之精彩,閱之愉悅.對於開發中經常用到的一些巨集,

我在這裡做了一些總結.

暫存器操作

8bit

#defineinreg8(x) 

read_register_uchar((uchar*)(x))

#define outreg8(x,y) 

write_register_uchar((uchar*)(x), (uchar)(y))

#define setreg8(x,y) 

outreg8(x, inreg8(x)|(y))

#define clrreg8(x,y) 

outreg8(x, inreg8(x)&~(y))

#define insreg8(addr, mask, val) outreg8(addr,((inreg8(addr)&(~(mask))) | val))

#define extreg8(addr, mask, lsh) ((inreg8(addr) &mask) >> lsh)

16bit

#defineinreg16(x) 

read_register_ushort((ushort*)(x))

#define outreg16(x,y) 

write_register_ushort((ushort*)(x),(ushort)(y))

#define setreg16(x,y) 

outreg16(x, inreg16(x)|(y))

#define clrreg16(x,y) 

outreg16(x, inreg16(x)&~(y))

#define insreg16(addr, mask, val) outreg16(addr,((inreg16(addr)&(~(mask))) | val))

#define extreg16(addr, mask, lsh) ((inreg16(addr) &mask) >> lsh)

32bit

#defineinreg32(x) 

read_register_ulong((ulong*)(x))

#define outreg32(x,y) 

write_register_ulong((ulong*)(x), (ulong)(y))

#define setreg32(x,y) 

outreg32(x, inreg32(x)|(y))

#define clrreg32(x,y) 

outreg32(x, inreg32(x)&~(y))

#define insreg32(addr, mask, val) outreg32(addr,((inreg32(addr)&(~(mask))) | val))

#define extreg32(addr, mask, lsh) ((inreg32(addr) &mask) >> lsh)

位域操作

#define extreg8bf(addr, bit) (extreg8(addr, csp_bitfmask(bit),(bit ## _lsh)))

#define insreg8bf(addr, bit, val) (insreg8(addr, csp_bitfmask(bit),csp_bitfval(bit, val)))

#define extreg16bf(addr, bit) (extreg16(addr, csp_bitfmask(bit),(bit ## _lsh)))

#define insreg16bf(addr, bit, val) (insreg16(addr,csp_bitfmask(bit), csp_bitfval(bit, val)))

#define extreg32bf(addr, bit) (extreg32(addr, csp_bitfmask(bit),(bit ## _lsh)))

#define insreg32bf(addr, bit, val) (insreg32(addr,csp_bitfmask(bit), csp_bitfval(bit, val)))

#define csp_bitfext(var, bit) ((var &csp_bitfmask(bit)) >> (bit ##_lsh))

#define csp_bitfclr(var, bit) (var &=(~csp_bitfmask(bit)))

#define csp_bitfins(var, bit, val) \

(csp_bitfclr(var, bit)); (var |= csp_bitfval(bit, val))

#define csp_bitfmask(bit) (((1u <<(bit ## _wid)) - 1) << (bit ##_lsh))

#define csp_bitfval(bit, val) ((val)<< (bit ## _lsh))

函式#define widen2(x) l ## x

#define widen(x) widen2(x)

#define __wfunction__ widen(__function__)

#define csp_func_trace_entry() \

debugmsg(1,(text("+%s\r\n"), __wfunction__))

#define csp_func_trace_exit() \

debugmsg(1,(text("-%s\r\n"), __wfunction__))

#define dllexport __declspec( dllexport )

其他有用資訊

如果重現重複定義的warning,可以採用以下辦法來解除之前的定義

#undef inreg8

#undef outreg8

#undef setreg8

#undef clrreg8

#undef inreg16

#undef outreg16

#undef setreg16

#undef clrreg16

#undef inreg32

#undef outreg32

#undef setreg32

#undef clrreg32

windows CE驅動開發學習筆記

首先是wince驅動的分類問題。按照書上講的說ce下驅動分成單體驅動和分層驅動,而看到另一種說法是本機驅動和流式驅動。經過microsun大哥的指點,把這兩種分類法分開了。在這裡引用一下 單體與分層只是從 的形式上做的分類.分層驅動 上分為pdd與mdd,一般的微軟已經實現了mdd,可能也實現了pd...

windowsCE驅動程式問題集錦

如何讓系統載入自己寫的驅動程式?兩種辦法 1 在 hkey local machine drivers builtin 下新增註冊鍵。2 在應用程式中呼叫activatedeviceex。在一些檔案中用分號來表示注釋,例如下面的內容 在 cesysgen.前加了 有沒有什麼特別的含義?在wince的...

Windows CE下AD驅動設計與實現

本文 http developer.51cto.com art 200907 136858.htm 引言 windows ce.net 是乙個32位 多工 多執行緒的完全搶占式的實時作業系統。它提供了眾多強大工具適應於快速構建新一代記憶體少 體積小的智慧型裝置,如工業控制器 手持式裝置等。該系統的特...