Unicode 串口通信

 



                                                 图1:Unicode编码Demo工程图

看了看Windows C/C++ 核心编程,作者强烈推荐程序采用Unicode编码编程。于是稍微改写了CSerialPort类的源码,并实现了一个小的Unicode串口通信Demo。

开发工具为VC2010。

CSerialPort.cpp改写的主要内容为:

1,将char改为wchar_t,字符或字符串添加L,如’N’改为L’N’,”COM%d”改为L”COM%d”.

2,改变相关函数名,如sprintf改为 swprintf并添加一个缓冲区大小的参数。具体为:

sprintf(szPort, ,"COM%d",portnr);改为:swprintf(szPort,100, L"COM%d",portnr);//100代表szPort大小,防止缓冲区溢出。

Strcpy改为wcscpy_sstrlen改为wcslen等等。主要是Unicode支持和安全处理,去掉警告信息。

3.添加了memset(&comstat,0,sizeof(COMSTAT)); 初始化

 

核心代码:

1:具体界面如上图1,点击发送按钮后,发送6字节数据123456到串口。代码如下:

void CUnicode_DemoDlg::OnBnClickedBtnSend(){ 

         wchar_t data[6]={0x01,0x02,0x03,0x04,0x05,0x06};   

         SP.WriteToPort((wchar_t *)data,6*sizeof(wchar_t));

}

2:串口接收函数代码

long CUnicode_DemoDlg::OnComm(WPARAMch,LPARAMport)

{

         rx_buffer[rx_count++]=ch;

         if(6*sizeof(wchar_t)==rx_count){//当接收到了12个字节后,以16进制显示接收的数据。

                          Display(12);

         }

         return 0;

}

显示的Display函数:

void CUnicode_DemoDlg::Display(UINTcount)

{

         if(6<=m_c_rx.GetLineCount())

                  m_rx.Empty();

         rx_count=0;

         CString strDebug;     

         for (UINTi=0;i<count;i++){//i+=2

                  strDebug.Format(L"%02X ",*(rx_buffer+i));

                  m_rx+=strDebug;

         }

         m_rx+="\r\n";   

         UpdateData(false);

}

工程已上传,地址为:http://download.csdn.net/detail/a379039233/4464546,有兴趣的可以看下哈。

 

串口通讯中只有字节流的概念,没有字符的概念,更没有字符编码的概念。如何理解字节流、如何编码,是通讯双方约定协议的事,和串口通讯其实没有关系。

所以上位机发送的是Unicode编码,要求下位机(单片机或者其他)也采用Unicode解析,就是把收到的两个字节看做一个字节,可以丢弃第二个字节(高端)。

其实好像没啥大用,因为串口通信一般都是ASCII码通信,采用Unicode开销大(多发了一倍的无效数据),而且处理下位机麻烦。

贻笑大方了。。。。。。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值