**:
巨集的確是個好**,在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位 多工 多執行緒的完全搶占式的實時作業系統。它提供了眾多強大工具適應於快速構建新一代記憶體少 體積小的智慧型裝置,如工業控制器 手持式裝置等。該系統的特...