J'utilise la fonction de Paul pour mettre du texte directement en RAM !
Code : Tout sélectionner
//------------------------------------------------------------------------------
// --- Copie le texte depuis ROM vers RAM
void strConstRamCpy(char *dest, const char *source){
while(*source)
*(dest++) = *(source++) ;
*dest = 0 ; // terminateur
}D’après ce que je comprend de cette fonction, elle récupère le texte envoyé en argument ( qui doit se terminer par un NULL pour arrêter le transfert) , et le copie dans la destination qui est un tableau préalablement déclaré en local char T_message[150]; . une fois le texte source lu ( jusqu'au terminateur), on arrête la recopie et on rajoute un nouveau terminateur à la fin de notre tableau.
Je rencontre des bugs d'affichages du genre texte coupé, caractères à la fin non voulus etc ... il me semble quand je dépasse un certains nombres de caractères, mais je n'en suis pas sûr. j'avoue que el comportement est plutôt aléatoire parfois!
Je vous raccourci ma fonction pour aller directement la ou ça bug .
Par exemple avec ceci , je n'ai aucun probléme , ça fonctionne parfaitement !
Code : Tout sélectionner
//------------------------------------------------------------------------------
// Param. d'entrée : Le numéro correspondant au message à envoyer
void envoi_et_composition_SMS(char numero_message){
// Les INT UART doivent etre desactivée
char Compteur=0, Compteur2=0; // compteur pour time-out et re-envoie
char T_message[150]; // Stockage du SMS à envoyer pendant la composition
char temp[30]; // tableau temporaire pour les calculs
F_envoi_ok = 0; // RAZ de la variable, que indique que l'envoie c'est bien passé
T_message[0] = 0; // On se positionne au début du tableau
temp[0] = 0;
//-------------------- séléction et Création du message -------------------
switch (numero_message){
case 1:{
}
........
........
}
case 8:{
strConstRamCpy(T_message, "Etat du module:\r\nDate : ../../20..\r\nHeure : ..:..:..\r\nRéseau : ..%\r\nBatterie : ..%\r\nChrono lancé : ");
// rajoute le signal
T_message[63] = T_Signal[1];
T_message[64] = T_Signal[2];
// rajoute la tension
T_message[79] = T_Tension[1];
T_message[80] = T_Tension[2];
if (Chrono_lance==0){ // Si le Chrono est en cours
}
break;
}maintenant si je rajoute cette ligne strConstRamCpy(T_message+99, "Oui\r\nChrono :\r\n..h ..m ..s"); quand le chrono est lancé l'affichage est mauvais
Code : Tout sélectionner
if (Chrono_lance==0){ // Si le Chrono est en cours
strConstRamCpy(T_message+99, "Oui\r\nChrono :\r\n..h ..m ..s");
} J'obtiens des erreurs !
et je ne cmprends pas d'ou cela peut provenir ! le texte continue a s'afficher malgrés la fin de chaine !
On voit que le "%" à disparu écrasé par je ne sais quoi, toput comme le texte "Chrono lancé" ???
On voit le texte "Chrono :" qui est affiché , mais pas le "OUI" ? si il y avait un probléme de placement dans le tableau le OUI serait aussi affiché mais au mauvais endroit ! Le comportement n'a rien de logique


