几个关于串口响应函数的问题

SpaceAutomation 2015-10-29 09:31:06
MSComm控件写的,功能是单片机向上位机传数,在上位机绘图。但收到的数据都不对,下面的函数有什么不对的地方吗?
char shiyu_data[1000]; //接收数据数组
void CShiyu::OnOnComm()
{
// TODO: Add your control notification handler code here

VARIANT variant; //定义VARIANT类型变量
COleSafeArray safearray; //定义COleSafeArray类对象
int len;

if(m_comm.GetCommEvent()==2) //若串口事件是读事件
{
variant=m_comm.GetInput(); //读取串口缓冲区
safearray=variant; //转换数据类型
len=safearray.GetOneDimSize(); //获取有效数据长度
for(i=0;i<len;i++)
safearray.GetElement(&i,&shiyu_data[i]); //将数据转换为char类型数组
recv_data.Format("%c",shiyu_data); //格式化输出字符串
}
MessageBox(recv_data);
}
1.应该是单片机发一个数则此函数响应一次吧,那variant=m_comm.GetInput()是读取串口缓冲区,此缓冲区是只包含了这次接收到的数据还是还包含了以前的数据?
2.len=safearray.GetOneDimSize()是获取有效数据长度,这里的数据长度指什么?
3. safearray.GetElement(&i,&shiyu_data[i])此函数怎么理解?转换成的char数据保存在哪?
4. recv_data.Format("%c",shiyu_data); 此函数有什么用?
多谢各位大神解答~
...全文
149 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2015-10-30
  • 打赏
  • 举报
回复
你收的对与不对,看代码并不是最好的方法,应该找一个成熟的串口工具,让下位机做相同或类似的动作,然后比较你接收的数据和成熟工具的差异。 先调接收,再调显示
笨笨仔 2015-10-30
  • 打赏
  • 举报
回复

此“缓冲”指的是底层缓冲,只包含当前数据,读出后即清空。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧