搜索
bottom↓
回复: 14

初学delphi 哪位高手解释下这段代码什么意思SPCOMM的

[复制链接]

出0入0汤圆

发表于 2010-2-10 13:40:25 | 显示全部楼层 |阅读模式
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
  var
  data,vdata : double ;
begin
    move(buffer^,pchar(@rbuf)^,bufferlength);
    data := (rbuf[1] * 256) + rbuf[2] ;
    data := data *0.0625 ;
    displayt.caption := floattostr(data);
    vdata := (rbuf[3]*256)+rbuf[4];
    vdata := (vdata * 0.0025*4.3)+0.25 ;
    displayv.caption := floattostr(vdata);

end
----------------------------------------------------------------------------------------------
move是在两个地址间拷贝数据,Move(S,D,Len)就是从S地址处开始拷贝Len个字节,然后在D地址开始的Len字节空间里存储
----------------------------------------------------------------------------------


有些人遇到的困惑是为什么 move(s,b,len)不行呢?同样我也遇到这样的困惑.
看了一样move的函数源码才明白.
procedure       Move( const Source; var Dest; count : Integer );
{$IFDEF PUREPASCAL}
var
  S, D: PChar;
  I: Integer;
begin
  S := PChar(@Source);//取内存地址
  D := PChar(@Dest);//取内存地址
  if S = D then Exit;
  if Cardinal(D) > Cardinal(S) then
    for I := count-1 downto 0 do
      D[I] := S[I]
  else
    for I := 0 to count-1 do
      D[I] := S[I];
end;
本篇文章来源于:开发学院 http://edu.codepub.com   原文链接:http://edu.codepub.com/2010/0120/19934.php

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2010-2-10 18:05:21 | 显示全部楼层
高手难道都回家过年了吗  

出0入0汤圆

发表于 2010-2-10 18:33:39 | 显示全部楼层
与应用处理有关,没啥特别的

出0入0汤圆

发表于 2010-2-10 19:14:00 | 显示全部楼层
data := (rbuf[1] * 256) + rbuf[2] ;   将接收到的2个字节转换成INT
    data := data *0.0625 ;            将这个数乘以系数
    displayt.caption := floattostr(data); 浮点数转换成字符串然后显示
    vdata := (rbuf[3]*256)+rbuf[4];
    vdata := (vdata * 0.0025*4.3)+0.25 ;
    displayv.caption := floattostr(vdata);

出0入0汤圆

 楼主| 发表于 2010-2-10 19:25:44 | 显示全部楼层
回复【3楼】lanyuye
-----------------------------------------------------------------------

谢谢

那第一句   move(buffer^,pchar(@rbuf)^,bufferlength);
   什么意思呢


delphi里面有mov这条指令吗??

出0入0汤圆

发表于 2010-2-10 19:41:53 | 显示全部楼层
move(A,B,长度);
就是把B中的内容移动到A中,但是我不确定在XP上能运行.似乎只能在98以及以下的操作系统上可以用MOVE.记不太清了.好像是有这么一回事.XP不能运行.

出0入70汤圆

发表于 2010-2-10 19:43:27 | 显示全部楼层
将buffer指针数据移入到rbuf指针中.bufferlength为buffer指针中的数据长度

出0入70汤圆

发表于 2010-2-10 19:44:31 | 显示全部楼层
XP下可以用MOVE, 如果不能用,可以改用COPYMEMORY函数

出0入0汤圆

 楼主| 发表于 2010-2-10 20:36:14 | 显示全部楼层
回复【5楼】f999
-----------------------------------------------------------------------

5楼好像说反了  

应该是  将buffer指针数据移入到rbuf指针中    6楼正确

出0入4汤圆

发表于 2010-2-13 11:32:42 | 显示全部楼层
直接内存指针赋值,速度超快,

出0入0汤圆

 楼主| 发表于 2010-2-13 17:29:16 | 显示全部楼层
http://blog.csdn.net/yunqian09/archive/2010/02/13/5308289.aspx

串口调试成功 yeah SPCOMM

出0入0汤圆

发表于 2010-2-18 14:50:37 | 显示全部楼层
move(buffer^,pchar(@rbuf)^,bufferlength); 是指针存取数据

出1070入962汤圆

发表于 2010-2-18 15:32:34 | 显示全部楼层
用惯了C,再回头用DELPHI,那简直感觉手脚被捆住了做事,太不爽了,特别是内存指针操作。

出0入0汤圆

发表于 2010-4-28 08:42:38 | 显示全部楼层
回13#:c和pascal没什么区别的,特别是内存指针操作
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 18:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表