Aunolose
Adict Member
Bueno, no sé si está en la otra pagina o lo puse en el chat, así que lo repito y aclaro mejor.
Los Bootloader se limitan a copiar lo que viene por el puerto serie en la memoria de programa, como ellos (los bootloader) están en la memoria de programa, hemos de tener cuidado y "avisar" de que lo copie "más allá" para no chafarlo. (cosa muy habitual hasta que lo consigues) si lo chafas, has de reprogramar el PIC, esta vez con un programador de verdad.
La información de "echarlo más p'allá" viaja en el .hex, es decir: la genera el compilador, y para desplazar las direcciones (en CCS) son necesarias esas lineas que pongo antes, sobre todo la de #org esas lineas debes ponerlas en todos los programas que quieras cargar con el bootloader, antes de cualquier linea que genere código, y solo una vez (o te machacas a ti mismo)
¿que pasará cuando se arranque un PIC que tiene bootloader y un programa de usuario? lo primero que se ejecutará siempre es el bootloader, que decidirá (con una pata, o por tiempo, o por recepción) si entra en modo programación o no, si es que no, salta al programa de usuario (que debe estar en la dirección correcta).
Con las interrupciones pasa lo mismo, la primera rutina de interrupción la tiene el bootloader (es el que está en esa dirección de memoria) que lo que hará será saltar inmediatamente a la dirección del programa de usuario, y que, debe estar en la dirección correcta.
Con estas lineas que he puesto el código de usuario se pone a partir de la dirección 0x800, ese será su dirección de "reset" y los vectores de interrupción en el 0x808 y 0x818, que corresponden a los vectores de alta y baja prioridad respectivamente.
Todo este rollo para decirte que te asegures de que el hex que generas empieza en la dirección adecuada para no chafar el bootloader (si lo chafas, toca reprogramar y no ganamos nada) ojo con los vectores de interrupción.
Al usar un compilador diferente entre el bootloader y el programa de usuario, hay que saber como lo hace uno y otro, el bootloader del MCC18 (de microchip) salta a la dirección 0x800 con los vectores como he dicho, si quieres que tus programas generados con el CCS se coloquen ahí, pues eso, las instrucciones que pongo antes, aunque ahora sospecho que me falta lo de las interrupciones...
Si se puede hacer, mira el código generado por el CCS en ensamblador, allí tienes las direcciones donde va a parar cada cosa, si está por debajo de 0x800, no te servirá para el bootloader de microchip...
Los Bootloader se limitan a copiar lo que viene por el puerto serie en la memoria de programa, como ellos (los bootloader) están en la memoria de programa, hemos de tener cuidado y "avisar" de que lo copie "más allá" para no chafarlo. (cosa muy habitual hasta que lo consigues) si lo chafas, has de reprogramar el PIC, esta vez con un programador de verdad.
La información de "echarlo más p'allá" viaja en el .hex, es decir: la genera el compilador, y para desplazar las direcciones (en CCS) son necesarias esas lineas que pongo antes, sobre todo la de #org esas lineas debes ponerlas en todos los programas que quieras cargar con el bootloader, antes de cualquier linea que genere código, y solo una vez (o te machacas a ti mismo)
¿que pasará cuando se arranque un PIC que tiene bootloader y un programa de usuario? lo primero que se ejecutará siempre es el bootloader, que decidirá (con una pata, o por tiempo, o por recepción) si entra en modo programación o no, si es que no, salta al programa de usuario (que debe estar en la dirección correcta).
Con las interrupciones pasa lo mismo, la primera rutina de interrupción la tiene el bootloader (es el que está en esa dirección de memoria) que lo que hará será saltar inmediatamente a la dirección del programa de usuario, y que, debe estar en la dirección correcta.
Con estas lineas que he puesto el código de usuario se pone a partir de la dirección 0x800, ese será su dirección de "reset" y los vectores de interrupción en el 0x808 y 0x818, que corresponden a los vectores de alta y baja prioridad respectivamente.
Todo este rollo para decirte que te asegures de que el hex que generas empieza en la dirección adecuada para no chafar el bootloader (si lo chafas, toca reprogramar y no ganamos nada) ojo con los vectores de interrupción.
Al usar un compilador diferente entre el bootloader y el programa de usuario, hay que saber como lo hace uno y otro, el bootloader del MCC18 (de microchip) salta a la dirección 0x800 con los vectores como he dicho, si quieres que tus programas generados con el CCS se coloquen ahí, pues eso, las instrucciones que pongo antes, aunque ahora sospecho que me falta lo de las interrupciones...
Si se puede hacer, mira el código generado por el CCS en ensamblador, allí tienes las direcciones donde va a parar cada cosa, si está por debajo de 0x800, no te servirá para el bootloader de microchip...