Table des matières

mesure de température et d'humidité

on utilise un 2438 (1AN + temp) + capteur H25K5A

TODO export vers BDD Net

ce capteur sera utilisé pour :

calcul

exemple le 22/01/2011 :

algorithme RH = F(RRH,Temperature)

ou comment automatiser la lecture de la table en page2 de la datasheet h25k5a.pdf

charge CPU sur routeur

/* avec double
fred@Xubuntu:~/test_c$ ./humid_interpolation 
start
RH*10 = 661 
Tv0 403 us    -WL500GP->   1200 us
Tv1 8   us   -WL500GP->   100 us
Tv2 9   us   -WL500GP->   18 us
 
avec float
fred@Xubuntu:~/test_c$ ./humid_interpolation @msi
start
RH*10 = 661 
Tv0 400 us  -WL500GP->   1100 us
Tv1 8   us  -WL500GP->   92 us
Tv2 9   us  -WL500GP->   18 us

conclusions :

  1. la conversion atof prend beaucoup de temps,voir § suivant pour avoir les résultat après optimisation
  2. le WL500GP n'est pas très fort en calcul sur les flottants mais tout a fait honorable sur les U32
  3. il a une différence entre l'utilisation d'un float(4 bytes) par rapport a l'utilisation d'un double(8 bytes) mais seulement 10%

réécriture/simplification de atof

REAL_TYPE str_to_dbl_base10_noexp(const char * s)
{  //4*"xx.xx" = 140us@xubuntu , 175us@WL500GP
        int a = 0;
        int e = 1;
        char c;
        int sign = 1;
        REAL_TYPE ret_d;
        while (!isdigit(*s))
        {		/* Skip leading whitespace. */
            if(*s == '-')sign=-1;
    	    ++s;
	}
        while ((c = *s++) != '\0' && isdigit(c))
        {
                a = a*10 + (c - '0');
        }
        if (c == '.') 
        {
                while ((c = *s++) != '\0' && isdigit(c)) {
                        a = a*10 + (c - '0');
                        e = e*10;
                }
        }
        a=a*sign;
        ret_d = (REAL_TYPE)a/e;
        return ret_d;
}