static
BOOL SetFrequencyControl1(
PDEVICE_INSTANCE DeviceInstance,
MASK *Mask
)
{
ULONG Tmp;
EnterCriticalSection(&DeviceInstance->ControlMutex);
Tmp = READ_REGISTER_ULONG((PULONG)&DeviceInstance->SysRegPtr->freqctrl1);
Tmp &= Mask->AndMask;
Tmp |= Mask->OrMask;
WRITE_REGISTER_ULONG((PULONG)&DeviceInstance->SysRegPtr->freqctrl1, Tmp);
DEBUGMSG(ZONE_CLOCKS,(L"GPIO:FreqControl2 = %08x (And=%08x, Or=%08x)\r\n", Tmp, Mask->AndMask, Mask->OrMask));
LeaveCriticalSection(&DeviceInstance->ControlMutex);
return TRUE;
}
一个小菜鸟想请教那个GPIO里面的上面那段程序中 DEBUGMSG(ZONE_CLOCKS,(L"GPIO:FreqControl2 = %08x (And=%08x, Or=%08x)\r\n", Tmp, Mask->AndMask, Mask->OrMask));高手们能否讲解下?
搜一下DEBUG ZONE吧 这个东西就是调试信息
可以看做当#define ZONE_CLOCKS 1的时候
printf("GPIO:FreqControl2 = %08x (And=%08x, Or=%08x)\r\n", Tmp, Mask->AndMask, Mask->OrMask)
参看《Platform Builder for Microsoft Windows CE 5.0的帮助文档》得知:
在源代码中使用宏定义来输出调试信息,Release and Debug 结构调用不同的宏:
Release结构宏使用下列宏:
RETAILMSG(cond, printf_exp):显示打印信息;
RETAILLED(cond, parms):输出LED的WORD值;
RETAILREGISTERZONES(hmod):为Release结构使用debug zones;
ERRORMSG(cond, printf_exp):在打印信息前打印Error: File Line;
Debug结构宏使用三个Release结构宏和以下Debug结构宏:
DEBUGREGISTER(hmod):为Debug结构使能debug zones;
DEBUGMSG(cond, printf_exp):显示打印信息;
DEBUGLED(cond, parms):输出LED的WORD值;
而你问的DEBUGMSG()函数就是Debug结构下使用的显示打印信息,用于调试程序,意思正如aaassd_cn所示:
当#define ZONE_CLOCKS 1的时候
printf("GPIO:FreqControl2 = %08x (And=%08x, Or=%08x)\r\n", Tmp, Mask->AndMask, Mask->OrMask)
ZONE_CLOCKS 为真时,输出打印信息GPIO:FreqControl2 = %08x (And=%08x, Or=%08x)\r\n
其实可以不用这个打印函数的,
我在build的时候都是选的release版的,
如果你确实想要在某一个驱动程序里面做打印处理那么用RETAILMSG就可以了,
RETAILMSG(1, TEXT(“”)):在很多的驱动里面都用到,
-----------------
当然如果你要调试的驱动是用的DEBUGMSG
你也可以在你要要调试的 文件中加上
#define DEBUGMSG RETAILMSG
这样DEBUGMSG 的信息就可以打印出来了 !
------------