Autor Tema: Script para convertir archivos *.HEX en datos de programa C  (Leído 2131 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Script para convertir archivos *.HEX en datos de programa C
« en: 05 de Octubre de 2018, 13:18:16 »
Respondo aquí al tema planteado en este otro hilo:
https://www.todopic.com.ar/foros/index.php?topic=49064.0


Se trata de generar un programa en c que contenga dentro de un array todos los valores de un fichero "bootloader.hex" grabado en formato IntelHex.

   bootloader.hex  --> programa.c  que puede grabar el nuevo bootloader

Ese programa.c se compila y se sube al microcontrolador para que actualice el bootloader.
« Última modificación: 05 de Octubre de 2018, 14:25:00 por Picuino »

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Script para convertir archivos *.HEX en datos de programa C
« Respuesta #1 en: 05 de Octubre de 2018, 14:01:54 »
Script de Python:

Código: Python
  1. from intelhex import IntelHex
  2.  
  3. program = """
  4. // Bootloader data array
  5. bootloader[] = {
  6. %s
  7. }
  8.  
  9. // Main program
  10. void main() {
  11.  ...
  12. }
  13. """
  14.  
  15. ih = IntelHex()
  16. ih.fromfile('bootloader.hex', format='hex')
  17. maxaddr = int(ih.maxaddr() / 4 + 1) * 4
  18. textformat = '   ' + '0x{:02x}, ' * 4
  19. textdata = [textformat.format(ih[i], ih[i+1], ih[i+2], ih[i+3]) for i in range(0, maxaddr, 4)]
  20.  
  21. with open('bootloader.c', 'wt') as fo:
  22.    fo.write(program % ('\n'.join(textdata)))
« Última modificación: 05 de Octubre de 2018, 14:19:14 por Picuino »

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Script para convertir archivos *.HEX en datos de programa C
« Respuesta #2 en: 05 de Octubre de 2018, 14:05:11 »
Este es el programa C que produce a partir de un pequeño archivo "bootloader.hex" de ejemplo:

bootloader.hex
Código: Text
  1. :1000000083018C1EF62F1A08F8070800FB0BF02F4F
  2. :10001000FC0BEF2FFD0BEE2F981F080098139C2F61
  3. :02002000623F3D
  4. :00000001FF


bootloader.c
Código: C
  1. // Bootloader array
  2. bootloader[] = {
  3.    0x83, 0x01, 0x8c, 0x1e,
  4.    0xf6, 0x2f, 0x1a, 0x08,
  5.    0xf8, 0x07, 0x08, 0x00,
  6.    0xfb, 0x0b, 0xf0, 0x2f,
  7.    0xfc, 0x0b, 0xef, 0x2f,
  8.    0xfd, 0x0b, 0xee, 0x2f,
  9.    0x98, 0x1f, 0x08, 0x00,
  10.    0x98, 0x13, 0x9c, 0x2f,
  11.    0x62, 0x3f, 0xff, 0xff,
  12. }
  13.  
  14. // Main program
  15. void main() {
  16.   ...
  17. }
« Última modificación: 05 de Octubre de 2018, 14:17:53 por Picuino »

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Script para convertir archivos *.HEX en datos de programa C
« Respuesta #3 en: 05 de Octubre de 2018, 14:16:45 »
Ahora solo queda modificar la plantilla del programa c que se encuentra dentro del script Python, para que se genere todo el programa C grabador de bootloader de una sola vez.

También se podría separar el script python y la plantilla del programa c en dos archivos separados.