Si le but c'est réellement d'optimiser pourquoi utiliser des char pour stocker un flottant (alors que float est là pour ça) ?
Oui en effet, je vais me concentrer la dessus, pour remplacer les char par des float. (Ma fonction retourne de char).
Toujours dans le but d'optimiser mon code, j'ai eu une reflexion hier soir et je me demande si je devrai pas corriger deux trois trucs.
Je vais donner une exemple de code
#include <MemoryFree.h>
#include "SIM900.h"
#include <SoftwareSerial.h>
#include <Wire.h>
#include "gps.h" // RAM : 1170 -> 1039
#include "inetGSM.h" // RAM : 891, then 881 when adding serialhwread()
#include <EEPROM.h>
char lon[50];
char lat[50];
char gsm[100];
char dir[50];
char numero[50];
void setup(){}
void loop(){
// Ici il y a un timer pour que GetGPS() soit appeler tous les 2mn (je ne l'écris pas, pour faire plus simple)
GetGPS();
// Il n'y a pas de timer
GetGSM();
// Ici il y a un timer pour que GetSMS() soit appeler tous les 5mn (je ne l'écris pas, pour faire plus simple)
GetSMSToCinqMn();
}
void GetGPS(){
// Fait quelque chose avec les variables lon et lat
}
void GetGSM(){
// Fait quelque chose avec la variable gsm
GetDIR();
}
void GetDIR(){
// Fait quelque chose avec la variable dir
}
void GetSMSToCinqMn(){
// Fait quelque chose avec la variable numero
}
Dans mon banal exemple, on est d'accord que mon microprocesseur va utiliser 300o de RAM, tout le temps, jusqu'a ce que j'éteigne mon microprocesseur.
Simplement pendant 4mn, il y a 50o qui auccupe la ram pour rien, mais a l a5eme minute la fonction GetSMSToCinqMn() va utiliser 50o.
Je me disais que si je placais les 4 char dans leurs fonction, ca permettrait d'utiliser la mémoire que lorsque le Micropro en a besoin, puis que lorsque l'on quitte une fonction , la mémoire utilisée par un char , est libirée .
Suis-je bien juste?
Donc je me demandais si c'était une bonne idée de modifier ainsi, sachant que les fonctions ne vont jamais etre appelée en meme temps, mais l'une après l'autre, séquencée par un timer.
#include <MemoryFree.h>
#include "SIM900.h"
#include <SoftwareSerial.h>
#include <Wire.h>
#include "gps.h" // RAM : 1170 -> 1039
#include "inetGSM.h" // RAM : 891, then 881 when adding serialhwread()
#include <EEPROM.h>
void setup(){}
void loop(){
GetGPS();
GetGSM();
// Ici il y a un timer pour que GetSMS() soit appeler tous les 5mn (je ne l'écris pas, pour faire plus simple)
GetSMSToCinqMn();
}
void GetGPS(){
char lon[50];
char lat[50];
inet.getGps(lon,lat); // fonction d'une librairie, racourcie qui va exécuter la command AT pour avoir les positions gps
// Fait quelque chose avec la variable lon, lat
Serial.println(lon);
Serial.println(lat);
}
void GetGSM(){
// Fait quelque chose avec la variable gsm
char gsm[100] ="100_caracteres_pour_l_exemple......."
GetDIR(gsm);
}
float GetDIR(int pos){
char dir[50];
float numero;
// Question le dir pour afficher ce qui le nuemro la la position pos
return numero;
}
void GetSMSToCinqMn(int pos, String text){
// Fait quelque chose avec la variable pos en envoi un sms en utilisant le numero a la position pos du directory
float numero;
strcpy(numero,GetDir(pos);); //OK il y a pas 50 caractere, mai faisons comme..
//fonction tiré de ma librairie
inet.sendSMS(numero,text);
}
Dans cette exemple, on est d'accord que la mémoire de mon microcontroller sera utilisée que lorsque les fonctions sont appelées.
Donc quand la fonction GetSMS sera appelé, les 100o utlisé par GetGPS seront libérés?
Voilà, on est d'accord que ce code ne marchera pas comme ca, mais c'est plus pour faire part d'une autre maniere de placer mes variable qui consome de la mémoire.
Voyez-vous ce que j'essaye de dire, malgré ces exemples de code non fonctionnels
?