标题:[求助]C++Builder单步执行都OK
只看楼主
yangyinfeng
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-8-9
 问题点数:0 回复次数:7 
[求助]C++Builder单步执行都OK
我编了个串口通信的程序,单步执行都OK,为什么把断点去掉就出错。
搜索更多相关主题的帖子: 单步 Builder 串口 
2005-08-09 09:27
Stayor
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2005-8-4
得分:0 
单步执行相当于在每一步之间都加了一段延时。
串口通信对时间要求是很严格的。
2005-08-09 10:05
yangyinfeng
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-8-9
得分:0 
我也发现这个问题,在CntIrq前加了Sleep(),但是不可能每个方法前都加吧,有什么好办法吗?
2005-08-09 10:19
Stayor
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2005-8-4
得分:0 
Win32下的几种串口通信编程 ---- 要完成串口通信, 在32位模式下, 一般说来有以下四种方法: ---- 1. 以文件方式打开串口: ---- 这里使用的是Win32 API 函数, 所以无论在BCB或VC下都可以实现. 具体的函数的意义可以参考Win32 API 的帮助.这里有一个易于使用的BCB下的类, 可以方便的使用串口. ---- 下面给出简要说明: ---- (1) 应用CreateFile() 来初始化串口 FhFileComm=CreateFile( FCommName.c_str(), GENERIC_READ | GENERIC_WRITE, 0, // exclusive access &lpSecurity, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // overlapped I/O NULL ); if( FhFileComm == INVALID_HANDLE_VALUE) return false; (2) 应用WriteFile() 和 ReadFile() 从串口读写数据 bool MyComm::WriteBuffer(unsigned char*buffer,unsigned long length) { return WriteFile(FhFileComm,buffer, length,&length,&FgOverLapped); } bool MyComm::ReadBuffer(unsigned char*buffer,unsigned long length) { return ReadFile(FhFileComm,buffer, length,&length,&FgOverLapped); } 相应的源文件为 UsageComm.cpp UsageComm.h ---- 2. 使用现成的控件: ---- 易于使用的是微软的MS Communication 控件, 它是做为一个 .ocx 提供的. ---- 在BCB 中可以用Import ActiveX Control 将它加入到BCB 中, 缺省是加载在ActiveX 页中. 就可以作为一个普通的BCB 控件来使用了.(也有不少第三方提供的其它硬件操作控件) ---- 3. 直接嵌入汇编法: ---- (该方法不能在NT下使用, 由于98的非完全保护, 下面的代码可以使用)利用BCB的直接嵌入汇编功能, 可以在BCB中直接对串口操作. ---- 如下所示,在BCB中使用汇编代码如下 byte __fastcall ReadByte(WORD Address) // eax :address { asm mov DX,AX in AL,DX } } void __fastcall WriteByte (unsigned char byte, WORD Address) // EAX: BYTE EDX: ADDRESS { asm out DX,AL } } ---- 这里必须用__fastcall 调用约定以使在调用该函数时用寄存器传递参数. ---- (用在BCB中的汇编指令代码in 和out必须用小写,(其余可以为大写)寄存器名称大小写都可以) ---- 其它的如写多个字节,读多个字节, 同样可以实现. ---- 4. 最困难的要数用VxD来实现: ---- 这不是一下子能说得清的, 如果要做, 当然要找本书了. 不清楚你的程序是怎么写的,以上内容是在网络上搜索的。建议用第二种方法。 要学会在网络上搜索。
2005-08-09 10:49
yangyinfeng
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-8-9
得分:0 
#include "UnitRS232.h"
我刚刚开始用C++Builder,老师帮我做了个类什么的,直接触发方法,直接调用函数,呵呵,谢谢这位(师兄? 师兄:师姐;)!
你说的时间问题暂时用Sleep()解决了,这个方法到底怎么用最佳,有可能其他更好的办法不?
2005-08-09 12:07
Stayor
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2005-8-4
得分:0 
如果是学习你就慢慢的学吧,如果要在工作中应用最好使用控件。
尽量少用Sleep(),可以考虑用Timer控件来延时。
2005-08-09 12:56
yangyinfeng
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-8-9
得分:0 
工作中。。。
我的任务根据通信协议基本搞定,并顺利达到预期目标,接下来是程序优化,请指教这个优化应从哪些方面着手考虑,谢谢!
2005-08-09 13:27
Stayor
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2005-8-4
得分:0 
要是说程序优化,我就无能为力了。
2005-08-09 19:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-24705-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012320 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved