Una valoracion:
He hecho la prueba de una multiplicacion de un entero con un float para obtener un float para pintarlo por la LCD y esto es el resultado con dos compiladores:
1.- Con PIC16F84
============
El Hi-Tech ni se digna a hacer la multiplicacion porque no tiene espacio en memoria.
El Mikro-C me hace la multiplicacion, pero no funciona la funcion FloatToStr por problemas de memoria, pero al menos me hace la multiplicacion, luego si puedo aplicar la funcion IntToStr sobre el float resiltante, con lo que solo cometo un error de decimales, que para mi invento no tiene importancia ya que está midiendo una velocidad y me da igual que me diga que voy a 111,60 Km/h que a 111 Km/h
2.- Con PIC16F818
=============
Lo mismo, el Hi-Tech se niega a hacerme la multiplicación.
El Mikro-C si la hace pero no hace la conversion de FloatToStr pero si la de IntToStr.
Conclusion:
En igualdad de micros y rácanos ambos de memoria, el Mikro-C es mejor que el Hi-Tech, por lo que ya tiene un voto mas para quedarame con él.
Saludos.
Añado la prueba con:
3.- PIC16F877A
==========
Hi-Tech sin problemas ya, funciona "sprintf()" sin problemas.
Mikro-C sin problemas tampoco, funciona "FloatToStr()" sin problemas.
Las versiones utilizadas:
1.- HiTech:
Hi-Tech C compiler for PIC10/12/16 MCUs (Lite Mode) V.9.83
2.- Mikro-C:
MikroC Pro V.5.6.1 (NOT REGISTERED)
(Esto del NOT REGISTERED me imagino que es a lo que te refieres con que si tiene "medicina" o no.
Pues la cosa es muy sencilla. El programa que estoy haciendo tan solo necesita tener programada una interrupción externa que mete pulsos por RB0/INT y que lleva asociada una interrupción que lo que hace es incrementar una variable tipo "int" o "char".
Por otro lado hay programado un TMR0 para que se desvode cada segundo exacto, y una interrupción asociadad que lo que hace es leer la otra variable, multiplicarla por un factor (3.6) y volver a dejar a 0 dicha variable.
Como veis para eso no necesito mas micro que un simple PIC16F84 pero me encontré con este problemón de los float y obviamente no voy a meter un pepino com el 16F877 para salvar ese obstáculo porque me sobra el 99.9% del micro.
Entonces optaré por la opcion del Mikro-C porque al menos me hace esa multiplicación real aunque la funcion IntToStr() me trinque los decimales.
Es que no es lo mismo hacer por ejemplo IntToStr(31*3.6) que 31*3, en el primer caso se me queda la cuenta en 111 y en el segundo caso en 93, lo que conlleva un error muy grande.
Pues eso es todo.
Gracias y un saludo.