我在做串口通讯的东西,现在碰到了如下问题,请问众位高手,这是怎么回事啊?(50分)

  • 主题发起人 主题发起人 Spring_Thunder
  • 开始时间 开始时间
S

Spring_Thunder

Unregistered / Unconfirmed
GUEST, unregistred user!
Type<br>&nbsp; MyArray = Array of Byte;<br><br>Var<br>&nbsp; Test:MyArray;<br>&nbsp; Test1:Array Of Byte;<br>begin<br>&nbsp; SetLength(Test,1);<br>&nbsp; SetLength(Test1,1);<br>&nbsp; Test[0]:=$02;<br>&nbsp; Test1[0]:=$02;<br>&nbsp; …………<br>&nbsp; …………<br>end;<br>&nbsp; 分别把Test和Test1写入串口,但是下位机收到的数据却不一样,<br>这是怎么回事啊?
 
这个问题我也遇到过,用动态数组有点问题,关注<br>
 
我用的是TComPort控件,发送是用<br>ComPort1.Write(Test,1);<br>ComPort1.Write(Test1,1);<br>这样的话发送的内容是一样的啊,为什么Test1下位机收到的数据就正常,<br>而用Test就不行呢?[:(][:(]
 
我看过 TCOMPORT 的源嘛,它的 Write 方法是直接把数据缓冲区首地址扔给发送缓冲区的,我怀疑是它对动态数组的支持不是很好,我建议采用这样的方法来折中处理:<br>type<br>&nbsp; TByteArray = array [0..0] of Byte;<br>&nbsp; PByteArray = ^TByteArray;<br>procedure Sendit;<br>var<br>&nbsp; P: PByteArray;<br>begin<br>&nbsp; GetMem(P, 255);<br>&nbsp; P^[0]:= ...<br>&nbsp; P^[1]:= ...<br>&nbsp; ComPort1.Write(P^[0], 255);<br>&nbsp; FreeMem(P, 255);<br>end;<br>
 
按下面的方法改动就行了 &nbsp;我试过了<br>ComPort1.Write(Test,1); &nbsp;======&gt; &nbsp;ComPort1.Write(Test[0],1);<br>ComPort1.Write(Test1,1); ======&gt; &nbsp;ComPort1.Write(Test1[0],1);
 
是吗?我等下试一下,如果可以的话,人人都有分
 
两边的设置要一样才行:波特率、数据位、校验位等!
 
几位高手,好像还是不行啊?每次的数据都不一样
 
刚刚仔仔细细的试一下,原来的真的是动态数据组的问题,不管用那种方法,动态数组都不行,改成静态的就行了。<br>刚开始一直以为是我的这个<br>Type<br>&nbsp; MyArray = Array of Byte;<br>问题,原来不是,我现在改成了<br>Type<br>&nbsp; MyArray = Array[0..2048] of Byte;<br>就什么问题也没了,<br>如果用<br>var <br>&nbsp; Test:array of byte;<br>也是不行,一定要静态的
 
后退
顶部