Si queres usar el forma del .hex para grabarlo si.
Usualmente si se trata de un producto comercial y esperas que el mismo pueda actualizarse, lo minimo que deberias hacer es codificar el codigo, sino le estarias dando el codigo a cualquier persona, habilitandolo a que te copie todo el proyecto con solo hacer ing. inversa de la PCB nomas.
Sea cual sea que ejecutes como memoria auxiliar, por ultimo vas a tener que grabar de nuevo las palabras de configuración.
Ej...
Memoria Principal: Programa
Memoria Auxiliar : Boot
- Programa al detectar el pedido de actualizacion, debe cambiar el bit de configuracion RSTPRI, que es quien selecciona que memoria usar. Y reset del micro. (No podria aplicar ningun salto, dejaria la RAM con lo ocupado del programa)
- Aca entra el boot a pedir datos y grabar el micro. Vas a tener que manejar posibles problemas aca, como falta de datos (timeout), reintentos, marcado de numero de lineas, proteccion por falta de tension, etc. Lo bueno de esto es que al iniciarse el boot, si se resetea comenzaria todo de nuevo. Pero el server debe manejar ese problema.
- Luego de que se termino de grabar debes volver a grabar los bits de configuracion para que inicie en el programa principal. Esto al ultimo por si es que existe algun problema al momento de la grabacion, asi cualquier cosa inicia el boot de nuevo.
Otras opciones a considerar es en ves de mantener el programa NUEVO en la flash, seria mantener el programa viejo. De esa forma si luego de grabar el boot, el programa NO inicia o se detecta algun problema. Se puede volver a la version anterior que si funcionaba. El programa nuevo lo vas tomando linea a linea, decodificando y guardando en RAM.
Lo unico feo de esto es que tendrias que repetir casi todo el codigo de inicio, manejo , etc.
Pero con solo 5% ocupado no tiene mucho sentido preocuparse.
cuando me encontré con el tema del byte fantasma de los pic de 16 bits,
Ahora que lo veo, cuando uno trabaja con tablas y programacion en flash, los registros son de 16bits, lo cual seria raro enviar solo 8 y luego 16 (Incluso para manejarlo con algun programa), para eso se envia 16 y 16 (tratas a todos como de 16bits), por eso estarian los ceros incluidos. A pesar que el byte de mayor peso sea puros ceros.