Autor Tema: XC8 undefined symbol  (Leído 3228 veces)

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

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
XC8 undefined symbol
« en: 21 de Abril de 2013, 17:06:29 »
Estoy intentando compilar mi primer programa con el nuevo compilador XC8 de Microchip y me da problemas la primera linea.

El programa es el siguiente:

Código: [Seleccionar]
#include <p18f2550.h>
#include <stdio.h>

main() {
   while(1) {
      printf("Hello world\n");
   };
}

El compilador da el siguiente mensaje de error:

Código: [Seleccionar]
Advisory[1233] Employing 18F2550 errata work-arounds:
Advisory[1234]  * Corrupted fast interrupt shadow registers
Warning [1273] ; . Omniscient Code Generation not available in Free mode
Error   [499] ; 0. undefined symbol:
_putch(Hello.obj)
(908) exit status = 1

Estoy utilizando la versión Free del XC8.

¿Alguien que conozca el PICC o el XC8 puede echarme una mano?

Saludos.

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: XC8 undefined symbol
« Respuesta #1 en: 21 de Abril de 2013, 17:12:27 »
Ese "hello world " lo quieres mandar por consola?? O lo quieren enviar a algun puerto de comunicaciones??.

Si quieres usar printf y enviar serialmente  debes poner una subrutina que involucre "putc"

Esto viene especificado en el manual del xc8

Saludos!!

Desconectado omix

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 244
Re: XC8 undefined symbol
« Respuesta #2 en: 21 de Abril de 2013, 17:15:50 »
Hola Picuino,
el error que te da es porque no esta implementada la función putch, que es necesaria para poder utilizar el printf.
Por ejemplo si quieres que el printf envie los datos a una usart tendrias que hacer algo como esto:
Código: C
  1. void putch(unsigned char data) {
  2.         USART_TxByte (USART_DEBUG, data);
  3. }

Espero que te sirva de ayuda.

Un saludo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: XC8 undefined symbol
« Respuesta #3 en: 22 de Abril de 2013, 13:58:40 »
Muchas gracias ya compila:

Código: [Seleccionar]
#include <p18f2550.h>
#include <stdio.h>

void putch(unsigned char c) {
   while (PIR1bits.TXIF == 0);
   TXREG = c;
}

main() {
   printf("Hello world\n");
   while(1);
}


Sin embargo el compilador sigue dando un aviso que no entiendo:

Código: [Seleccionar]
Advisory[1233] Employing 18F2550 errata work-arounds:
Advisory[1234]  * Corrupted fast interrupt shadow registers

No he definido ninguna rutina de interrupción ¿Puede ser eso?

Saludos.

Desconectado omix

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 244
Re: XC8 undefined symbol
« Respuesta #4 en: 26 de Abril de 2013, 15:59:46 »
Hola,
ese aviso que te da es porque esta aplicando "parches" en el código para corregir las erratas que microchip ha dicho que tiene dicho micro, pero vamos eso no es ningún error. Si no quieres que aplique dichos "parches", sino recuerdo mal, hay una opción de compilador para indicarle que no lo haga.

Un saludo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: XC8 undefined symbol
« Respuesta #5 en: 28 de Abril de 2013, 14:26:13 »
Gracias