JoseFco
13-04-2008, 03:38:45
Hola amigos.
Estoy tratando de recibir una cadena de data (4096 bytes de data por el serial port.) La tendre que alojar temporalmente en un buffer imagino y despues usando un procedimiento modificado como este:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type buffer=array of byte; //assign as Dynamic array
var HexBufOut:buffer;
type
TForm1 = class(TForm)
SaveDialog1: TSaveDialog;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function writeline(ADDR,RECLEN,RECTYPE:integer;
var buf:buffer):string;
var i:integer;
CHKSUM:byte;
begin
CHKSUM:=0;
result:=':'+inttohex(RECLEN,2)+ inttohex(ADDR,4)+inttohex(RECTYPE,2);
CHKSUM:=RECLEN+lo(ADDR)+hi(ADDR);
for i:=0 to RECLEN-1 do begin
result:=result+inttohex(buf[ADDR+i],2);
CHKSUM:=CHKSUM+buf[ADDR+i];
end;
result:=result+inttohex(256-CHKSUM,2);
end;
function write_eof:string;
begin
result:=':00'+'0000'+'01'+'FF'; // :00000001FF
end;
procedure TForm1.Button1Click(Sender: TObject);
var Fname,line:string;
Fp : textfile;
ErrorCode,StartAddr,ByteCnt:integer;
A_Line,EOF_HEX:string;
begin
StartAddr:=$0000; // start address
ByteCnt:=16; // 16 bytes
SetLength(HexBufOut,ByteCnt);
HexBufOut[0]:=$00;
HexBufOut[1]:=$12;
HexBufOut[2]:=$00;
HexBufOut[3]:=$72;
HexBufOut[4]:=$12;
HexBufOut[5]:=$00;
HexBufOut[6]:=$7E;
HexBufOut[7]:=$B4;
HexBufOut[8]:=$80;
HexBufOut[9]:=$04;
HexBufOut[10]:=$80;
HexBufOut[11]:=$34;
HexBufOut[12]:=$80;
HexBufOut[13]:=$F6;
HexBufOut[14]:=$75;
HexBufOut[15]:=$A0;
Fname:='C:\Documents and Settings\XP\My Documents\test1.hex';
AssignFile(Fp,Fname); { File selected in dialog }
Rewrite(Fp);
// write 16 bytes in HexBuf
A_Line:=writeline(StartAddr,ByteCnt,$00,HexBufOut);
EOF_HEX:=':00'+'0000'+'01'+'FF';// write end of HEX file
writeln(Fp,A_Line);
writeln(Fp,EOF_HEX);
closefile(Fp);
end;
end.
Guardarla en un fichero dentro de la PC.(en formato intel hex)
Este codigo que mostre esta trabajando y crea bien el intelhex.
Esta data que llegara desde el serial port, es leida de un chip y mandada al serial port por utro chip master(esta parte esta funcionando bien,la puedo ver en un monitor.)
Me hace falta una orientacion para poder alojarla en un buffer y posteriormente guardarla en un fichero.
Un Saludo.
Estoy tratando de recibir una cadena de data (4096 bytes de data por el serial port.) La tendre que alojar temporalmente en un buffer imagino y despues usando un procedimiento modificado como este:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type buffer=array of byte; //assign as Dynamic array
var HexBufOut:buffer;
type
TForm1 = class(TForm)
SaveDialog1: TSaveDialog;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function writeline(ADDR,RECLEN,RECTYPE:integer;
var buf:buffer):string;
var i:integer;
CHKSUM:byte;
begin
CHKSUM:=0;
result:=':'+inttohex(RECLEN,2)+ inttohex(ADDR,4)+inttohex(RECTYPE,2);
CHKSUM:=RECLEN+lo(ADDR)+hi(ADDR);
for i:=0 to RECLEN-1 do begin
result:=result+inttohex(buf[ADDR+i],2);
CHKSUM:=CHKSUM+buf[ADDR+i];
end;
result:=result+inttohex(256-CHKSUM,2);
end;
function write_eof:string;
begin
result:=':00'+'0000'+'01'+'FF'; // :00000001FF
end;
procedure TForm1.Button1Click(Sender: TObject);
var Fname,line:string;
Fp : textfile;
ErrorCode,StartAddr,ByteCnt:integer;
A_Line,EOF_HEX:string;
begin
StartAddr:=$0000; // start address
ByteCnt:=16; // 16 bytes
SetLength(HexBufOut,ByteCnt);
HexBufOut[0]:=$00;
HexBufOut[1]:=$12;
HexBufOut[2]:=$00;
HexBufOut[3]:=$72;
HexBufOut[4]:=$12;
HexBufOut[5]:=$00;
HexBufOut[6]:=$7E;
HexBufOut[7]:=$B4;
HexBufOut[8]:=$80;
HexBufOut[9]:=$04;
HexBufOut[10]:=$80;
HexBufOut[11]:=$34;
HexBufOut[12]:=$80;
HexBufOut[13]:=$F6;
HexBufOut[14]:=$75;
HexBufOut[15]:=$A0;
Fname:='C:\Documents and Settings\XP\My Documents\test1.hex';
AssignFile(Fp,Fname); { File selected in dialog }
Rewrite(Fp);
// write 16 bytes in HexBuf
A_Line:=writeline(StartAddr,ByteCnt,$00,HexBufOut);
EOF_HEX:=':00'+'0000'+'01'+'FF';// write end of HEX file
writeln(Fp,A_Line);
writeln(Fp,EOF_HEX);
closefile(Fp);
end;
end.
Guardarla en un fichero dentro de la PC.(en formato intel hex)
Este codigo que mostre esta trabajando y crea bien el intelhex.
Esta data que llegara desde el serial port, es leida de un chip y mandada al serial port por utro chip master(esta parte esta funcionando bien,la puedo ver en un monitor.)
Me hace falta una orientacion para poder alojarla en un buffer y posteriormente guardarla en un fichero.
Un Saludo.