MFC串口编程


MFC串口编程


1.先记录一个调试中遇到的问题:

在串口的接受方法中采用COleSafeArray类对VARIANT类型进行变换,编译正常,运行串口测试程序后,每当串口接受到数据,程序便出现如下错误:
Debug Assertion Failed!
Program:..........
File: olevar.cpp
Line:2553
.............
这个小问题搞了半天的时间,开始把问题定位在了COleSafeArray类的使用方法上,但是查阅资料证明用法没有问题。最后把串口的输入方式设置为二进制解决了问题。
代码如下:

void CComUpdateDlg::OnOnCommMscomm() 
{
	VARIANT ComRcv;
	COleSafeArray ComRcvArray;
	BYTE RcvBuf[1024];
	long len,k;

	if(m_ctrlComm.GetCommEvent()==2)
	{

		ComRcv = m_ctrlComm.GetInput();
		ComRcvArray=ComRcv; //VARIANT型变量转换为ColeSafeArray型变量
		len=ComRcvArray.GetOneDimSize(); //验证得到有效数据长度
		for(k=0;k<len;k++)//len is 5 in normal case
			ComRcvArray.GetElement(&k,RcvBuf+k);//转换为BYTE型数组
		HandleCommand(RcvBuf);
	}
}

2.展示一下我自学做的MFC程序的界面:

所做的程序能够通过上位机对NXP LPC1766、LPC1768(LPC17XX)的cortex M3处理器进行程序或固件的升级。
升级程序包括两部分:
上位机部分用MFC实现,通过串口或者网口与板子进行交互并实现固件升级。
板子中的bootloader部分能够通过IAP方式将上位机发送过来的程序数据保存到处理器的片上flash中,并在升级完成后跳转到烧写后的固件地址运行程序。
升级原理比较简单,但是全部弄痛了还是需要花费一定的时间和经历的!
界面如下:

MFC串口编程_第1张图片


3.文件路径转换为C语言中的字符串

在MFC编程中经常需要操作文件,常用的做法是通过一个button选择文件的路径,之后把文件的路径获取到一个CString变量中。但有的时候,我们习惯于通过fopen等函数操作文件,这时就要把文件路径由CString类型转换为char *类型。但是由于路径中存在‘\’,对于char *来说,‘\’为转义字符,因此路径“E:\doc\test.data”转为char *应该为“E:\\doc\\test.data”才能够被fopen等函数正常操作。

此时,可通过如下方法进行类型转换:

	char file[256] = {0};
	
	setlocale(LC_ALL, "chs");
	wcstombs( file, m_sourcePath, 256 );

其中,CString m_sourcePath为文件的路径。

4.选择文件的路径

代码如下所示:

void CpaydevDlg::OnBnClickedOpenButton()
{
	// TODO: 在此添加控件通知处理程序代码
	CString strFilter;
	strFilter="All Files(*.*)|*.*||";
	CFileDialog dlg(TRUE, NULL, NULL, OFN_EXPLORER|OFN_HIDEREADONLY|
		OFN_ENABLESIZING|OFN_FILEMUSTEXIST,strFilter);
	
	dlg.m_ofn.lStructSize = sizeof(OPENFILENAME);
	if(dlg.DoModal() == IDOK )
	{
		m_sourcePath=dlg.GetPathName();
	}
    UpdateData(FALSE);
}





























你可能感兴趣的:(MFC串口编程)