Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2350778
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:02:30


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) |
给主人留下些什么吧!~~