| PicManía by RedRaven |
Búsqueda personalizada
|
EL FICHERO HEX EXPLICADO |
|
El fichero .hex es el paso intermedio entre nuestro compilador o ensamblador y el PIC al que va dirigido nuestro programa. |
|
| Prefacio u introito |
|
Continúo con mi costumbre de publicar lo que
aprendo para que otros puedan aprender lo que yo he aprendido durante mi
aprendizaje .. (demasiados aprenderes para tan poca frase así que ahí lo
dejamos
Como últimamente he estado batallando con la interpretación de estos ficheros .hex he tenido que enterarme de cómo están construidos así que aquí tenéis un poco de información de ellos, útil sobre todo para los nuevos diseñadores de grabadores de PIC's o para los que estén entrando en el tema de los Bootloadores. Ambos deben empezar por conocer esto de los .hex |
| Introducción al asunto |
| Cada vez
que compiláis u ensambláis un programa fuente vuestro compilador u
ensamblador genera un fichero .hex cuyo contenido se corresponde
exactamente con lo que ha de ser grabado en la memoria de programa (o
EEPROM) del PIC. Fijaos que he dicho "se corresponde" y no que sea exactamente lo que ha de ser grabado en el PIC, no es una "imagen" de la memoria de programa del PIC, sino una serie de instrucciones que el grabador de PIC's o el Bootloader que utilicemos sabe interpretar y por lo tanto grabar lo que corresponde exactamente en su sitio. Es la explicación o interpretación de este formato de lo que trata este post. En fondo un fichero .hex no es mas que una lista de direcciones de memoria y lo que contiene cada una de estas posiciones. Mas adelante veremos cómo están codificadas las direcciones y su contenido. Ahora vamos a ver un poco de Historia: El formato .hex es del fabricante de micros INTEL que lo inventó allá por los años 70 del siglo pasado para usarlo exactamente para lo mismo que nosotros lo estamos usando ahora pero para sus micros 8085 y otros cacharros antediluvianos por el estilo (no reíros pero yo los he programado Aunque hay tres tipos de ficheros HEX: de 8 bits, de 16 bits y de 32 bits también llamados I8HEX, I16HEX e I32HEX respectivamente vamos a ver solo el de 8 bits que es el que más utilizamos para nuestros PIC's 16F y 18F, el resto son muy parecidos pero no iguales y lo dejamos para otro momento. |
| Descripción |
| Un fichero
.hex es un fichero de texto. Por lo tanto puede ser editado con un notepad
o similar. Una muestra de su apariencia es: |
:020000040000FA :1000000043EF00F0EA6A070EE96EEF500DE0060ECE :10001000016E006A002EFED7012EFBD77B0E006E0C :10002000002EFED7EF2EF3D7000C0990099208524C :1000300002E0098001D0098207C003F00650D8B45D :100040000706060603101EE0000E0AB2010E0B6E34 :10005000000E09B0010E0B24016EE8B002D0819CA5 :1000600001D0818C000E0AB2010E0B6E000E09B297 :10007000010E0B24016EE8B002D0819C01D0818C6E :100080000A2ADAD7000CF86AD09EEA6AE96AC150F7 :10009000C00B0F09C16E070EB46E040E066EFA0E89 :1000A000076EB0DF062EFBD7076A190E066E086AC8 :1000B000BCDF040E066EFA0E076EA4DF062EFBD719 :1000C000076A190E066E010E086EAFDFE6D7030051 :020000040030CA :0E000000000C1E1F008381000FC00FE00F4098 :00000001FF ;PIC18F4550 |
|
Consiste en una serie de líneas consecutivas
que empiezan siempre por el carácter ":" (dos puntos) salvo los
comentarios que usan ";" (punto y coma) y terminadas en [0x0D][0x0A] (Fín
de línea, Retorno de Carro) Todos números: Longitudes, direcciones y datos están expresados en HEXADECIMAL mediante sus caracteres ASCII correspondientes. La estructura de una línea es:
|
| Nuestro Ejemplo |
| Podemos así
entonces interpretar nuestro ejemplo anterior de la siguiente forma: : 02 0000 04 0000 FA -> Línea relevante, con dos bytes de información, de tipo 04 : luego las direcciones siguientes se complementan a 32 bits con 0x0000, 0xFA es el checksum. : 10 0000 00 43 EF 00 F0 EA 6A 07 0E E9 6E EF 50 0D E0 06 0E CE -> Línea relevante, con 16 bytes de información, de tipo 00 : así que hay que escribir 0x43 (en 0x00000000), 0xEF (en 0x00000001), ... , 0x0E (en 0x0000000F). 0xCE es el checksum. : 10 0010 00 01 6E 00 6A 00 2E FE D7 01 2E FB D7 7B 0E 00 6E 0C -> Línea relevante, con 16 bytes de información, de tipo 00 : así que hay que escribir 0x01 (en 0x00000010), 0x6E (en 0x00000011), ... , 0x6E (en 0x0000001F). 0x0C es el checksum. ... ... ... : 02 0000 04 0030 CA -> Línea relevante, con dos bytes de información, de tipo 04 : luego las direcciones siguientes se complementan a 32 bits con 0x0030, 0xCA es el checksum. : 0E 0000 00 00 0C 1E 1F 00 83 81 00 0F C0 0F E0 0F 40 98 -> Línea relevante, con 14 bytes de información, de tipo 00 : así que hay que escribir 0x00 (en 0x00300000), 0x0C (en 0x00300001), ... , 0x40 (en 0x0030000D). 0x98 es el checksum. :00000001FF -> Línea relevante. Fin de Fichero HEX ;PIC18F4550 -> Línea irrelevante. Comentario. |
|
Bueno, y eso es todo por hoy. Espero que os
aproveche.
|
Esta página se modificó el 27/12/2008
|