首先,串行口本身不会自动帮你断帧,所以你需要自己去跟随
另外,你的接收程序这样写是既低效也不合理
应该先定义一个全局的帧缓冲区(一个足够大的BYTE型数组),再用一个指针(Index)去定位当前加入的数据
implementation
var
RxIdx: Integer;
Rxbuff: array [0..255] of byte;接收程序:
var
P: PChar;
S: String;
begin
P:= @RxBuff;
Move(Buffer^, RxBuff[RxIdx], BufferLength);
Inc(RxIdx, BufferLength);
SetString(S, P, RxIdx);
....
另外,你的接收程序这样写是既低效也不合理
应该先定义一个全局的帧缓冲区(一个足够大的BYTE型数组),再用一个指针(Index)去定位当前加入的数据
implementation
var
RxIdx: Integer;
Rxbuff: array [0..255] of byte;接收程序:
var
P: PChar;
S: String;
begin
P:= @RxBuff;
Move(Buffer^, RxBuff[RxIdx], BufferLength);
Inc(RxIdx, BufferLength);
SetString(S, P, RxIdx);
....
解决方案 »
- TreeView控件的 onChanging 相关问题
- 请高手相助:COM对象远程激活后,引用计数不正确,对象不能自动释放
- 关于结构体的问题
- 删除一个文件夹下的所有文件和子文件夹,用什么函数
- 解決之后另送分:http://expert.csdn.net/Expert/topic/1915/1915031.xml?temp=.3537866
- 干麻要叫程序员呢?程序员?打字员?接线员?XXX员 不好听!
- 如何让TADODataSet检索的数据可写
- Delphi DBGrid问题
- 高分求购:ActiveSkin注册码
- 如何从listbox 中获取一串字符串中的数字
- 关于 hex文件转Bin文件空地址填充问题
- dephi6怎么查看堆栈信息
var
P: PChar;
S: String;
begin
P:= @RxBuff;
Move(Buffer^, RxBuff[RxIdx], BufferLength);
Inc(RxIdx, BufferLength);
SetString(S, P, RxIdx);
Form1.ReturnTxt.Lines.Add(S);
var
P: PChar;
S: String;
begin
P:= @RxBuff;
Move(Buffer^, RxBuff[RxIdx], BufferLength);
Inc(RxIdx, BufferLength);
SetString(S, P, RxIdx);
Form1.ReturnTxt.Lines.Add(S);把S:String 改为S:WideString ,试验一下
调试的时候由于暂停,数据会堆积起来一次性收取,乱码机率当然就少了。
我看到一个软件叫,SecureCRT,的就写的很好,可惜找不到相关资料