|
wince5.0 bsp自制驱动中无法使用retailmsg打印调试信息
[复制链接]
【我的环境】:
友善的mini2440,用厂商提供的5.0 BSP,XP SP3 + PB5 + Wince5,自己做了一个i2c的驱动。
1.release版本下编译通过,确定不是ship版本;
2.oal下debug.c中串口相关的函数厂商也实现了:OEMInitDebugSerial()/ OEMWriteDebugLED()/ OEMWriteDebugString()/ OEMWriteDebugByte()/ OEMReadDebugByte()/ OEMClearDebugCommError(),而且指定的输出端口也是正确的:UART0
3.
想在DllEntry()函数下面case DLL_PROCESS_ATTACH分支里用retailmsg打印一些信息,来测试驱动有没有没成功加载。
【我的代码】:
...
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
DEBUGREGISTER((HINSTANCE)hinstDLL);
//add by sy 初始化就点亮所有LED
IIC_IOControl(0, IO_CTL_LED_ALL_ON, NULL, 0, NULL, 0, NULL);
RETAILMSG(1,(TEXT("========I2C module loaded!========\r\n")));
return TRUE;
...
...
在打印串口信息之前,还点亮了所有的4个LED来验证。后来发现,LED全部亮了,表示这一段分支肯定执行到了。
但是串口没有打印我想要的信息出来(确定没有其他任何模块会做同样的全点亮动作),但是超级终端中就是没有出现我想要的信息来,只有其他模块的一些调试信息。
【实际的串口输出】:
Windows CE Firmware Init
INFO: Initializing system interrupts...
INFO: Initializing system clock(s)...
INFO: Initializing driver globals area...
SDMMC config set rGPGCON: 82a982
OEMInit Done...
Sp=ffffc7cc
NandFlash FMD_Init
NandFlash FMD_Init Done
+++PWR: Process Attach+++
>PWR_Init(602ED68)
HW_Init : GetProcAddress
HW_Init : ERROR_INVALID_PARAMETER
HW_Init : InitializeCriticalSection
HW_Init : VirtualAlloc
HW_Init : pPWR->State
HW_Init : HW_InitRegisters
HW_Init : CreateEvent
HW_Init : InterruptInitialize
HW_Init : CreateThread
HW_Init : CeSetThreadPriority
HW_Init OOCS: 0x00
HW_Init INT1: 0x00
HW_Init INT2: 0x00
HW_Init INT3: 0x00
HW_Init : Donw
>PWR_Open(0x37c80, 0x0, 0x3)
>PWR_IOControl(0x321000, 0x0, 0, 0x60379c8)
>PWR_Open(0x37c80, 0x0, 0x3)
PWR_Close(0x37c80)
到这里系统就启动成功了。但是没有我驱动里面想打印的东西。
我在代码中找到打印“+++PWR: Process Attach+++”的地方:bsp下的一个pwr.c文件,代码如下:
BOOL
DllEntry(
HINSTANCE hinstDll, /*@parm Instance pointer. */
DWORD dwReason, /*@parm Reason routine is called. */
LPVOID lpReserved /*@parm system parameter. */
)
{
if ( dwReason == DLL_PROCESS_ATTACH ) {
DEBUGREGISTER(hinstDll);
RETAILMSG (1, (TEXT("+++PWR: Process Attach+++\r\n")));
}
if ( dwReason == DLL_PROCESS_DETACH ) {
RETAILMSG (1, (TEXT("PWR: Process Detach\r\n")));
}
return(TRUE);
}
我把加号换成了星号*** ***,重新编译nk.bin并下载执行,然后观察串口输出,发现加号确实被替换了星号。
为什么这里也用的是retailmsg而且可以打印出消息,我的i2c驱动里面就不行呢?跪求各位大侠指点!
|
|