VC编写的串口程序为什么接收几组数据后会自动关闭?

zzpnihao 2010-07-09 01:34:45
请教各位高手,能不能给指出是哪的问题啊?自发自收的话就不会关闭,两台电脑连得时候,接收一定数据后就会自动关闭,应该怎么改啊?
...全文
162 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗨客递锅 2010-07-12
  • 打赏
  • 举报
回复
90% 是内存错误,缓冲区越界了。
zzpnihao 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 aahunter 的回复:]
调试跟踪代码,,,
[/Quote]
调试的时候有错误,但不知道怎么解决。请高手指教。
名称 this
值 CXX0017:Error: symbol "this" not found
精锐掷矛手 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zzpnihao 的回复:]
引用 5 楼 rebort_q 的回复:
是否数组访问越界?

但是是接受到几组数据后才会关闭的啊
[/Quote]
是否每次接受到那组数据后都会关闭?
winxxpSoft 2010-07-09
  • 打赏
  • 举报
回复
老大你的函数好大?100行内好读一点。
fjw666 2010-07-09
  • 打赏
  • 举报
回复
内存访问的问题
zzpnihao 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 rebort_q 的回复:]
是否数组访问越界?
[/Quote]
但是是接受到几组数据后才会关闭的啊
精锐掷矛手 2010-07-09
  • 打赏
  • 举报
回复
是否数组访问越界?
zzpnihao 2010-07-09
  • 打赏
  • 举报
回复

void CALLBACK CMy110Dlg::OnCommRecv(CWnd* pWnd, char *buf, int buflen)
{
unsigned char addr[7];
unsigned char bianhao[7];
//CString str="";
CString tmp="";
CString str="";
CString data="";
//char *p;
unsigned char state; //装载开关的状态,与电压和电流值不放在一起
char buffer[8];
float *q;


int k=0;
int add;
int i;




int pro;
unsigned char number[132];
//long number;
float value[6];

int S;
int E;
int e=1;
float M;
long temp[7];
long temp2;
float temp1[7];





char hadd[6];
CMy110Dlg * pDlg = (CMy110Dlg*)pWnd;
int j=0;
pDlg->m_strRecDisp="";

/****************************************************************************/
/* */
/* */
/* */
/****************************************************************************/


for( i=0;i<buflen;i++,buf++)
{
number[i]=*buf;
}
for(i=0;i<39;i++)
{
if(number[i]>0x80) //地址的起始位为1,数据的起始位为0
{
addr[j]=number[i]&0x7F; //代表地址,表示后面的数据是哪个项目的
bianhao[j]=i; //代表受到的数据中是地址的数据组的编号,从第零个接收数据开始计算的
j=j+1; //代表一共有j个是表示地址的数据
}
}


for(i=0;i<j;i++)
{
if(addr[i]!=7)
{
temp[i]=(((int)(number[bianhao[i]+1]<<1))<<8)|(((int)number[bianhao[i]+2])<<2);
temp[i]=(temp[i]<<8)|(((int)number[bianhao[i]+3])<<3);
temp[i]=(temp[i]<<8)|(((int)number[bianhao[i]+4])<<4);
temp[i]=temp[i]|number[bianhao[i]+5]; //转换成32位long型数据,都存在temp数组中,最后的那组数据只有四个有效位,放在最低四位
}
else
state=((number[bianhao[i]+1]<<1)|number[bianhao[i]+2]);//开关状态是分两组传输的,其中第二组只有一个有效值,将其放在最低位
}
//_itoa(state,buffer,10);

//char *p=new char[8];
//unsigned char a=buffer[0];
unsigned char b;
//char *p;
// p=&a;
//AfxMessageBox(_T("到了!"));
// buf=buf-2;
//pDlg->m_strRecDispb.empty();
for(i=0;i<8;i++)
{
//tmp.Format(_T("%c"), *p);

b=state&0x80;
if(b)
{
pDlg->m_strRecDisp+= "1";
}
else
pDlg->m_strRecDisp+= "0";
state=state<<1;
//tmp.Empty();
// AfxMessageBox(_T("到了!"));
}

pDlg->SetDlgItemText(IDC_REC_DISP,pDlg->m_strRecDisp); // 显示在窗口上

for(i=0;i<6;i++)
{
S=(temp[i]&0x80000000)>>31;
E=((temp[i]&0x7F800000)>>23)-150;
M=(temp[i]&0x7fffff)|0x800000; //float型数据的尾数部分的二进制值,加了省略的1;
//temp2=1+temp2*0.00000011920928955078125;
if(E>=0)
{
for(int i=0;i<E;i++)
{
M=M*2;
}
}
else
{
for(int i=E;i<0;i++)
{
M=M/2;
}
}


if(S==0)
{
value[i]=M*e;
}
else
{
value[i]=-M*e;
}
}

q=value;
for(i=0;i<6;i++,q++)
{
str.Format(_T("%f"),*q);
pDlg->SetDlgItemText(IDC_EDIT1+addr[i]-1,str);
str.Empty();
}


pDlg->GetDlgItemText(IDC_REC_DISP,data);

unsigned char *recvbuf = new unsigned char[8];
/* for( i =0 ; i < 8;i++)
{
recvbuf[i] = (char)data.GetAt(i);
if(recvbuf[i] == '1')
{
pDlg->CheckDlgButton(IDC_CHECK1+i, BST_CHECKED);
}
else
{
pDlg->CheckDlgButton(IDC_CHECK1+i, BST_UNCHECKED);
}
}*/

for( i =0 ; i < 7;i++)
{
recvbuf[i] = (char)data.GetAt(i);
if(recvbuf[i] == '1')
{
pDlg->CheckDlgButton(IDC_CHECK1+i, BST_CHECKED);
}
else
{
pDlg->CheckDlgButton(IDC_CHECK1+i, BST_UNCHECKED);
}
}

recvbuf[7]=(char)data.GetAt(7);
if(recvbuf[i] == '1')
{
pDlg->CheckDlgButton(IDC_CHECK8, BST_CHECKED);
}
else
{
pDlg->CheckDlgButton(IDC_CHECK8, BST_UNCHECKED);
}




delete[] recvbuf;
data.Empty();
}
zyh5312277 2010-07-09
  • 打赏
  • 举报
回复
不知道啊
aahunter 2010-07-09
  • 打赏
  • 举报
回复
调试跟踪代码,,,
精锐掷矛手 2010-07-09
  • 打赏
  • 举报
回复
是否内存访问越界等异常引起的,贴贴代码吧。

16,471

社区成员

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

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

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