Printant floats en sistemes encastats

Com ja explicarem més endavant, les llibreries estendard que fem servir en programació de sistemes encastats son més senzilles que les que estem acostumat. Habitualment no ens adonem, però un cas que alguns cops ens pot donar la tabarra és d’haver d’imprimir o manegar valors en punt flotant usant printf o les seves funcions germanes (fprintf, scanf, fscanf, etc.).

Habitualment les llibreries d’encastats porten aquesta funció però no suporta imprimir floats (opció “%f“). Això és per que la correcta conversió d’aquests valors ocupa força codi i està desactivat per defecte (si activem el suport a punt flotant la llibreria afegeix 8 KB de codi i 56 Bytes de memòria RAM).

La forma més senzilla de visualitzar un valor en punt flotant és imprimir la part entera i la part fraccionaria per separat. A l’exemple es fa servir una funció que retorna la part fraccionaria d’un float per poder-la imprimir amb un “%d” de printf.

int fract(float x) {
 if (x>=0) {
  return ((int)(x*10000)) % 10000; 
 } else {
  return ((int)(-x*10000)) % 10000;
 }
}

Aquesta funció retorna 4 xifres decimals en format enter, que acostuma a ser suficient per la majoria d’aplicacions.

Després imprimim els dos valors per separat, la part entera i la fraccionada com a enter amb un printf normal:

printf("Float value bis: %d.%04d\n", (int)value2, fract(value2));

Si de totes formes volem la forma nativa del printf que pot treballar amb floats, hem d’activar-ho a les opcions del nostre projecte com es veu a la figura.

Printf_float

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out /  Canvia )

Google photo

Esteu comentant fent servir el compte Google. Log Out /  Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out /  Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out /  Canvia )

S'està connectant a %s

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.