1.查找程序的内存分配错误或内存泄漏,可以把 Project→Options→CodeGuard 选项打开调试,调试结束,在程序发布之前关掉。
2.因为串口控件的事件是在单独的线程里面的,如果你的程序没考虑线程的问题,或者处理时间比较长,可以把程序转移到主线程里面:
#define WM_COMMPKG (WM_USER+1) //自定义 Windows 消息
void __fastcall TMainForm::YbCommDevice1Package(TObject *Sender, int NotifyType)
{
if(NotifyType & EV_RXCHAR) //如果 NotifyType 的 RXCHAR 位为 1
{
PostMessage(Handle, WM_COMMPKG, 0, 0); //向窗口发消息
}
}
void __fastcall TFormMain::WndProc(Messages::TMessage &Message)
{
if(Message.Msg == WM_COMMPKG)
{
//OnPackage 转移到主线程里面了,在这里写 OnPackage 的内容就没有限制了
//...
}
TForm::WndProc(Message); //这句不能写错, 否则程序无法运行
}
在 Form 的类定义里面增加这个 protected 函数:
protected:
void __fastcall WndProc(Messages::TMessage &Message);
--------------------next---------------------
您说“我看你的程序的意思好像是必须先发送 55 55 55 00 01 2B 01 55 FF FF 55 然后才可以接受其他的数据,否则什么也不执行。”,的确是这样子,因为它是和下位机建立通讯,通讯成功后才对其他做响应,波特率是9600。我上面所说的问题是当我发送硬复位命令时,ListView里显示的各测试项目的状态都变成关闭状态,此命令成功后返回55 55 55 00 01 00 FE 55 FF FF 55,但是正如我上面所言,
情况是这样的:
1。起初我用串口调试助手发送"555555000100FE55FFFF55",但是它没反应,包括我用一个Edit来显示串口收到的数据包,Edit显示为空。
2。然后我调试,在ReadPackage时设置断点,一步一步F8走下来,结果却可以显示了。
3。在此之后即使不设置断点也可以响应"555555000100FE55FFFF55"。
4。我到其他机器上再测试我的程序然后就又不行了。
--------------------next---------------------
阅读(1059) | 评论(0) | 转发(0) |