串口助手 0.2

  cheney

之前做过一个串口助手了,纯API的,双线程,但是处理不好两个线程间的数据,会丢包。这个是0.2测试版吧,双线程,两个线程间通过消息连接,底层是一个外国人封装的串口API类的,实现方法其实跟之前的差不多。我写了一个MFC的皮,扩展了256000这个波特率(通常是USB转串口),增加了自定义协议(这个还需要自己改代码),增加了根据数据绘图(这个部分问题还很大,速度太快了就不行了,完全跟不上串口的速度)

最大的改进

显示部分以前是这么做的

	//文本框增加内容
	void AddDlgItemText(HWND hwnd,  int  nIDDlgItem,  char  * szBuffer)   
	{   
		char  TempBuff[ MAXSIZE_SHOW ];   
		//拼接起来   
		GetDlgItemText( hwnd , nIDDlgItem , TempBuff , MAXSIZE_SHOW);   
		if  ( strlen(TempBuff) + strlen(szBuffer) +  100  > MAXSIZE_SHOW )   
		{   
			SetDlgItemText( hwnd , nIDDlgItem , szBuffer);   
			return  ;   
		}   
		strcat(TempBuff,szBuffer);   
		SetDlgItemText( hwnd , nIDDlgItem , TempBuff);   
	}   

API操作文本框控件,纯粹的SDK方式。

现在改用MFC

	#define IDC_RECV_EDIT                    1000        
	void  CusartDlg::DoDataExchange(CDataExchange* pDX)   
	{   
		CDialog::DoDataExchange(pDX);   
		//以下是自定义的消息转换   
		DDX_Text(pDX,IDC_RECV_EDIT, m_ReceiveData);   
	}   
	//刷新   
	UpdateData(FALSE);   
	//更新   
	ShowWindow(SW_SHOW);  
 

(以上不是正确代码,为了说明问题,我把几个部分粘到了一起),操作成员变量m_ReceiveData,就是操作对应的编辑框。

消息机制

整个windows都是建立在消息机制上的,点一下鼠标就生成了一个消息,移动一下鼠标也称成一个消息,关闭一个窗口也生成一个消息。这些消息存储在消息队列里,被对应的程序处理,处理消息也可能生成消息,整个windows系统就是在不断的生成消息和处理消息中运转的。

现在两个线程(一个主线程,一个专门用来接收),接收线程每接到一个字节,就发送一个消息(这个速度其实是相当快的了),主线程接收这个消息,拿出接收到的数据,添加到成员变量。一个字节一个字节的传过来,比之前打包传过来要稳定,目前没有发现丢包。

绘图

绘图部分还不正常,就不说了,对windows的图形显示还不很清楚。

软件

界面


软件暂不发布