Autor Tema: XC8 - Looping around allocGlobals()  (Leído 3322 veces)

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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
XC8 - Looping around allocGlobals()
« en: 18 de Mayo de 2014, 02:20:23 »
Hola

Estoy compilando con XC8 1.30 y 1.31. El 1.30 con modo PRO tarda demasiado en compilar y termina arrojando lo siguiente:

Código: [Seleccionar]
Looping around allocGlobals()

make[2]: Leaving directory `D:/GPS_tracker.X'
make[1]: Leaving directory `D:/GPS_tracker.X'
(908) exit status = 1
make[2]: *** [dist/default/production/GPS_tracker.X.production.hex] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 4m 35s)

Creo que es porque no sabe cómo acomodar la ROM y mejor se rinde jajaj

Y el 1.31 sí compila, pero mis strings constantes en ROM no se envían bien por la UART.

¿Alguien sabe cómo corregir este problemita?  :8}

Vi en otros lados que el looping around es muy común, pero que no tiene solución  :angry:

Gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: XC8 - Looping around allocGlobals()
« Respuesta #1 en: 18 de Mayo de 2014, 12:24:21 »
Ya con la mente más fresca me puse a pasar escoba por funciones que no utilizo. Bajé el tamaño de la ROM y el compilador terminó de compilar. Aún así me preocupa que el código nuevo que agregué no cupiera, tenía 54% de ROM en un PIC18F26K20 de 64kB. Tengo muchas funciones de pequeño tamaño por lo que acomodarlas en el jarrito no debería ser complicado.

Ahorita quedó así en modo free:

Program space        used  795Dh ( 31069) of 10000h bytes   ( 47.4%)

 :?

Esto con la v1.31.

Con la 1.30 sigue sin compilar  :8}

Edito: Si no hago uso de printf, el código compila en la 1.30 :S
« Última modificación: 18 de Mayo de 2014, 13:40:48 por migsantiago »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: XC8 - Looping around allocGlobals()
« Respuesta #2 en: 18 de Mayo de 2014, 14:23:30 »
Ya envié un ticket a Microchip.  :(

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: XC8 - Looping around allocGlobals()
« Respuesta #3 en: 20 de Mayo de 2014, 22:58:52 »
Bueno, como buenos camaradas, me contestaron los de Microchip con un workaround en lo que resuelven el issue en el compilador. Se los paso por si sufren lo mismo que yo. El problema ocurre cuando printf recibe una dirección ROM para imprimir un string. Se pone loco el compilador y calcula mal lo que tiene que enviar y manda basura. En mi caso sólo enviaba el primer char del string.

Citar
Hi Santiago,

Thanks for writing to us and sending projects to replicate the problem. I am able to replicate the error in printf output with code which you have sent. Looks the problem is in printf in calculating the number of letters in string passed through %s format specifier. I have submitted a detailed report about the problem in our process tracking tool and developers will look into it. Thanks for bringing this into our notice.

As a workaround for copy the string from program memory into temporary array before sending it to printf. So change the code as:
void SIM_Send_AT_Command(const char* command)
{
   /* Wait some time if there is a response still arriving */
   volatile char array_temp[20],temp=0;
   Cust_Delay(SIM_SEND_DELAY);

   /* Clear the RX buffer */
   SIM_Clear_RX_Buffer();
   while(*command)
       array_temp[temp++]=*(command++);
   array_temp[temp]=0;
   /* Send the command */
   printf("%s\r\n", array_temp);
   Response_Pending = true;
}

Regards,
-----
Compiler Analysis and Assistance Team

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: XC8 - Looping around allocGlobals()
« Respuesta #4 en: 21 de Mayo de 2014, 11:42:26 »
Se estan copiando de CCS !! :D :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: XC8 - Looping around allocGlobals()
« Respuesta #5 en: 21 de Mayo de 2014, 14:33:17 »
Jaja, lo malo se pega

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: XC8 - Looping around allocGlobals()
« Respuesta #6 en: 21 de Mayo de 2014, 20:39:13 »
Jeje

Sí, lo bueno es que acá ya los puse a trabajar  :mrgreen:

Lo malo es que me hicieron sufrir un rato, igual a Akenafab que me encargó este trabajo jejej

Desconectado Tisco

  • PIC16
  • ***
  • Mensajes: 108
Re: XC8 - Looping around allocGlobals()
« Respuesta #7 en: 22 de Mayo de 2014, 13:17:40 »
Una pregunta por curiosidad:

Si en vez de copiar el array a una variable temporal en RAM pruebas a hacer un casting, qué sucede?

Código: C
  1. printf("%s\r\n", (char*) command);

o

Código: C
  1. printf("%s\r\n", (volatile char*) command);

No sé cuál será el resultado, pero yo suelo hacer esos casting en los printf para evitar los típicos warning del compilador.

Un saludo!

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: XC8 - Looping around allocGlobals()
« Respuesta #8 en: 22 de Mayo de 2014, 18:16:57 »
Hola Tisco, no lo sé... no tengo el hardware a la mano. Se lo preguntaré a Akenafab. Gracias.