遇到的问题:
自己解决加入串口打印信息碰到了郁闷的事情。
刚开始,我只想把C:/WINCE500/PUBLIC/COMMON/OAK/DRIVERS/SERIAL/COM_MDD2编译成debug版本,来打印信息的。
我采用了如下方法:
第一种:
将下面这句代码加入到驱动所在目录中的sources文件中即可:
CDEFINES=$(CDEFINES) -DDEBUG
第二种
#undef DEBUGMSG
#define DEBUGMSG(x,s) NKDbgPrintfW s
这样这个驱动文件里的所有调试信息都会打印出来,并且不理会DebugZone的设置。
没有想到照样没有输出信息,真是神了,而且串口编译出来确实可用的。并且以前第二种方法我在BSP的驱动下确实可行的。
后来我干脆重新建立工程,把整个NK都编译成debug,很多启动信息,但是就是没有C:/WINCE500/PUBLIC/COMMON/OAK/DRIVERS/SERIAL/COM_MDD2的信息,真是气人啊。
后来发现这个DEBUGMSG和RETAILMSG都是使用NKDbgPrintfW 实现的,我直接使用NKDbgPrintfW 放在DLL入口也不行。
怎么回事啊,很是郁闷,大家来说说咋回事呢?
解决的办法:
我刚才把原来的工程删除了,留下个工程模板
并且在串口的MDD.c中加上
//------------add 2009-02-11-------
#define DEBUG 1
#include <dbgapi.h>
#undef DEBUGMSG
#define DEBUGMSG(x,s) NKDbgPrintfW s //还是这个牛B,编译的工程非常小。以后就这么干了。
然后以build and sysgen方式编译整个工程,没有想到这次居然出来了。
难道是这个设置SHIP_BUILD这个环境变量为0起了作用?
现在慢慢看着先了。
如果修改一点点public下的代码就要整个build and sysgen方式编译那太不厚道了吧。
等下试试,用驱动调试助手来调试,一定很有意思。
原因分析:
,突然想起这个MDD中断的事情,无意间意识到这个MDD线程启动是靠PDD线程来带动的,其实这样已经获得了成功了。
只是我一直相信网上大家的文章介绍,陷入了 泥塘。其实这个PDD的线程已经完成调用MDD的功能。