ok6410 改COM0为普通串口,COM3为调试串口

网上搜了几天,问人无数,骚扰客服,不得要领。最终得以解决,摸索到方法如下:

 

1.smdk6410.bat里
set BSP_NOUART0=1将这句的值去掉
set BSP_DEBUGPORT=SERIAL_UART0将这句屏蔽掉

2.OAL下debug.c
把判断debug_port的分支和条件都注掉,只留一个想改为调试口的分支的实现部分。

3.smdk6410_serial.cpp
SetDTR()实现注掉。

 

ok了

 

前两步没有悬念。只做前两步的话,可以看到COM0不输出wince的启动信息,改由COM3输出。但在应用程序中调用CreateFile无法打开COM0,错误号55。注册表中看到当前加载的已经是COM0~2,应当没有错误才是。比较COM0和COM3输出的启动信息,在COM3输出时多出了以下一段话:

 

DEBUG: CreateSerialObject 0
-OALIntrRequestSysIntr(irq = 61, sysIntr = 33)
Exception 'Data Abort' (4): Thread-Id=00d20002(pth=85b71510), Proc-Id=00400002(pprc=823f9308) 'NK.EXE', VM-active=01e90002(pprc=85af9780) 'udevice.exe'
PC=c0d01e40(smdk6410_serial.dll+0x00001e40) RA=c0d01d94(smdk6410_serial.dll+0x00001d94) SP=d27ae904, BVA=00000000
Exception 'Raised Exception' (-1): Thread-Id=00d20002(pth=85b71510), Proc-Id=00400002(pprc=823f9308) 'NK.EXE', VM-active=01e90002(pprc=85af9780) 'udevice.exe'
PC=c003bc70(k.coredll.dll+0x0001bc70) RA=8011c4c8(kernel.dll+0x000064c8) SP=d27ae1a0, BVA=ffffffff
Exception 'Prefetch Abort' (3): Thread-Id=04a90002(pth=85784324), Proc-Id=00400002(pprc=823f9308) 'NK.EXE', VM-active=01e90002(pprc=85af9780) 'udevice.exe'
PC=c0d02f90(???+0xc0d02f90) RA=c004bdc4(k.coredll.dll+0x0002bdc4) SP=d327fe84, BVA=c0d02f90

 

用data abort为关键字在网上查了一下,知道了可以在release下用MAP定位出错函数。

http://hi.baidu.com/ralloddym/blog/item/427b4b3eba6edae154e7238d.html

 

于是找到了串口驱动中uart0的setDTR()函数。如是再三,最终决定把setDTR()彻底注掉,COM0终于变成了可用的普通串口。只是setDTR()究竟在哪里和什么冲突了,还是一个问题。

你可能感兴趣的:(c,exception,WinCE)