uControl
Septiembre 19, 2014, 04:49:10 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  

La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

Páginas: [1] 2   Ir Abajo
  Imprimir  
Autor Tema: Lectura de archivo .hex en VC# para grabar en memoria EEPROM  (Leído 6923 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Moyano Jonathan
Amigo de uControl
PIC16F
******
Desconectado Desconectado

Mensajes: 602



« : Noviembre 13, 2010, 02:11:51 »

Hola tengo una duda sobre como manejar los datos provenientes de un archivo .hex.
En estos días porté la aplicación ejemplo sobre como visualizar archivos de Suky y le hice una pequeña modificación para que solo leyera archivos .hex.

Ahora luego de leer el articulo del maestro RedPIC sobre como está compuesto el archivo .hex: http://www.todopic.com.ar/foros/index.php?topic=23342.0

Tengo dudas sobre como filtrar los datos del hex en Visual C# para obtener solo el dato y la dirección donde tiene que ir ..como lo muestro en la figura y luego ir guardando los datos y las direcciones de los mismos en un arreglo para transmitirlo por USB:


La idea sería crear un arreglo de datos y direcciones y poderlo enviar por USB para que el PIC se encargue de grabar la memoria EEPROM..he estado mirando como lo hace el pickit2 ...pero la verdad es que no entiendo muy bien como lo hace  Idiota

En línea
Ariel
Global Moderator
dsPIC
****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 10618



WWW
« Respuesta #1 : Noviembre 13, 2010, 02:33:52 »

Dudo que te sirva de mucho, pero en Gambas yo lo resolví asi:

Código:
Abro el archivo HEX-----------------------------------------------------
PUBLIC SUB Load(sPath AS String) 'Carga el texto
  DIM hFile AS File
  DIM sData, sLine, sLineaASM AS String
  DIM i, iDirMemoria, iNroBytes AS Integer
 
  hFile = OPEN sPath FOR INPUT
  tNombreHEX.text = sPath
 
    WHILE NOT Eof(hFile)
    LINE INPUT #hFile, sLine
   
    'Si es contenido....
    IF Mid$(sLine, 1, 1) = ":" THEN
      'Es contenido, veo si son datos:
      IF Mid$(sLine, 8, 2) = "00"
        'Son datos, los formateo y muestro
         iDirMemoria = _ToDec(Mid$(sLine, 4, 4), 16) / 2 'Direccion de memoria del primer byte
         iNroBytes = _ToDec(Mid$(sLine, 2, 2), 16)   'Cantidad de bytes a leer
         
         IF iDirMemoria < 2048 THEN 'Si es parte de la FLASH.....
            FOR i = 0 TO (iNroBytes / 2) - 1
              'Coloco el valor en la memoria flash
              iFLASH[i + iDirMemoria] = _ToDec(Mid$(sLine, i * 4 + 10, 2), 16) + _ToDec(Mid$(sLine, i * 4 + 12, 2), 16) * 256
             
            NEXT
         END IF
         
      ENDIF
    ENDIF
  WEND

END

...a lo mejor puede darte una idea  embarrassed
En línea

Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5437


Con Qt...


WWW
« Respuesta #2 : Noviembre 13, 2010, 02:40:31 »

En Visual Studio, ya sea VB, C# o C++, tienes varias funciones para trabajar con string. Ya sea tomando un grupo de caracteres y convirtiéndolos en un valor numérico, o solo tomando grupo de caracteres. Además cuando lees un archivo, puedes leer por lineas. Entonces cargas una linea en un string temporal, con él trabajas los datos que contenga y sigues el proceso.


Saludos!
En línea

Moyano Jonathan
Amigo de uControl
PIC16F
******
Desconectado Desconectado

Mensajes: 602



« Respuesta #3 : Noviembre 13, 2010, 03:12:18 »

Como es la función para trabajar con lineas así lo investigo un poco  duda

Muchas gracias Ariel ahora voy a ver como puedo usar la info que me diste  bang
En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5437


Con Qt...


WWW
« Respuesta #4 : Noviembre 13, 2010, 04:08:39 »

MiArchivo->ReadLine(); Lee el archivo hasta el salto de linea.

Luego para trabajar con string tenemos:

Length: Largo de la cadena de texto.
char: Lee carácter en la posición indicada.
IndexOf: devuelve la posición de la primera ocurrencia.
LastIndexOf: Devuelve la posición de la ultima ocurrencia.
Insert: Inserta un texto en la cadena, en la posición indicada.
Remove: Elimina una cantidad de caracteres de la cadena, a partir de una posición.
Substring: Devuelve un string extraído de la cadena de caracteres.

Entre otras tantas. Hay que buscar en la ayuda MSDN para ver ejemplos, que parámetros recibe cada función y como se trabaja en cada lenguaje.

Saludos!
En línea

Moyano Jonathan
Amigo de uControl
PIC16F
******
Desconectado Desconectado

Mensajes: 602



« Respuesta #5 : Noviembre 13, 2010, 04:36:15 »

Muchas gracias Suky lo estudiaré a ver que saco en claro  Cool
En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5437


Con Qt...


WWW
« Respuesta #6 : Noviembre 14, 2010, 07:23:17 »

Hola Jonathan! Por aquí deje un ejemplo de como utilizar el control DataGridView, así la presentación de datos queda al estilo PicKit  Wink


Saludos!
En línea

Moyano Jonathan
Amigo de uControl
PIC16F
******
Desconectado Desconectado

Mensajes: 602



« Respuesta #7 : Noviembre 15, 2010, 01:02:08 »

Muchas gracias Suky sos un capo  bang
En línea
Moyano Jonathan
Amigo de uControl
PIC16F
******
Desconectado Desconectado

Mensajes: 602



« Respuesta #8 : Noviembre 16, 2010, 12:02:37 »

Hola suky portando tu aplicación me he encontrado con varios pormenores que he podido solucionar..pero hay 2 puntos todavía que no entiendo como se podría hacer para mejorarlos  duda

1° - En la intefaz gráfica me sobran espacios en blanco de ambos lados de la matriz...como te muestro en la siguiente inmágen.


2° - Y con respecto al código como podría hacer para hacer que el siguiente trozo de código se ejecute más rapidamente ?
 
Código:
  for(int Columna=1;Columna<10;Columna++){
                    DataGrid->Columns[Columna]->Width=50;
                 }
                 for(int Fila=0;Fila<16;Fila++){
                    DataGrid[0,Fila]->Style->BackColor=System::Drawing::SystemColors::ControlLight;
                    DataGrid[0, Fila]->Value = String::Format("{0:X4}", Fila * 8);
                 }

El problema radica en que tengo 16369 filas y el tiempo de ejecución aumenta notablemente...
Código:
for (int Fila = 0; Fila <16369; Fila++)
            {
                DataGrid[0, Fila].Style.BackColor = System.Drawing.SystemColors.ControlLight;
                DataGrid[0, Fila].Value = string.Format("{0:X4}", Fila );
            }
En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5437


Con Qt...


WWW
« Respuesta #9 : Noviembre 16, 2010, 12:32:32 »

Acabo de darme cuenta que hay un pequeño error, deberían ser 9 las columnas, por eso al numerar las filas se hace: Filas*8. Si acomodas la altura del contenedor para que entren cantidades enteras de filas no debería de aparecer ese espacio en blanco, por lo menos en mi caso no aparece  Tongue

Respecto a la velocidad, en mi maquina cargué las 16369 filas, y me pareció mínima. Hay un pequeña demora, pero creo que es normal.  rolleyes
En línea

Moyano Jonathan
Amigo de uControl
PIC16F
******
Desconectado Desconectado

Mensajes: 602



« Respuesta #10 : Noviembre 21, 2010, 07:12:52 »

La verdad he estado viendo como trabaja la función ReadLine...pero no he podido encontrar como hace ariel por ejemplo para leer línea a línea del texto....

Ariel pone asi...
Código:
'Si es contenido....
    IF Mid$(sLine, 1, 1) = ":" THEN
      'Es contenido, veo si son datos:
      IF Mid$(sLine, 8, 2) = "00"
        'Son datos, los formateo y muestro
         iDirMemoria = _ToDec(Mid$(sLine, 4, 4), 16) / 2 'Direccion de memoria del primer byte
         iNroBytes = _ToDec(Mid$(sLine, 2, 2), 16)   'Cantidad de bytes a leer

Lo que no entiendo ...es como hacer para trabajar línea a línea y filtrar solo lo que me interesa...en este caso la dirección del dato y el dato en si.

Los pasos a seguir es como en el programa de ariel ...filtrar inicio ";" , tipo de registro, etc...hasta llegar a los datos y poder trabajar con ellos..

la dirección de los datos como en el programa de ariel ...se obtendría leyendo la posición donde se encuentra los datos dentro del arhivo...


Espero que alguien pueda ayudarme ...o iluminarme con su conocimiento  cabezaso a la pared
En línea
Ariel
Global Moderator
dsPIC
****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 10618



WWW
« Respuesta #11 : Noviembre 21, 2010, 07:17:14 »

Hola!
Es sencillo...seguro que tienes funciones disponibles para:
1) Abrir el archivo (*)
2) Leer una linea del mismo hasta el final de la linea (**)

La parte de código que pusiste es la que analiza cada linea leida...el resto es solo un bucle que repite todo esto hasta el fin del archivo Wink

Saludos!

PD: En Gambas, esas instrucciones son:

(*) hFile = OPEN sPath FOR INPUT
(**) LINE INPUT #hFile, sLine

En Visual Basic son, creo, identicas.
   
En línea

Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert
Moyano Jonathan
Amigo de uControl
PIC16F
******
Desconectado Desconectado

Mensajes: 602



« Respuesta #12 : Noviembre 21, 2010, 07:22:07 »

Según lo que me dijo Suky usando la función ReadLine()....podemos leer una línea del archivo...ahora si yo hago lo siguiente:

Código:
string dato;

dato = ArchivoTexto.ReadLine();

Me devuelve null..... duda

Entonces...puse 2 ventanas de texto para poder empezar a filtrar el texto...y puse lo siguiente...
Código:
TEXTO.Text = ArchivoTexto.ReadToEnd(); // Leo archivo y lo cargo en TextBox.
 filtro = TEXTO.Text; // El valor del texbox lo cargo en la cadena que defini antes...
 Filtrodatos.Text = filtro; // Ahora ya puedo trabajar con la cadena de texto...

Ya teniendo los datos en la cadena....como trabajo con estos datos ?...por que tengo todo el contenido del archivo hex en la cadena..no se ni donde empieza ni donde termina  duda

Espero no ser molesto con la pregunta ....pero estoy medio trabado con esto  me voy a pique
En línea
Moyano Jonathan
Amigo de uControl
PIC16F
******
Desconectado Desconectado

Mensajes: 602



« Respuesta #13 : Noviembre 21, 2010, 07:24:41 »

Gracias ariel voy a investigar a ver que sale...hasta ahora de a poco las dudas se me han ido aclarando gracias a su ayuda  rolleyes2
En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5437


Con Qt...


WWW
« Respuesta #14 : Noviembre 21, 2010, 07:25:35 »

Bueno, no me acuerdo que datos tenia un hex, pero la idea sería la siguiente:

Creas una variable String, en ella guardas una linea. Luego pasas a verificar si es una linea util o un comentario. Eso accediendo al primer carácter de la linea ya se sabe. No se en C#, pero en C++ sería:

Código:
if(StringLinea[0]==':'){

}

Luego con los datos importantes de la linea puedes convertirlos a variables numéricas extrayendo cierta parte del string (->substring(offset, Count)) y haciendo la conversión que corresponda. Es más o menos lo que hace Ariel en el código que muestra.


Saludos!
En línea

Páginas: [1] 2   Ir Arriba
  Imprimir  
 
Ir a:  


La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.19 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.162 segundos con 29 consultas. (Pretty URLs adds 0.083s, 3q)