Merci, grâce a vos conseils j'arrive à afficher ma température.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
void lecture_temperature(void)
{
unsigned char unites;
unsigned char dizaines;
unsigned char dixiemes;
unsigned char centiemes;
if (RTC_TEMP_MSB & (1 << 7)) ascii_rtc_temp[0]='-'; // Si le bit 7 de RTC_TEMP_MSB = 0 alors met le sign '+' dans ascii_rtc_temp sinon met le signe '-'
else ascii_rtc_temp[0]='+';
tmp_temp = (RTC_TEMP_MSB & (0b01111111)); // On veut lire que des bits 0 à 6 (ceux masqué à '1') on ne lit pas le bit 7 car il correspond au signe du resultat
dizaines = tmp_temp/10; // On obtient les dizaines
unites = tmp_temp%10; // On obtient les unités
ascii_rtc_temp[1] = '0' + dizaines; // Creation du caractère des dizaines
ascii_rtc_temp[2] = '0' + unites; // Creation du caractère des unités
ascii_rtc_temp[3]=','; // Affiche le caractère virgule dans la chaine composant le resultat
// Gestion des digits après la virgule
tmp_temp = (RTC_TEMP_LSB & (0b11000000)); // Lecture des bits 6 et 7 de RTC_TEMP_LSB
tmp_temp >>= 6; // Décale les bits 6 et 7 de 6 rangs vers la droite. Ex : 11000000 -> 00000011
tmp_temp *= 25; // Le resultat obtenu doit est multiplié par 25 (voir datasheet : car 2 bits obtenus sont des fractions de 1/4 de degrés)
// 0b00 x 25 = 0 ; 0b01 x 25 = 25 ; 0b10 x 25 = 50 ; 0b11 x 25 = 75
dixiemes = tmp_temp/10; // On obtient les dixiemes
centiemes = tmp_temp%10; // On obtient les centiemes
ascii_rtc_temp[4] = '0' + dixiemes; // Creation du caractère des dixiemes
ascii_rtc_temp[5] = '0' + centiemes; // Creation du caractère des centiemes
ascii_rtc_temp[6]='\0'; // Termine la chaine
} |
Par contre, maintenant que mon code fonctionne, je cherche à réduire le nombre de variables pour gagner de la mémoire, car je suis en C embarqué
J'ai essayé de supprimer une étape dans la génération des caractères ascii qui permettent l'affichage de la température, mais faire ce qui suit ne fonctionne pas :
ascii_rtc_temp[1] = '0' + tmp_temp/10;
Pourquoi faut il absolument passer par une variable intermédiaire :
1 2
| dizaines = tmp_temp/10;
ascii_rtc_temp[1] = '0' + dizaines; |
Pouvez vous m'aider à optimiser svp ?
Merci à vous,
Partager