Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Editar un buffer (https://www.clubdelphi.com/foros/showthread.php?t=55549)

JoseFco 24-04-2008 01:12:12

"Tolomeo se mudo al Polo Norte"

MaMu 24-04-2008 05:50:30

La variable k, sobra.
De 0 a 15 deberia ser lo mismo que de 0x0000 a 0x000F y vos lo que estas haciendo, es llenar una columa con el final de la cuenta de 0 a 15, entonces,
0x0000 a 0x000F que sigue? 0x0010, y ahi te empieza a escribir. El procedimiento esta "alrevez".

Saludos

MaMu 24-04-2008 05:53:45

Te diste cuenta?, mira la corrección, es muy sencillo.

Código Delphi [-]

procedure TForm1.InicializaGridBuffer;
var  i,j,k,l: integer;
begin
  StringGrid1.ColWidths[0] := 35;
  StringGrid1.Cells[0,0] := 'Addr';
  j := $0000;  l := $0000;
  for i := 0 to 15 do
    StringGrid1.Cells[i+1,0] := IntTohex(i,2);
  for j := 0 to (BufferSize div 16)-1 do    // (BufferSize div 16)
    begin
      k := j;
      StringGrid1.Height := StringGrid1.Height + 1;
      StringGrid1.RowCount := StringGrid1.RowCount + 1;
      StringGrid1.Cells[0,k+1] := IntToHex(l,4);
      l := l + 16;  //Porque?, arranco de 0000 primero
    end;
end;

Saludos

JoseFco 24-04-2008 22:20:24

"Tolomeo se mudo al Polo Norte"

Dedalo 24-04-2008 22:49:30

Para tratar una serie de 0 a 4095 no hagas dos bucles, haz uno solo.

Código Delphi [-]
 
for j:=0 to 4095 do
begin
 Fila:=j mod 16
 columna:= j div 16
 StringGrid1.Cells[columna,fila] := IntToHex(Buffer[j],2);
end:

Asi no pierdes ni uno solo de los valores ni repites ninguno.

Dedalo 24-04-2008 22:55:17

Por cierto, para llenar el memo lo haces cuando la pasada lo piad, al final de cada grupo de 16.

Código Delphi [-]
 
for j:=0 to 4095 do
begin
 Fila:=j mod 16
 columna:= j div 16
 if Fila=0 then Str:= IntToHex(j,4); // empieza una fila nueva
 StringGrid1.Cells[columna,fila] := IntToHex(Buffer[j],2);
 if Fila=15 then Memo1.Lines.Add(Str); // se acaba una fila, al memo
end:

JoseFco 24-04-2008 22:55:20

"Tolomeo se mudo al Polo Norte"

JoseFco 24-04-2008 23:16:00

"Tolomeo se mudo al Polo Norte"

MaMu 25-04-2008 06:21:17

Cita:

Empezado por JoseFco (Mensaje 282442)
Hay algo que no entiendo bien.
Me dices que no haga doble bucles. te refieres a que no ponga el addres primero y despues intente llenar el resto del stringgrid con la data.En otra rutina por separado.?

Un Saludo.

Es exactamente lo que te esta sugiriendo, si analizas el bucle contempla todos los numeros y nunca los repetiras.

Saludos

Dedalo 25-04-2008 11:16:49

Cita:

Empezado por MaMu (Mensaje 282485)
Es exactamente lo que te esta sugiriendo, si analizas el bucle contempla todos los numeros y nunca los repetiras.

Saludos

:D:D:D:D:D

JoseFco 25-04-2008 22:49:39

"Tolomeo se mudo al Polo Norte"

JoseFco 25-04-2008 22:59:28

"Tolomeo se mudo al Polo Norte"

MaMu 25-04-2008 23:31:30

Pero no entiendo cual es la duda.
de 0 a 4095 son 4096 posiciones, en el bucle, carga fila/columa aplicando un mismo valor de j, es decir, de posición. Si el incremento llega a un valor de palabra de 0x000F entonces agrega la linea al Memo.
El hecho de usar un solo bucle y no dos, es simplemente para mejorar el procedimiento, porque sino que harias? rellenas todas las columnas y cuando tenes las columnas empezas a cargar una a una las filas, para que? si se puede hacer de un tirón, sin miedo de repetir numeros.
Siempre tenes que saber como esta formado el mapa de memoria, y miralo como una matriz de fila por columna, sabiendo eso, son los parámetros que necesitas modificar, asi como el ancho de la palabra (en bytes).

Saludos

JoseFco 26-04-2008 03:05:19

"Tolomeo se mudo al Polo Norte"

MaMu 26-04-2008 17:34:47

Cita:

...se me ocurrio que en vez de un memo se ve mas elegante en un stinggrid. Pero que mi data no todo el tiempo va a ser del mismo peso que la memoria del chip que programare y tendre que rellenar ese espacio con 00h.

En realidad podés considerar que tu firmware "si" ocupa toda la memoria.
No se que uC estás programando, ya que de eso depende las características del mapa de memoria, forma de escritura, etc. Pero te pongo un ejemplo con un uC Pic. El programa puede considerarse que ocupa toda la memoria, puesto a que, donde finaliza la data real del firmware, dicho código escribe un dato de nulidad o conjunto vacío. En el caso de un Pic, (3FFFh=vacío). Por lo que borrar un chip, en el caso de un Pic, es lo mismo que decir, escribir 3FFFh a toda la matriz de memoria de programa, y 00h a cada direccion de la EEPROM.
Para resolver esto y que lo vuelques de forma elegante en un StringGrid, que me parece una idea exelente, y de hecho programas como el ICProg lo hacen asi, hay que analizar la situacion de la siguiente forma:

1) Determinar la estructura de la matriz del mapa de memoria del uC.
2) Determinar la estructura de la matriz que ocupa en memoria los datos.

Sabiendo estos 2, solo resta hacer la lógica

Pseudocódigo

Cita:

MiMatrizUC = La capacidad de mi uC
MiPrograma = Lo que ocupa mi programa
entonces
Sabiendo lo que ocupa mi programa
Mientras haya datos
rellenar grid con datos
si no hay datos, poner blanco
hasta que mi uC no tenga más capacidad.
Espero que esto pueda darme una idea más clara.

Saludos

JoseFco 26-04-2008 17:56:31

"Tolomeo se mudo al Polo Norte"

Dedalo 26-04-2008 22:37:37

Atencion, pregunta, ¿porque vas a guardar en un fichero IntelHex 4Kb de codigo si solo son utiles unos pocos cientos de bytes? ¿es posible grabar solo una parte del chip? ¿Seria mas comodo un StringGrid mas pequeño que 4096 celdas?. Yo hice algo parecido para un PIC y tenia una solucion, el resto de la memoria no ocupada por el programa efectivo no lo llenaba con ceros, simplemente lo dejaba en blanco, es decir, a 3FFF. Asi puedes reconocer donde esta el limite del codigo activo y fijar un limite superior para los bucles de grabacion y de volcado a un fichero IntelHex o para grabar el micro o crear el StringGrid que va a contener los datos.

JoseFco 26-04-2008 23:40:23

"Tolomeo se mudo al Polo Norte"

JoseFco 26-04-2008 23:53:05

"Tolomeo se mudo al Polo Norte"

JoseFco 27-04-2008 01:07:46

"Tolomeo se mudo al Polo Norte"


La franja horaria es GMT +2. Ahora son las 12:10:39.

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