Redireccionamiento del printf
3 participantes
Página 1 de 1.
Redireccionamiento del printf
Hola
cuando trabajaba con el C30 de microchip, el printf enviaba caracteres automaticamente por la UART. Ahora trabajo con otro compilador tambien basado en GCC, y mi compilador no envia los caracteres por ningun lado.
¿Como puedo hacer que el printf envie los datos automaticamente por la UART?
Otra cosa, ¿El PIC-GCC permite tambien programar los PIC16 en C++?
Saludos
cuando trabajaba con el C30 de microchip, el printf enviaba caracteres automaticamente por la UART. Ahora trabajo con otro compilador tambien basado en GCC, y mi compilador no envia los caracteres por ningun lado.
¿Como puedo hacer que el printf envie los datos automaticamente por la UART?
Otra cosa, ¿El PIC-GCC permite tambien programar los PIC16 en C++?
Saludos
jgpeiro- Nuevo Usuario
- Mensajes : 3
Fecha de inscripción : 30/06/2010
Re: Redireccionamiento del printf
El PIC-GCC esta desarollado para el PIC16F877 y 87x y algunos PIC16F88 ... estos PICs tienen solo un UART, no hay que definir el UART que se debe usar.
En la documentación (Tutorial) Capítulo 2. Biblioteca de Dispositivos
2.3.5. uart_puts
Escribe un cadena de datos en el puerto Serie Asíncrono
void uart_puts(char *datos);
un ejemplo
ej_uart.c
#include <pic/p16f877a.h>
#define FOSC_HZ 20000000
#include <uart.h>
#include <delayms.h>
int main (void)
{
char c=0;
char INTRO[6]="HOLA\n";
char FIN[6]="FIN\n";
delayms(100);
uart_open(SET_9600_8N1);
uart_set_baudrate(19200);
uart_puts(INTRO);
while(c!=13)
{
if(uart_kbhit()==1)
{
c=uart_getc();
uart_putc(c);
}
}
uart_puts(FIN);
uart_close();
return 0;
}
no hay el printf sino uart_puts y se debe abrir el puerto uart_open y tambien la velocidad en baudios uart_set_baudrate, antes de usar et uart_puts .
Los PIC16F no tienen pila para el usuario entonces no se puede usar C++, los parametros usan la memoria RAM y no hay demasciado RAM.
Puedes preguntar a Pedro José Ramírez Gutiérrez. quien ha desarollado el PIC-GCC.
Saludos
Per
En la documentación (Tutorial) Capítulo 2. Biblioteca de Dispositivos
2.3.5. uart_puts
Escribe un cadena de datos en el puerto Serie Asíncrono
void uart_puts(char *datos);
un ejemplo
ej_uart.c
#include <pic/p16f877a.h>
#define FOSC_HZ 20000000
#include <uart.h>
#include <delayms.h>
int main (void)
{
char c=0;
char INTRO[6]="HOLA\n";
char FIN[6]="FIN\n";
delayms(100);
uart_open(SET_9600_8N1);
uart_set_baudrate(19200);
uart_puts(INTRO);
while(c!=13)
{
if(uart_kbhit()==1)
{
c=uart_getc();
uart_putc(c);
}
}
uart_puts(FIN);
uart_close();
return 0;
}
no hay el printf sino uart_puts y se debe abrir el puerto uart_open y tambien la velocidad en baudios uart_set_baudrate, antes de usar et uart_puts .
Los PIC16F no tienen pila para el usuario entonces no se puede usar C++, los parametros usan la memoria RAM y no hay demasciado RAM.
Puedes preguntar a Pedro José Ramírez Gutiérrez. quien ha desarollado el PIC-GCC.
Saludos
Per
Re: Redireccionamiento del printf
mi interes en utilizar el printf es que quiero compilar un programa que ya esta escrito con esa funcion. Creo que las librerias de C deberian permitir "redireccionar" el printf indicandole de alguna manera la funcion a utilizar para enviar caracteres sueltos.
Con el MPLAB, por defecto el printf envia los datos a una funtion como "UARTputc", pero que pasa si quiero que esos datos salgan por el puerto SPI?
Actualmente estoy trabajando con un ARM cortex-M3y el compilador Codesourcery G++ basado tambien en GCC. Mi intencion es cer como se puede hacer con PIC-GCC para probarlo con Codesourcery. Es mas, no quiero redireccionar solo el printf, tambien el cout ya tambien quiero utilizar librerias en C++.
Con el MPLAB, por defecto el printf envia los datos a una funtion como "UARTputc", pero que pasa si quiero que esos datos salgan por el puerto SPI?
Actualmente estoy trabajando con un ARM cortex-M3y el compilador Codesourcery G++ basado tambien en GCC. Mi intencion es cer como se puede hacer con PIC-GCC para probarlo con Codesourcery. Es mas, no quiero redireccionar solo el printf, tambien el cout ya tambien quiero utilizar librerias en C++.
jgpeiro- Nuevo Usuario
- Mensajes : 3
Fecha de inscripción : 30/06/2010
Sobre el printf
Hola jgpeiro voy a intentar hacer la redireccion de esta manera, que tambien lo vi en avr-gcc
fprintf(stdout,"texto");
o su equivalente
printf("texto");
supongo que tendre que ahcer una estructura "stdout" diferente para cada pic, o ligeramente diferente
porque "stdout" por defecto apuntara a su puerto serie estandar, ahora, tambien se podra hacer esto
FILE *fd=fopen("UART0","wr");
fprintf(fd,"texto");
asi estaria bien????
o creo que se deberia usar open
fd=open("UART",O_RDWR);
creo que el primero queda mejor no?
En verdad hacer eso no es el problema, el problema es inplementar la funcion
vfprintf
va_arg
y esas funciones que son el nucleo de las demas
me refeiro a que reconozca el int el float el char sin que pese mucho.
Creo que al inicio era muy exigente, ahora intentare hacerla, que importa pese un poco y en futuras versiones lo ire mejorando.
fprintf(stdout,"texto");
o su equivalente
printf("texto");
supongo que tendre que ahcer una estructura "stdout" diferente para cada pic, o ligeramente diferente
porque "stdout" por defecto apuntara a su puerto serie estandar, ahora, tambien se podra hacer esto
FILE *fd=fopen("UART0","wr");
fprintf(fd,"texto");
asi estaria bien????
o creo que se deberia usar open
fd=open("UART",O_RDWR);
creo que el primero queda mejor no?
En verdad hacer eso no es el problema, el problema es inplementar la funcion
vfprintf
va_arg
y esas funciones que son el nucleo de las demas
me refeiro a que reconozca el int el float el char sin que pese mucho.
Creo que al inicio era muy exigente, ahora intentare hacerla, que importa pese un poco y en futuras versiones lo ire mejorando.
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|