引用: 引用 19 楼 xumercury 的回复:
引用 17 楼 gooogleman 的回复:
createfile在应用上啊,
自己写个串口打开的程序测测。一个个打开过去就知道了。。。不是有串口调试助手吗。。。如果串口被打开了就不能重复打开的。哎。。。
引用: 引用 21 楼 paul_chao 的回复:
CreateFile 会去呼叫到 XXX_Open, 并将 XXX_Init 的传回值当做第一个参数传给 XXX_Open.
所以, lz 还是要在 XXX_Init 中去判断该值并记录, 并在 XXX_Open 中取用.
Paul, Chao @ Techware
引用: 引用 21 楼 paul_chao 的回复:
CreateFile 会去呼叫到 XXX_Open, 并将 XXX_Init 的传回值当做第一个参数传给 XXX_Open.
所以, lz 还是要在 XXX_Init 中去判断该值并记录, 并在 XXX_Open 中取用.
Paul, Chao @ Techware
引用: 引用 21 楼 paul_chao 的回复:
CreateFile 会去呼叫到 XXX_Open, 并将 XXX_Init 的传回值当做第一个参数传给 XXX_Open.
所以, lz 还是要在 XXX_Init 中去判断该值并记录, 并在 XXX_Open 中取用.
Paul, Chao @ Techware
引用: 引用 28 楼 oncancel 的回复:
加载驱动的时候,注册表项是com1,com2自动变化的。你的驱动install里可以判断
引用: 引用 29 楼 gooogleman 的回复:
——我觉得paul.chao的方法还是不行,因为这个COM_Init 被加载了多次,他的返回值都是不同的。
所以有点难搞,我继续研究。也许我的表达没有让大家明白,呵呵。我继续努力ing
引用: 引用 31 楼 paul_chao 的回复:
引用 29 楼 gooogleman 的回复:
——我觉得paul.chao的方法还是不行,因为这个COM_Init 被加载了多次,他的返回值都是不同的。
所以有点难搞,我继续研究。也许我的表达没有让大家明白,呵呵。我继续努力ing
放心, 绝对可以的, 若是不行那也是你没弄清楚.
COM_Init 会去 LocalAlloc 一个 struct, 这个 struct 会去存该次载起来的 ioaddress, irq 等资讯, 所以 COM1 & COM2 虽然是执行同一个 dll, 但是其 struct 内存的 ioaddress 必定不同.
所以, LZ 在 COM_Open 中去比较其 ioaddress, 若是 COM1 的, 就去做一些您想做的事, 不就得了.
Paul, Chao @ Techware
引用: 引用 30 楼 gooogleman 的回复:
CreateFile(TEXT("COM1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
我想上面也是根据这个TEXT("COM1:")去寻找对应COM1的DLL的,但是这部分是如何实现的,所以我觉得我的问题估计解决不了了。准备放弃!
引用: 引用 34 楼 lzj84 的回复:
if(pHWHead1->dwIOBase == 0x50000000) // add by perry
{
pHWHead->bINT = BIT_UART0;
pHWHead->bTxINT = INTSUB_TXD0;
pHWHead->bRxINT = INTSUB_RXD0;
pHWHead->bErrINT = INTSUB_ERR0;
#if USEVIRTUAL
pHWHead->s2440SerReg = (S2440_UART_REG *)v_pUART0regs;
pRegBase = (PUCHAR)pHWHead->s2440SerReg;
#else
pRegBase = (PUCHAR)UART0_BASE;
pHWHead->s2440SerReg = (S2440_UART_REG *)pRegBase;
#endif
}
else if(pHWHead1->dwIOBase == 0x50004000)
{
pHWHead->bINT = BIT_UART1;
pHWHead->bTxINT = INTSUB_TXD1;
pHWHead->bRxINT = INTSUB_RXD1;
pHWHead->bErrINT = INTSUB_ERR1;
#if USEVIRTUAL
pHWHead->s2440SerReg = (S2440_UART_REG *)v_pUART1regs;
pRegBase = (PUCHAR)pHWHead->s2440SerReg;
#else
pRegBase = (PUCHAR)UART1_BASE;
pHWHead->s2440SerReg = (S2440_UART_REG *)pRegBase;
#endif
}
else if(pHWHead1->dwIOBase == 0x50008000)
{
pHWHead->bINT = BIT_UART2;
pHWHead->bTxINT = INTSUB_TXD2;
这不是判断打开的是COM1,还是其他COM,比如COM2/3
引用: 引用 2 楼 rzsheng 的回复:
应该是 COM1
但有一个地方得改一下:
hFlashFile = CreateFile(TEXT("COM1"), ...);
文本那里需要去掉那个':'号,
打开了串口接下来就可以对串口进行操作了。
设置串口参数,收发数据等等