PDF de programación - Mundo EDUKIT08 - Las Bondades de la Función SPRINTF

Imágen de pdf Mundo EDUKIT08 - Las Bondades de la Función SPRINTF

Mundo EDUKIT08 - Las Bondades de la Función SPRINTFgráfica de visualizaciones

Publicado el 13 de Marzo del 2019
558 visualizaciones desde el 13 de Marzo del 2019
190,4 KB
5 paginas
Creado hace 14a (24/04/2010)
COMENTARIO TECNICO

“Mundo EDUKIT08”

Por:

Ing. Roberto Simone
Ingeniero de aplicaciones
[email protected]

Ing. Daniel Di Lella
D.F.A.E
www.edudevices.com.ar
[email protected]
[email protected]

(MDO_EDUKIT_019)

Las Bondades de la Función “SPRINTF”
A menudo, por no decir siempre, pretendemos que el lenguaje C nos proporcione
la solución a nuestros problemas. No llegaremos tan lejos con este artículo pero sí
brindaremos algunas ideas que nos ayudarán a la hora presentar información de
variada naturaleza en un LCD.

Todo empieza con printf....

Quienes hemos programado en ensamblador, y lo seguimos haciendo, nos topamos con
frecuencia con la tarea de presentar información en un LCD inteligente. Esta
información abarca un espectro muy amplio: textos fijos, valores provenientes de
mediciones, que habitualmente deben pasar por algún cálculo o tabla de conversión.

Solemos en estas ocasiones adoptar soluciones ad-hoc no siempre fáciles de reutilizar en
otras aplicaciones. Con la promesa de mayor portabilidad escribimos código en
lenguaje C, pero tratando de imitar los algoritmos del assembler arrastramos los
mismos vicios de programación.

No debemos perder de vista a la función printf al momento de encarar estos problemas.
Por el momento dirigimos nuestra explicación al estudio de esta función aplicada en
computadora personal, corriendo aplicaciones en modo texto. La explicación es más
fácil así. Tengan paciencia, ya la aplicaremos a los microcontroladores.

El primer uso que se nos ocurre de la función printf es para mostrar texto fijos:

printf(“Hola mundo”);

Resulta evidente que su ejecución provoca la aparición de la leyenda Hola mundo en
pantalla. La función printf es una función de la biblioteca stdio.h, por lo que se
requiere la directiva:

#include<stdio.h>

Valores númericos en el printf

La riqueza de la función printf es su capacidad de presentar datos numéricos con poco
esfuerzo de parte del programador. Por ejemplo, mostrar el contenido de una variable
tipo int en pantalla se hace así:

int

var;

var = 25;
printf(“%d”, var);

El conjunto de los símbolos % y d hacen saber a la función que se presentará un dato
tipo int. Este dato debe obtenerse de algún lado, precisamente de la variable var que
indicamos como segundo parámetro de printf. Para el breve ejemplo propuesto lo que
se espera que aparezca en pantalla será:

25

Algo notable del procedimiento anterior es que la ejecución de printf implicó una
conversión de decimal (o binario, es lo mismo) a BCD. Más notable aún es la
conversión de un número de punto flotante a BCD:

float x;

x = 13.4
printf(“%f”, x);

La diferencia con el primer ejemplo radica en el primer parámetro, %f, que avisa a
printf que tipo de dato a presentar es un valor de punto flotante. Demás está decir que
ese número se obtiene del segundo parámetro, la variable x.
Esta función es tan versátil que nos permite mostrar varios valores en pantalla:

a;
int
float b;

a=3;
b=4.2;

printf(“%d %f”,a, b);

El resultado obtenido será:

3 4.2

En este mostramos un dato int y otro float, separados por un espacio, pues así se lo
indicamos. El %d, puesto en primer lugar, se muestra en primer lugar, y este dato lo
obtenemos del primer valor numérico dado como parámetro, o sea a. Lo propio se
aplica al dato de punto flotante.

Nada impide combinar texto y números:

int

res;

res=14;
printf(“resultado = %d”, res);

Aquí obtendríamos:

resultado = 14

Cadenas de caracteres

Los vectores del tipo char son empleados para almacenar textos. Estos textos,
terminados en NULL, son muy fáciles de presentar en pantalla con printf:

char

tex[20] = “Alo”;

printf(“%s”, tex);

de cuya ejecución resultará:

Alo

Para mostrarla aplicamos la función printf pero como tipo de datos no utilizamos ni
%d ni %f sino %s, que como adivinarán la s corresponde a string. La variable de
donde obtener la información es el vector de char, llamado tex en el ejemplo. La única
condición que se nos exige que la cadena esté terminada en NULL.

La función sprintf como nexo con los microcontroladores

Existen muchas variantes de la función printf que no viene al caso explicar. Es la
función sprintf la que vale la pena explorar. Consideremos a la función printf como
una rutina que genera un texto a partir de variables numéricas y de cadenas de
caracteres, y ese texto lo presenta en pantalla.

Por otro lado, sprintf, genera ese mismo texto, pero en lugar de mostrarlo en
pantalla, lo almacena en una cadena de caracteres. O sea lo guarda en un vector de
char, en un buffer en memoria. Su uso podría ser:

char
int

textos[20];
var;

var = 1;
sprintf(textos, “result = %d, var”);

La ejecución del código anterior generaría el texto:

result = 1

pero no sería mostrado en pantalla sino que se almacenaría en el vector textos.

Una aplicación directa de sprintf es la carga de un texto en un vector. De hecho en
lenguaje C habremos estado tentados de escribir la sentencia:

char alfa[20];

alfa = “hola a todos”;

Código claramente incorrecto. Pero con sprintf podemos implementarlo con sencillez:

char alfa[20];

sprintf(alfa, “hola a todos”);

Integrando todo en un microcontrolador

La pregunta del millón: ¿Cómo se relaciona todo esto con un microcontrolador? Muy
sencillo. Si nuestra intención es mostrar información en un formato complejo, como lo
haríamos con printf:

float var;
var = 3.8;

printf(“Resultado = %f”, var * 2);

Lo haremos en su lugar con sprintf y depositamos el resultado en una cadena de
caracteres:

texto[30];

char
float var;
var = 3.8;

sprintf(texto, “Resultado = %f”, var * 2);

Lo que deseamos mostrar en, por ejemplo un LCD inteligente, nos quedará almacenado
en el vector texto. No es difícil mostrar este texto en un LCD con una función que
recorra el vector y lo muestre en pantalla:

void LCD_printf(char *t)
{

int

i;

i = 0;
while(t[i] != 0)
{

LCD_Dato(t[i]);
i++;

}

}

Siempre que dispongamos de una función LCD_Dato que muestre caracteres en el
LCD.

Conclusión

Hemos explorado la función printf y como aplicarla al mundo de los
microcontroladores. Una explicación exhaustiva de ella sería larga y tediosa, lo que no
implica que no debamos leer la documentación de esta función, pues ella nos provee un
enorme abanico de posibilidades para presentar información.

Lo dicho hasta aquí nos muestra a esta función como la panacea, sin embargo tiene su
costado negativo. Muchas de las operaciones que puede desplegar, como convertir un
número de punto flotante a BCD, aplican algoritmos complejos que vuelven a la
función muy demandante de recursos de ROM (Flash de programa). Como todo debe
usarse con criterio.

Nota de Radacción: El lector puede descargar este capítulo y capítulos anteriores desde
la sección “Artículos Técnicos” (“Mundo EDUKIT08”) en el sitio web de
EduDevices (www.edudevices.com.ar )
  • Links de descarga
http://lwp-l.com/pdf15491

Comentarios de: Mundo EDUKIT08 - Las Bondades de la Función SPRINTF (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad