Una introducción al uso de
printf fprintf y sprintfHay tres funciones parecidas en cuyo nombre aparece el
printf, y que son la
printf propiamente dicha,
fprintf y
sprintf.
La mas usual es
printf("Hola mundo"); que escribe un string en el puerto serie del PIC. A esta misma funcion se le pueden "empotrar" el contenido de una o varias variables dentro del string a enviar. Para ello disponemos de la posibilidad de colocarle dentro unos carácteres especiales que van a indicar que allí deseamos mostrar el contenido de cierta variable.
Por ejemplo si deseamos mostrar este mismo texto de "Hola mundo" pero desde una variable y no desde dentro del
printf podemos hacerlo así:
char mistring[]="Hola mundo";
printf("Mi frase favorita es %s",mistring); Esto dará como resultado que se envíe por el puerto serie la cadena "
Mi frase favorita es Hola mundo".
Para cada
tipo de variable, entera, flotante, con o sin signo, etc. tenemos su propia forma de indicarle la representación en
printf anteponiéndole el consabido %:
•
C Character
•
S String or character
•
U Unsigned int
•
x Hex int (lower case output)
•
X Hex int (upper case output)
•
D Signed int
•
e Float in exp format
•
f Float
•
Lx Hex long int (lower case)
•
LX Hex long int (upper case)
•
Iu unsigned decimal long
•
Id signed decimal long
•
% Just a %
printf asume que la salida del string es la
STDOUT o sea el
puerto serie.
Pero
fprintf es igual salvo que podemos indicarle cuál va a ser la salida donde deseamos que nos vuelque el resultado. Al declarar #use_rs232 podemos indicarle un "
canal" o nombre de esa salida serie,
fprintf puede decirle qué canal en concreto es el que vamos a utilizar.
#use rs232(baud=9600, xmit=PIN_B1,rcv=PIN_B2, stream=CANAL1)
#use rs232(baud=9600, xmit=PIN_A2,rcv=PIN_A3, stream=CANAL2)
#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7, stream=CANAL3)
fprintf(CANAL2,"Hola mundo"); enviaría nuestro texto al canal
CANAL2 definido en la segunda de nuestras declaraciones.
Y por último:
Vemos que con el uso de los "
%" podemos "representar las mismas variables de distinta forma.
char mivar='K'; es una variable de tipo char de un solo byte cuyo contenido lo hemos inicializado con el caracter ASCII K, si ahora jugamos con él dentro de
printf podemos obtener resultados muy curiosos:
printf("%c %U %H %h",mivar,mivar,mivar,mivar); enviará al puerto serie el string "
K 75 4B 4b"
Como podeís ver
printf muestra distintas representaciones de un mismo contenido "
formateado".
Esto nos lleva a la última de las funciones que es
sprintf.
sprintf es identica a
printf salvo que el resultado en vez de lanzarlo por el puerto serie lo guarda en una variable de tipo string que le indiquemos.
char miascii = 'K';
char mistring[3];
mistring = sprintf("%H",miascii);¿Cuanto vale mistring? Pues "
4B\0" (Un asccii '4', un ascii 'B' y un ascii 0) o sea que hemos hecho una conversión de ASCII a integer y de éste a un string hexadecimal de un solo salto.
(Como siempre. Me ha salido otra novela
)