3273|3

54

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

evc 串口编程 串口调试工具 请教高手 [复制链接]

小弟现在编写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字节的数)。这样的操作有问题吗?

恳求高手解答!谢谢

最新回复

把char* 改为 BYTE* 试试。 ARM发的时候需要做字符集转换,有个现成 的函数。 感觉死机大多是内存泄露造成的,建议楼主检查所有的指针变量。 仅供参考  详情 回复 发表于 2009-8-2 12:02
点赞 关注

回复
举报

94

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
arm发送1个字节的数时:应该是字符串编码的问题,EVC使用的是Unicode,串口一般需要ASCII码,发送前需要转换
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 91program 的回复:
arm发送1个字节的数时:应该是字符串编码的问题,EVC使用的是Unicode,串口一般需要ASCII码,发送前需要转换


恩。谢谢^_^
但是现在的问题是 串口调试器向arm发送数据时,如果串口调试器内输入xxxx(十六进制,x表示0-f)以上的数时,evc程序就会报错。
如在串口调试器中输入111111,点 手工发送后
evc中报错:The connection to the target device has been broken.Debugging will now stop.You must now exit and restart eVC.
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
把char* 改为 BYTE* 试试。
ARM发的时候需要做字符集转换,有个现成 的函数。
感觉死机大多是内存泄露造成的,建议楼主检查所有的指针变量。
仅供参考
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表