Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   ASM y Microcontroladores (https://www.clubdelphi.com/foros/forumdisplay.php?f=44)
-   -   Guardar un fichero Intelhex. (https://www.clubdelphi.com/foros/showthread.php?t=54781)

JoseFco 30-03-2008 22:39:55

Guardar un fichero Intelhex.
 
"Tolomeo se mudo al Polo Norte"

JoseFco 30-03-2008 23:24:16

"Tolomeo se mudo al Polo Norte"

JoseFco 31-03-2008 00:51:59

"Tolomeo se mudo al Polo Norte"

JoseFco 09-04-2008 00:01:27

"Tolomeo se mudo al Polo Norte"

egostar 09-04-2008 00:41:22

Cita:

Empezado por JoseFco (Mensaje 278410)
Hola amigos.

Tengo dias tratando de declarar este buffer y me da error de declaracion.

Quien me de una ayudadita a ver que pasa con esta declaracion que no se deja?

Un Saludo.

Pues si, no veo donde esté declarado buffer, incluso no veo donde declaras HexBufOut que por lo que veo es del mismo tipo buffer.....

No se, algo así

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  buffer = Array [0..100] of Byte; //Declaras el tipo buffer, caracter, byte o lo que se necesite....
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
      function writeline(ADDR,RECLEN,RECTYPE:integer;
                         var buf:buffer): string;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.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;

end.
Salud OS

JoseFco 09-04-2008 01:35:45

"Tolomeo se mudo al Polo Norte"

egostar 09-04-2008 01:40:43

Cita:

Empezado por JoseFco (Mensaje 278451)
Hola egostar.

Gracias por la respuesta, ya de esa forma me reconoce la declaracion de buffer.Y si tienes razon le faltan cosas a este codigo.Lo saque de aqui.http://www.sixca.com/delphi/article/writehex.html

Tengo dias dandole vueltas y no lo entiendo.

Un saludo.

Ya veo, pero ahi mismo puedes ver lo que te falta....

Código Delphi [-]
type buffer=array of byte;  //assign as Dynamic array
var HexBuf:buffer;

Salud OS

JoseFco 09-04-2008 23:25:43

"Tolomeo se mudo al Polo Norte"

JoseFco 11-04-2008 04:17:53

"Tolomeo se mudo al Polo Norte"

JoseFco 12-04-2008 17:44:44

"Tolomeo se mudo al Polo Norte"

JoseFco 13-04-2008 00:57:53

"Tolomeo se mudo al Polo Norte"

Dedalo 14-04-2008 21:03:21

Cita:

Empezado por JoseFco (Mensaje 279187)

Código Delphi [-]
for i:=0 to ((usedbuf-1) div 16) do begin





Esta linea del codigo, quien me la puede explicar?
usedbuf es de donde tomare los bytes a combertir.?

Un saludo.

Esa linea es para repetir el bucle una vez por cada 16 bytes, pues cada linea del fichero intelhex describe 16 bytes binarios.

JoseFco 15-04-2008 02:08:47

"Tolomeo se mudo al Polo Norte"

JoseFco 20-04-2008 00:48:20

"Tolomeo se mudo al Polo Norte"

JoseFco 07-06-2008 02:12:54

"Tolomeo se mudo al Polo Norte"

JoseFco 09-06-2008 23:38:57

"Tolomeo se mudo al Polo Norte"

JoseFco 10-06-2008 02:26:54

"Tolomeo se mudo al Polo Norte"

MaMu 12-06-2008 07:19:06

A ver, HexBufOut es un array de byte, cuya dimensión de ancho de palabra está dada por ByteCnt cual número entero contenga (ojo al piojo que pasa el peine, y a no confundirse el entero decimal sin signo con un hexadecimal, a pesar de que puedan o no coincidir, en fin cada quien con su offset).
En fin, la funcion writeline es quien se encarga de la escritura del intelhex, pero donde esta el método de buffering??, no veo que se cargue en ningun lado, asi que asumo que al generar la variable con tope dimensional en 6 bytes, estos son nulos, o quizas flotantes (me recuerdan a salidas en alta impedancia). Entonces, el llenado del buffer deberia ser la inversa de writeline, pero de donde se leería?
Otra cosa, no le encuentro utilidad a la funcion write_eof, es redundante.

Saludos

JoseFco 12-06-2008 14:06:16

"Tolomeo se mudo al Polo Norte"

MaMu 12-06-2008 18:56:51

Cita:

Empezado por JoseFco (Mensaje 293018)
Hola MaMu, La funcion write_eof es la que termina el formato intelhex.
EOF ( End Of File) esta funcion cuando se terminan las lineas de ese file, este genera la ultima linea a cierra el file con esa funcion.El buffer se llenara con una funcion que estaria recibiendo del serial port.Tengo que crear esta.

Un Saludo.

Si, la función la entiendo, pero en el código no encuentro en donde la estas usando.
Ahora bien, vamos a pensar la funcion de lectura, el programador, que datos nos entrega, es decir, que estructura protocolar tiene?

Saludos


La franja horaria es GMT +2. Ahora son las 19:57:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi