TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: jesconsa en 20 de Abril de 2010, 08:48:42

Título: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 20 de Abril de 2010, 08:48:42
Hola. Os escribo para ver si habeis tenido alguna experiencia actualizando el firmware de un PIC mediante Ethernet utilizando el modulo Tibbo. La idea es utilizar uno autoprogramable (16F88 por ejemplo) con un bootloader (Tiny o CCS) y que los datos serie se los de un modulo Tibbo al que se le mande el archivo Hex por TCP. La unica duda es el flujo de datos, el bootloader de CCS creo que se queda esperando caracter a caracter y no habria problemas "en teoria". Habeis cacharreado con algo de esto?. Muchas gracias. Jesus.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: Nocturno en 20 de Abril de 2010, 11:43:08
Si utilizas un bootloader serie de esos que mencionas, no hay ninguna diferencia al pasarlo a través de un Tibbo y una conexión Ethernet.
Yo lo he hecho en un proyecto y funciona estupendamente.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 20 de Abril de 2010, 12:09:51
Gracias por responder nocturno. Entonces funciona, estupendo. Supongo que utilizare el del CCS por verlo mas claro el codigo del loader.c. Ya contare el resultado. Gracias de nuevo. Jesus.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 29 de Abril de 2010, 09:50:15
Hola de nuevo...Por lo que veo hay dos maneras de hacer lo del bootloader con el CCS. Una es cargar el ex_bootloader.c con el ICD2 (el que tengo) en el pic y a partir de ahi ya el pic esperara el firmware por el puerto serie. Y la otra manera es incluir el bootloader (realmente solo el loader.c) como si fuera otra rutina de la aplicacion (lo estoy haciendo segun el ejemplo ex_load.c) pero no me va. Da un mensaje Out of ROM. Supongo que algo no esta bien metido ("orgeado") en la ROM pero da un poco de repelus tocar el loader.c. Alguien que haya trasteado con esto?. Tu nocturno?.

Gracias.
Jesus.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: Nocturno en 29 de Abril de 2010, 11:27:17
Necesariamente la primera vez tendrás que programar el PIC usando un programador, como el ICD por ejemplo.
Enséñame tu programa que te da error al compilar; seguro que es algo que podemos resolver.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 30 de Abril de 2010, 22:09:42
No depende de mi codigo nocturno. El simple hecho de intentar compilar el ex_bootloader.c ya da un error de compilacion. Da un error "Se espera encontrar una instruccion #device antes de...etc". Pongo dicha instruccion pero entonces me salen mas fallos que faltan '(' y cosas asi. No recuerdo que version del CCS uso, creo que es la 4.068 o alguna parecida. Que version de CCS teneis que vaya bien (al menos compile bien) lo del bootloader?. Un saludo y gracias.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: Nocturno en 01 de Mayo de 2010, 01:51:23
Qué raro que te falle; seguramente habrás hecho algún cambio en ex_bootloader y no te acuerdas. Te lo dejo aquí por si acaso.

Yo he probado a compilarlo con la 4.084 y no ha salido ni un error.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 01 de Mayo de 2010, 13:19:36
Hola de nuevo. Gracias por responder nocturno. Efectivamente algo haria yo mal. He instalado la version 4.104 del CCS y he utilizado el editor que trae. Siempre habia trabajado con MPLAB + CCS pero el editor del CCS me ha sorprendido gratamente porque entre sus opciones del wizard ya viene lo de incluir el bootloader. No he tenido ningun problema en compilar como tu bien dijiste nocturno. Ahora me asalta una duda existencial, el wizard propone 2 caminos, poner el bootloader al principio de la memoria o al final. Estas dos lineas las genera el Wizard:

//BOOTLOADER AT START - Include Bootloader.h in your application - See sample application Ex_Bootload.c 
//BOOTLOADER AT END - Always include the projectname_bootloader.h file in future versions of the project


Es decir, si lo pones al principio entiendo que lo cargas una vez y listo, el Bootloader.h se encargara de proteger esta parte de la memoria y podras cargar las nuevas versiones del firmware del PIC tantas veces como quieras. Si lo cargas al final incluyes el bootloader (el antiguo loader.c) cada vez que vuelcas el programa, lo cual no me parece muy logico porque si el bootloader no se puede sobreescribir asi mismo para que incluirlo...?.

En fin. Parece que el camino de ponerlo al principio de la memoria es el que me parece mas logico pero el segundo me llama la atencion. Que opinas de todo esto nocturno?. Has probado tu las dos "versiones" del bootloader?.

Muchas gracias!.
Jesus.


Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: Nocturno en 01 de Mayo de 2010, 14:10:36
Hace tiempo que lo usé y no recuerdo bien, de hecho no recuerdo esa opción de colocarlo en una u otra zona.
Pero a mi modo de ver, debe ser indiferente en qué zona de la memoria lo coloques, siempre que dicha zona quede protegida.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 05 de Mayo de 2010, 05:55:34
Aqui estamos de nuevo. He estado haciendo algunas pruebas con el bootloader del CCS pero no consigo verlo del todo claro. Como dije el Wizard del CCS te permite añadir el bootloader a un projecto. El bootloader puede ir al inicio de la memoria (compila bien pero no veo que funcione..algo estare haciendo mal) y al final de la memoria (no compila pero me gusta mas porque no reubica el vector de Reset ni el de interrupciones).  Por que compila uno bien el otro no?, si no escribo nada de codigo, solo es lo que sale del Wizard!!...

Si parto de cero y trato de compilar el ejemplo (sin wizard) ex_bootloader.c me da error ("a #device is expected before...." en loader.c , el mismo error que sale con el Wizard cuando incorporo el bootloader al final de la memoria). Me parece increible que un simple ejemplo del CCS no se pueda compilar y volcar "a pelo". Lo que me esta sirviendo esto es para conocer el PIC internamente pero para nada mas. No quiero utilizar ni el Tiny ni el de Microchip porque quiero que el puerto serie no sea el de hardware que trae el pic sino uno definido por mi con la directiva #use rs232......Alguna idea?....Estoy utilizando el CSS 4.104....

Gracias!
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: bmfranky en 05 de Mayo de 2010, 09:19:20
Hola , ese error significa que no has definido el tipo de micro antes de llamar a una funcion que depende de el tipo asignado. pon por ejemplo.

#include <18f4520.h>

#include <bootloader.c>

void main()
{
while(1)
{
}
}

compilalo de las dos opciones y me cuentas que te dice el compilador.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 05 de Mayo de 2010, 09:53:46
Gracias por responder bmfranky, pero eso es lo primero que hice. El error lo da en el archivo loader.c. Si pongo el #device con el pic en este archivo entonces me da un chorro de errores.....

Saludos.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 05 de Mayo de 2010, 12:07:24
Esta claro que el problema esta en el archivo loader.c. Haga lo que haga....He creado un proyecto en MPLAB de cero y he puesto el codigo del ejemplo ex_load.c, es decir, lo mas basico que hace uso de loader. c...y falla...el error que da es como siempre:

 "*** Error 128 "loader.c" Line 45(1,4): A #DEVICE required before this line".....

y la linea que señala es una de las iniciales:

             ...
 ->        int  buffidx;
            char buffer[BUFFER_LEN_LOD];

            #define ACKLOD 0x06
            ...

Empiezo a estar desesperado......

Saludos!.



Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 05 de Mayo de 2010, 12:30:26
Algo he conseguido......He puesto el loader.c que genera el Wizard del CCS (es un loader.c modificado) lo he incluido en el proyecto donde esta el ex_load.c. Y si, ahora compila sin problemas. Algo es algo. Ahora lo meto en mi programa y lo que da es un Out of ROM. Mi programa ocupa el 71% de la memoria, me extraña que el bootloader pete por ocupar 512 bytes = 12%. Segun estos calculos deberia caber todo sin problema....si esta todo bien paginado vamos.....


Seguire depurando mi programa para ver si puedo liberar mas memoria.......

Saludos!!.
Jesus.


Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: bmfranky en 05 de Mayo de 2010, 13:20:19
Hola jesconsa, fíjate bien en que dirección de memoria te ubica el loader por defecto, haber si alguna de las direcciones que usa ya esta usada por tu programa y por ello te crea conflicto.

Si no te importa , publica el programa que utilizas e intentare compilarlo haber si así te puedo ayudar en algo.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 05 de Mayo de 2010, 13:46:41
Hola!,....el loader.c modificado que genera el Wizard (eligiendo que ponga el bootloader al principio de la memoria) comienza de esta manera:

//bootloader code
// APPLICATION_ISR_VECTOR - Where the compiler is going to put the ISR
#define FIRMWARE_UPGRADE_VECTOR  0          // Bootloader at Start of memory
#define MAX_UPGRADE_AREA         (0x500)    // Space required by bootloader
#define MIN_FIRMWARE_UPGRADE_MEMORY_AREA   (0x20)   // Start of bootloder code
#define MAX_FIRMWARE_UPGRADE_MEMORY_AREA   (MAX_UPGRADE_AREA-1) // End of bootloder code
#define APPLICATION_RESET_VECTOR 0x500     // New RESET Vector
#define APPLICATION_ISR_VECTOR   0x508     // New Interrupt Vector

// Re-vectored RESET vector from 0x0000 to 0x0500
// Re-vectored Interrupt vector from 0x0008 to 0x0508
#build(reset=APPLICATION_RESET_VECTOR, interrupt=APPLICATION_ISR_VECTOR)


#define LOADER_END   MAX_UPGRADE_AREA -1
#define LOADER_ADDR  MIN_FIRMWARE_UPGRADE_MEMORY_AREA


#define BUFFER_LEN_LOD 64

int  buffidx;
char buffer[BUFFER_LEN_LOD];

#define ACKLOD 0x06
#define XON    0x11
#define XOFF   0x13

#SEPARATE
unsigned int atoi_b16(char *s);

#ORG LOADER_ADDR+10, LOADER_END auto=0 default
void real_load_program (void)
{
   int1  do_ACKLOD, done=FALSE;
   int8  checksum, line_type;
   int16 l_addr,h_addr=0;

......


y el codigo que funciona con este bootloader pues el ejemplo como ya dije de ex_load.c (ocupan los dos el 20% ). En el momento que pongo un main mas grande y mas rutinas ya casca. Supongo que tiene que ver con la estructura de la memoria o algun solapamiento que hasta ahora no he visto en este codigo que pongo...... Supongo que los primeros 20 bytes que deja el compilador es para hacer un jump al main. Ya en el main se salta al loader cuando se quiera y se reinicia para volver a empezar....

Gracias!
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 05 de Mayo de 2010, 14:18:16
Este es el fallo que me da a dia de hoy..;...:

*** Error 71 "Proyecto.c" Line 1390(0,1): Out of ROM, A segment or the program is too large    real_load_program

Es decir, que la rutina del loader no entra en la memoria ni a empujones....

Saludos!
Jesus



Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: bmfranky en 05 de Mayo de 2010, 18:25:20
Ese error indica que la rutina se sale del banco, creo que es un bug del CCS al manejar los bancos de memoria, intenta partir las funciones en bancos independientes con la directiva #ORG, enpezando en la direccion 500-1 como te indica el source,Ten en cuenta que el banco 1 solo alcanza 2k hasta la dirección 7ff , y ahí cambia al 2gundo banco. si el bootloader ocupa 500 todo lo que pase de 2ff colapsa el banco, prueba a establecer la dirección de inicio,en el segundo banco haber que pasa.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 06 de Mayo de 2010, 13:59:53
Ya parece que encontre el fallo.....Despues de intentar reubicar codigo en la memoria con #ORG 0x800 (gracias franky), de depurar y liberar memoria, de combinar hasta la saciedad esta casi pero no esta. Con el programa + bootloader tengo el 78% ocupado pero me sigue dando un Out of ROM en el loader modificado, exactamente en la instruccion de write_program_memory. Cuando comento esta linea todo compila y se programa (con ICD2), cuando no la comento...Out of ROM....Me parece bastante raro porque el loader tiene su memoria de 512 bytes reservada....he modificado esta reserva pero nada, he variado algunas cosas pero nada, he sacado esta instruccion fuera de la rutina pero nada...........se me acaban las ideas.....

Gracias!
Jesus.

Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 06 de Mayo de 2010, 14:46:28
Parece que ya esta.....He ampliado (bastante) mas (0x100 bytes mas) para que el bootloader tuviera mas memoria y ya compila todo bien. Ahora que funcione (jajajaja). La modificacion es esta:

#define FIRMWARE_UPGRADE_VECTOR  0          // Bootloader at Start of memory
#define MAX_UPGRADE_AREA         (0x600)    // Space required by bootloader
#define MIN_FIRMWARE_UPGRADE_MEMORY_AREA   (0x20)   // Start of bootloder code
#define MAX_FIRMWARE_UPGRADE_MEMORY_AREA   (MAX_UPGRADE_AREA-1) // End of bootloder code
#define APPLICATION_RESET_VECTOR 0x600     // New RESET Vector
#define APPLICATION_ISR_VECTOR   0x608     // New Interrupt Vector


Gracias. Ya os contare como va....

Saludos!!!
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: bmfranky en 06 de Mayo de 2010, 19:33:02
es un fallo del CCS, segun la pagina de descargas esta solucionado en la 4.106
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: Nocturno en 07 de Mayo de 2010, 01:46:18
CCS dispone de una utilidad muy práctica para conseguir que todo encaje en su sitio y quepa bien.
Después de compilar, dale a la opción "Statistics". En la página que se te abre vete abajo del todo, a la sección "Segment usage".
Ahí verás la zona ocupada y libre de cada tramo de memoria, y podrás ajustar los valores de tus direcciones de memoria para maximizar la ocupada y minimizar la libre.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 13 de Mayo de 2010, 06:21:59
De nuevo atrancado. Estoy usando la 4.106. Todo compila bien etc, pero de ejecutarse nada de nada, es como si no iniciara. Cuando quito el #include del bootloader, es decir , se queda la aplicacion normal y corriente, entonces si inicia, pero con el codigo del bootloader incluido no inicia.....Ideas?......

Gracias!
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: bmfranky en 13 de Mayo de 2010, 15:05:56
Bueno, creo que el código de bootloader, solo iniciara si lo programas en un chip que tenga el cargador del bootloader, directamente simularlo no podrás, porque te faltan los saltos que genera el susodicho para funcionar.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 14 de Mayo de 2010, 07:13:09
Gracias por responder franky. Yo incluyo el bootloader en el main . El bootloader ya tiene sus #ORG para poner su codigo en sitios de la ROM determinados y tambien tiene su #build para poner el vector de reset y de interrupcion donde quiera. El main se pone en el resto de la memoria libre y el compilador pone en 0x0000 un salto al main. En el main detecto una determinada condicion para que salte el bootloader y en el bootloader hay un reset_cpu para resetearlo todo y volver a empezar con el nuevo main.....No entiendo que problema hay.......Estoy por pasarme al tiny, estudiarlo y modificarlo para que escuche por un puerto serie diferente al hardware del pic......

Gracias.
Jesus.


Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 17 de Mayo de 2010, 13:38:21
Aqui estoy de nuevo..parece que ya se va viendo la luz......Despues de peinar el foro de CCS parece claro que la ubicacion del bootloader en el final de la memoria es mejor que ponerlo en el principio por muchas razones (no tener que reubicar el vector de reset ni el de interrupcion, mejor eficiencia de las interrupciones, etc). Con esta premisa y dando muchas vueltas he modificado el bootloader del CCS (si , ese que siempre da error...) como sigue:


//bootloader code
//#ifndef __BOOTLOADER_H__
//#define __BOOTLOADER_H__

//#define __BOOTLOADER_INCLUDED__ TRUE

//#if defined(__PCM__)
   #define LOADER_SIZE   0x1FF //antes 0x1FF
//#elif defined(__PCH__)
  // #define LOADER_SIZE   0x3FF
//#endif
//#endif
//BOOTLOADER AT END
// LOADER_END - This is the end of the general purpose bootload code.
//#ifndef LOADER_END
#define LOADER_END      getenv("PROGRAM_MEMORY")-1
#define LOADER_ADDR LOADER_END-LOADER_SIZE
//#endif

// For 16F88


#define BUFFER_LEN_LOD 64

#define ACKLOD 0x06
#define XON    0x11
#define XOFF   0x13
#define OK      0x14


int  buffidx;
char buffer[BUFFER_LEN_LOD];
  int1  do_ACKLOD, done=FALSE;
   int8  checksum, line_type;
   int16 l_addr,h_addr=0;
   int32 addr;
   #if getenv("FLASH_ERASE_SIZE")>2
      int32 next_addr;
   #endif
   int8  dataidx, i, count;
   int8  data[32];



#SEPARATE
unsigned int atoi_b16(char *s);


#SEPARATE
void escribe(){
 // Loops through all of the data and stores it in data
                  // The last 2 bytes are the check sum, hence buffidx-3
                  for (i = 9,dataidx=0; i < buffidx-3; i += 2)
                     data[dataidx++]=atoi_b16(&buffer);
            
                  #if getenv("FLASH_ERASE_SIZE") > getenv("FLASH_WRITE_SIZE")   // 32-word > 4-word
                     #if defined(__PCM__)
                        if ((addr!=next_addr)&&(addr&(getenv("FLASH_ERASE_SIZE")-1)!=0))
                     #else
                        if ((addr!=next_addr)&&(addr&(getenv("FLASH_ERASE_SIZE")/2-1)!=0))
                     #endif
                           erase_program_eeprom(addr);
                     next_addr = addr + 1;
                  #endif
               
                  write_program_memory(addr, data, count);

}



#ORG LOADER_ADDR+10, LOADER_END auto=0 default
void real_load_program (void)
{
 
   
  #use rs232(baud=9600, xmit=PIN_B4, rcv=PIN_B5,PARITY=E,ERRORS)
           
   while (!done)  // Loop until the entire program is downloaded
   {
      buffidx = 0;  // Read into the buffer until 0x0D ('\r') is received or the buffer is full
      do {
         buffer[buffidx] = getc();
      } while ( (buffer[buffidx++] != 0x0D) && (buffidx <= BUFFER_LEN_LOD) );

      //putchar (XOFF);  // Suspend sender

      do_ACKLOD = TRUE;

      // Only process data blocks that start with ':'

      if (buffer[0] == ':') {
         count = atoi_b16 (&buffer[1]);  // Get the number of bytes from the buffer

         // Get the lower 16 bits of address
         l_addr = make16(atoi_b16(&buffer[3]),atoi_b16(&buffer[5]));

         line_type = atoi_b16 (&buffer[7]);

         addr = make32(h_addr,l_addr);

         #if defined(__PCM__)  // PIC16 uses word addresses
            addr /= 2;
         #endif

         // If the line type is 1, then data is done being sent
         if (line_type == 1) {
            done = TRUE;
         #if defined(__PCM__)
         } else if ((addr < LOADER_ADDR || addr > LOADER_END) && addr < 0x2000){
         #elif defined(__PCH__)
         } else if ((addr < LOADER_ADDR || addr > LOADER_END) && addr < 0x300000){
         #endif
            checksum = 0;  // Sum the bytes to find the check sum value
            for (i=1; i<(buffidx-3); i+=2)
               checksum += atoi_b16 (&buffer);
            checksum = 0xFF - checksum + 1;

            if (checksum != atoi_b16 (&buffer[buffidx-3]))
             do_ACKLOD = FALSE;

            else   {
               if (line_type == 0) {
                 escribe();
               }
               else if (line_type == 4)
                  h_addr = make16(atoi_b16(&buffer[9]), atoi_b16(&buffer[11]));
            }

         }
      }

      if (do_ACKLOD)
            putchar ('.');   // Linea OK
            else
               putchar ('_');   // Linea chunga

         putchar('\r');
         putchar('\n');

      //putchar (ACKLOD);
         //putchar(XON);

   }
   putchar(OK);
   //putchar (ACKLOD);
   //putchar(XON);
   #ifndef _bootloader
   reset_cpu();
   #endif

}

unsigned int atoi_b16(char *s) {  // Convert two hex characters to a int8
   unsigned int result = 0;
   int i;

   for (i=0; i<2; i++,s++)  {
      if (*s >= 'A')
         result = 16*result + (*s) - 'A' + 10;
      else
         result = 16*result + (*s) - '0';
   }

   return(result);

}

#ORG default

#ORG LOADER_ADDR, LOADER_ADDR+9
void load_program(void)
{
   real_load_program();
}





De esta manera no da el maldito error de "Out of ROM". Por otra parte el "#ORG default" es imprescindible para que el compilador siga poniendo el codigo del Main al principio de la ROM. La funcion load_program tambien es imprescindible para que puedan hacerse los saltos entre el main y el bootloader. De momento estoy haciendo la aplicacion del PC para volcar el Hex pero pinta muy bien. Por lo menos compila e inicia que no es poco.

Espero que esto le sirva alguien, estoy seguro de que si.. Ya os contare.

Saludos!!....
Jesus.


Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 21 de Junio de 2010, 06:20:56
Sigo con esto....me he encontrado con otro problema...el bootloader en principio funcionaba bien, pero ha llegado un momento (80% memoria ocupada del PIC) que al cargar un nuevo firmware, en el proceso se para y se bloquea....parece como si se corrompiera una parte del bootloader (he leido en foros que el bootloader del CCS no es autocontenido, es decir, que llama a funciones como getc o write_program_memory que no estan dentro del bootloader, y al ser estas funciones externas al bootloader se corrompen al ser sobreescritas.......estoy tratando de poner el getc en asm dentro del bootloader pero no se si esto es como digo exactamente.......alguien con experiencia sobre esto?....estoy harto de ver los foros pero nadie ha encontrado una solucion.....

Muchas gracias
Jesus.

Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 21 de Junio de 2010, 08:57:24
Me parece que lo he resuelto.......tenia en los fuses NOWRT, MAL!!!........debe estar en WRT, de esta manera parece que no falla........

Gracias por leer.
Saludos
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 22 de Junio de 2010, 06:00:12
Estaba equivocado.......debe estar en NOWRT......Si reservo la parte de interrupcion con #ORG 0x4, 0x06 {} me deja grabar pero al final no reinicia bien...por aqui debe andar la solucion pero no doy con la tecla....alguien ha trasteado con todo esto?,...Os recuerdo que estoy tratando que funcione el bootloader de CCS en un 16f88, cuando el main llama a la rutina de bootloader comienza bien pero se para. La direccion donde se para es 0x150, mirando el .lst del compilador en esta direccion hay un delay del programa principal. En el bootloader he probado ha hacer muchos #inline para hacer al bootloader autocontenido, sin llamadas, pero nada de nada....se me acaban las ideas.....alguna idea????

Muchas gracias
Jesus.
Título: Re: Actualizar firmware PIC por TCP mediante Tibbo
Publicado por: jesconsa en 22 de Junio de 2010, 08:19:53
Por fin, ahora si!!!...El problema es que el CCS se arma el taco si se sobreescribe en la zona del vector de interrupcion, esto no esta documentado en ninguna parte....En mi programa no tengo interrupciones pero igualmente debo reservar la zona del vector:


#ORG default
#org 0x0004, 0x00028 {}    

Este codigo debe ir al inicio del programa principal.      
Ademas se deben reservar como veis unos bytes mas. Total, que asi funciona el dichoso bootloader con el CCS, ni os digo la de prueba-error que he hecho.

Saludos!!.
Jesus.