Autor Tema: Problema al imprimir con printf  (Leído 2510 veces)

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

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Problema al imprimir con printf
« en: 02 de Junio de 2014, 19:26:48 »
Hola a todos.
Estoy dando los primeros pasos con un micro PIC24FV32KA304, con el compilador C30 de Microchip.

No es la primera vez que utilizo un micro de 16bits, pero este me está dando más problemas de lo que esperaba.

Si compilo y grabo este programa, todo va bien:
Código: [Seleccionar]
void main(void) {
   init_cpu();

   const char buf[] = "Hola Mundo\n";
   printf(buf);

   while(1);
}

Por la UART1 sale una sola vez el mensaje "Hola Mundo", sin problemas.



Pero, cuando compilo y grabo esta modificación:
Código: [Seleccionar]
void main(void) {
   init_cpu();

   const char buf[] = "Hola Mundo\n";
   printf(buf);

   printf("Hola Mundo 2");

   while(1);
}

Aparece el primer mensaje "Hola Mundo" una y otra vez, como si el micro se reseteara cada vez que
llega a ejecutar la instrucción printf("Hola Mundo 2");
No sé porqué funciona el primer printf y no funciona el segundo.

¿Alguien ha tenido el mismo problema?

Saludos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Problema al imprimir con printf
« Respuesta #1 en: 02 de Junio de 2014, 19:48:08 »
Bueno, parece que este foro tiene cierta "Magia"

Llevo varias horas peleándome con el mismo problema sin saber por donde puede estar la solución.

Nada más postearlo en el foro se me ocurre probar la rutina de inicialización y ¡¡DESCUBRÍ EL PROBLEMA!!  :-/


La instrucción que me da problemas es:
Código: [Seleccionar]
   // CORCON: CPU CONTROL REGISTER
   CORCON = 0x0000;

Si la quito, se imprime todo OK sin que el micro se resetee.

El problema parece estar en este bit, que he puesto a cero y debería estar a uno:
   // PSV:  Program Space Visibility in Data Space Enable bit
   //    1 = Program space is visible in data space
   //    0 = Program space is not visible in data space

Saludos.


Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Problema al imprimir con printf
« Respuesta #3 en: 03 de Junio de 2014, 05:45:36 »
Al parecer el valor por defecto de CORCONbits.PSV es igual a 1
Esto es diferente a lo habitual. Lo normal es que los valores se reseteen a cero. En este caso se resetea a uno.

Ese bit controla que se pueda acceder a la memoria de programa para leer datos.
Como la cadena de texto se guarda en la memoria de programa en el caso de printf("Hola mundo);
si no se tiene acceso a los datos guardados en la memoria de programa, salta una interrupción de error que resetea al micro al no tener rutina de tratamiento.

Estos micros de 16 bits tienen mucha más miga que los de 8.


Datasheet PIC24F32KA304: http://ww1.microchip.com/downloads/en/DeviceDoc/39995d.pdf


Un saludo.


 

anything