Autor Tema: scanf y printf en C30 USART  (Leído 5521 veces)

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

Desconectado mmX

  • PIC10
  • *
  • Mensajes: 37
scanf y printf en C30 USART
« en: 20 de Abril de 2009, 19:23:43 »
Hola a todos, tal cual como lo dice el titulo de mi post, me gustaría saber como implementar las funcionalidades de SCANF y PRINTF de caracteres y cadenas de caracteres en el compilador C30. 

Ejemplo :

printf("Un mensaje largo sin variable");

printf("Un mensaje largo con una cadena: %s", Cadena);

estoy intentando por aqui, espero alguien por alla pueda ayudarme....
Gracias

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: scanf y printf en C30 USART
« Respuesta #1 en: 21 de Abril de 2009, 01:27:52 »
¿Qué problema tienes?, yo he usado el printf y me ha funcionado bien.

Desconectado mmX

  • PIC10
  • *
  • Mensajes: 37
Re: scanf y printf en C30 USART
« Respuesta #2 en: 21 de Abril de 2009, 11:46:27 »
\mplab c30\bin\bin\pic30-coff-ld.exe Error: A heap is required, but has not been specified
link step failed...

El codigo es el siguiente, funciona el putUSART1(char C), asi que asumo que la configuracion es correcta.

Código: C++
  1. #include <P33FJ32MC204.h>
  2. #define __33FJ32MC20_H
  3. #include <libpic30.h>
  4. #include <stdio.h>
  5.  
  6. _FOSCSEL(1);                                            //Oscilador FRC interno con PLL
  7. _FOSC (195);                                            //Osc primario desabilitado, Cambio reloj desabilitado
  8.  
  9. #define FCY                     40000000    //Instruction Cycle Frequency
  10. #define BAUDRATE          9600            //Baudios        
  11. #define BRGVAL              ((FCY/BAUDRATE)/16)-1
  12.  
  13. /***************************FuncionTx******************************/
  14. void putUART1( char c){
  15.         while ( U1STAbits.UTXBF);               // wait while Tx buffer full
  16.         U1TXREG = c;
  17. }
  18.  
  19. /**********************Interrupcion_Rx*****************************/
  20. void __attribute__ ((interrupt, no_auto_psv)) _U1RXInterrupt(void){
  21.         TRISA = 0x0000;
  22.         PORTA = 0xfff;
  23.         putUART1('K');
  24. }      
  25.  
  26. /***************Inicializar_UART********************************/
  27.  
  28. void InitUART1(){
  29.         TRISBbits.TRISB5=1;
  30. TRISBbits.TRISB0=0;
  31. RPOR0=3;                                               
  32. RPINR18bits.U1RXR0 = 0x05;
  33.  
  34.                        
  35.     U1MODEbits.STSEL = 0;                       // 1-stop bit
  36.     U1MODEbits.PDSEL = 0;                       // No Parity, 8-data bits
  37.     U1MODEbits.ABAUD = 0;                       // Auto-Baud Disabled
  38.     U1MODEbits.BRGH = 0;                        // Low Speed mode
  39.     U1BRG = BRGVAL;                             // BAUD Rate Setting
  40.     U1STAbits.UTXISEL0 = 0;             // Interrupt after one Tx character is transmitted
  41.     U1STAbits.UTXISEL1 = 0;
  42.     IEC0bits.U1TXIE = 0;                        // Disenable UART Tx interrupt
  43.     IFS0bits.U1RXIF    = 0;                     //-Clear the Recieve Interrupt Flag
  44.         IEC0bits.U1RXIE    = 1;                 //-Enable Recieve Interrupts
  45.         U1MODEbits.UARTEN = 1;                  // Enable UART
  46.     U1STAbits.UTXEN = 1;                        // Enable UART Tx  
  47.         U1STAbits.URXISEL1 = 0;             //-Enable UART Rx                                  
  48.         IPC2bits.U1RXIP=7;                              //Interrupt Rx Mayor prioridad
  49. }
  50.  
  51.  
  52. int main (void){
  53.  
  54.    CLKDIVbits.PLLPRE=4;                         //Divisor PLL_1 por 6
  55.    CLKDIVbits.PLLPOST=0;                        //Divisor PLL_2 por 2
  56.    PLLFBD=128;                                          //Multiplicador PLL por 130
  57.    OSCTUN=0;                                            //Frecuencia del FRC 7.37 MHz
  58.  
  59.         TRISA = 0x0000;
  60.         PORTA = 0;
  61.  
  62. InitUART1();
  63.  
  64.  while(1){
  65.  
  66. printf("hola");
  67.  
  68. }
  69. }

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: scanf y printf en C30 USART
« Respuesta #3 en: 21 de Abril de 2009, 11:58:39 »
Tienes que ajustar el tamaño del "heap" en las opciones del compilador: Build Options -> MPLAB LINK30

Con ponerle 256 o 512 será suficiente según tu aplicación.

Desconectado mmX

  • PIC10
  • *
  • Mensajes: 37
Re: scanf y printf en C30 USART
« Respuesta #4 en: 21 de Abril de 2009, 13:18:37 »
Gracias!! Que son estos heaps  y que efecto tienen sobre la compilacion?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: scanf y printf en C30 USART
« Respuesta #5 en: 21 de Abril de 2009, 13:24:48 »
NPI (ni puñetera idea)

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: scanf y printf en C30 USART
« Respuesta #6 en: 21 de Abril de 2009, 14:04:49 »
Normlamente un heap es un espacio de memoria que reserva para uso del sistema, digamos que viene siendo algo así como un espacio de memoria compartida, la cual se utiliza para una cosa u otra en dependencia de las necesidades del programa

Saludos
Reinier

Desconectado blackcat

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 600
Re: scanf y printf en C30 USART
« Respuesta #7 en: 21 de Abril de 2009, 15:51:01 »
Yo creo que es un area de memoria reservada que contiene toda la información del área de la memoria dinámica.
Control Automático, DSP & Microcontroladores

Desconectado mmX

  • PIC10
  • *
  • Mensajes: 37
Re: scanf y printf en C30 USART
« Respuesta #8 en: 21 de Abril de 2009, 17:08:47 »
 y que me puedes decir del Scanf();?aun no logro hacerlo funcionar, el programa me compila pero simplemente ignora esa instruccion y muesttra infinitamente la cadena inicial....

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: scanf y printf en C30 USART
« Respuesta #9 en: 21 de Abril de 2009, 21:44:33 »
hola amigo

verifica de no dejar espacios como el de la linea 14,el programa que has colgado te funciona?

si te funciono printf("hola");
tambien te debe de funcionar el scanf("%x",&a);
x depende del tipo de dato.


un saludo

Desconectado mmX

  • PIC10
  • *
  • Mensajes: 37
Re: scanf y printf en C30 USART
« Respuesta #10 en: 22 de Abril de 2009, 00:37:07 »
el programa en si, funciona,

Código: [Seleccionar]
printf("introduzca un numero:");
scanf(%d,&i);

debería solicitar número y esperar que lo ingrese, pero muestra "introduzca un numero:introduzca un numero: .................. " repetidamente.... como si el scanf no estuviese ahi..

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: scanf y printf en C30 USART
« Respuesta #11 en: 23 de Abril de 2009, 19:27:01 »
Hola amigo

Ponle las comillas " " al scanf

scanf("%d",&i);

el scan es una senteccia un poco especial, dependiendo del compilador o del entorno, te puede dar muchos quebraderos de cabeza, nada de espacios,entre "", --> "%d".

Tambien hay otras formas de capturar numeros o caracteres de teclado.

un saludo