小弟现在编写evc串口程序,目的是arm和dsp的串口通讯。
但是现在在编写调试中遇到一个问题。
这是程序中的串口接收线程:
DWORD WINAPI CSerialDlg::CommRecvThread(LPVOID lparam)
{
DWORD dwLength; //定义一个双字来存放 收到的数据长度
char * recvBuf = new char[1024]; //开辟1k的内存空间
CSerialDlg *pDlg = (CSerialDlg *)lparam;
while (TRUE)
{
if (WaitForSingleObject(pDlg->m_ExitThreadEvent, 0) == WAIT_OBJECT_0) //等待线程退出事件
break;
if (pDlg->m_hComm != INVALID_HANDLE_VALUE)
{
BOOL fReadState = ReadFile(pDlg->m_hComm, recvBuf, 1024, &dwLength, NULL); //标志读数有无
if (!fReadState) //1024是一次最大接收字节数,dwLength是实际一次接收到的字节数。
{
;
}
else
{
if(dwLength != 0)
{
OnCommRecv(pDlg, recvBuf, dwLength); //回调函数
}
}
}
}
return 0;
}
从程序中可以看到,串口一次最多可以接受来自对方的1024个字节的数据。
为了调试方便,我用 串口调试器 模拟dsp,向arm发送数据并观察arm返回的数据是否正常。
在这过程中出现了一个问题:
(1)当向arm发送1个字节的数时,evc程序正常,并接收到的数也正常。
(2)当向arm发送2个字节的数时,evc程序正常,但接受到的数并不对。比如我用串口调试器向arm发送1111(十六进制),程序中的接收变量(unsigned char temp[1024]),却是temp[0]=0x11,temp[1]=0xc4,temp[1]明显不对!
(3)当向arm发送3个字节以上的数据时,evc程序就报错,然后arm就死机。。。
不知道(2)(3)出现的原因是什么?我向arm发两个以上的数据时,是先在串口调试器中把数写好,然后再一起发送(因为考虑到evc接收线程中一次最多可以接收1024字节的数)。这样的操作有问题吗?
恳求高手解答!谢谢