Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Memoire ( RAM,ROM) sur les PIC et MikroC
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Par exemple je me pose cette question , pourquoi ne pas remplir directement TEXTE[] comme ca !
CODE : TOUT SÉLECTIONNER
TEXTE[0]= 0;
strConstRamCpy( TEXTE, " Valeurs recues:\r\n ..h..m..s\r\nVoulez-vous le lancer ?");
C'est juste aussi !
TEXTE est bien l'adresse de la table
mais pour des raisons , disons issues de l'usage du C ( TurbOC ,Borland C5 , VisualC 6..)
je prefere designer un pointeur sur une table, et manipuler un pointeur generique.
Le pointeur pouvant etre assigné à n'importe quelle autre table si necessaire .
et txt , c'est plus court que TEXTE ..
nota : je n'ai pas employé , encore plus court et generiqu e, la variable pointeur
*p qui pose probleme avec mikroC si on a pas activé l'option Case Sensitive du compilateur.
Memoire ( RAM,ROM) sur les PIC et MikroC
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
Merci Paul, je vais faire comme tu le préconise , car je voudrais réussir à bien faire les choses et si c'est pour avoir des bugs dans quelques jours c'est pas la peine !
Je ne peux pas tester pour le moment ( besoin du tel de ma femme), mais je me pose une question pour avancer !
j'ai besoin de faire un test conditionnel et donc d'afficher ou non du texte !
Ta fonction de copie de RAM en ROM rajoute en terminateur, est-il possible d’écrire sur ce terminateur pour le rajouter après ? en quelques sortes faire un strcat ?
Voila ou j'en suis : NON testé
On voit que si le chrono est lancé il faut indiqué le temps restant en plus. donc je refais une copie en écrasant le terminateur pour le remettre avec la nouvelle copie !
Merci Paul, je vais faire comme tu le préconise , car je voudrais réussir à bien faire les choses et si c'est pour avoir des bugs dans quelques jours c'est pas la peine !
Je ne peux pas tester pour le moment ( besoin du tel de ma femme), mais je me pose une question pour avancer !
j'ai besoin de faire un test conditionnel et donc d'afficher ou non du texte !
Ta fonction de copie de RAM en ROM rajoute en terminateur, est-il possible d’écrire sur ce terminateur pour le rajouter après ? en quelques sortes faire un strcat ?
Voila ou j'en suis : NON testé
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;
char T_message[300]={0};
char temp[30]={0};
F_envoi_ok = 0;
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:{
strConstRamCpy(T_message , "Valeurs recues:\r\n..h ..m ..s\r\nVoulez-vous le lancer ?");
T_message[17] = T_CHRONO[0];
T_message[18] = T_CHRONO[1];
T_message[21] = T_CHRONO[2];
T_message[22] = T_CHRONO[3];
T_message[25] = T_CHRONO[4];
T_message[26] = T_CHRONO[5];
break;
}
case 2:{
strConstRamCpy(T_message, "Le Chrono est déja lancé.\r\nUtilisez le mot \"STOP\" si vous souhaitez l'arreter");
break;
}
case 3:{
strConstRamCpy(T_message, "Erreur, les valeurs ne sont pas correctes\r\nHeures<100\r\nMinutes<60\r\nsecondes<60");
break;
}
case 4:{
strConstRamCpy(T_message, "Le chrono est lancé !\r\n");
break;
}
case 5:{
strConstRamCpy(T_message, "Abandon de l'initialisation");
break;
}
case 6:{
strConstRamCpy(T_message, "Erreur, ce mot ne convient pas ici !");
break;
}
case 7:{
strConstRamCpy(T_message, "Arret du chrono");
break;
}
case 8:{
strConstRamCpy(T_message, "Etat du module:\r\nRéseau : ..%\r\nNiveaux Batterie : ..%\r\nChrono lancé : ");
T_message[26] = T_Signal[1];
T_message[27] = T_Signal[2];
T_message[50] = T_Tension[1];
T_message[51] = T_Tension[2];
if (Chrono_lance){
strConstRamCpy(T_message[70], "Oui\r\nTemps restant :\r\n..h ..m ..s\r\n");
ByteToStr ((Chrono/3600), temp);
T_message[92] = temp[1];
T_message[93] = temp[2];
ByteToStr (((Chrono%3600)/60), temp);
T_message[96] = temp[1];
T_message[97] = temp[2];
ByteToStr (((Chrono%3600)%60), temp);
T_message[100] = temp[1];
T_message[101] = temp[2];
}
else
strConstRamCpy(T_message[70], "Non");
break;
}
On voit que si le chrono est lancé il faut indiqué le temps restant en plus. donc je refais une copie en écrasant le terminateur pour le remettre avec la nouvelle copie !
Memoire ( RAM,ROM) sur les PIC et MikroC
Memoire ( RAM,ROM) sur les PIC et MikroC
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Après test ça fonctionne pas ! tout du moins ma méthode ne fonctionne pas.
Comme je ne passe pas par les pointeurs, je pense que ça bug avec ta fonction pour lui donné l’argument de départ !
et avec ça aussi strConstRamCpy(T_message[60], "azerty");
Mon but serait d'utiliser ta fonction mais sans partir du début du tableau T_message, mais d'une position définie
Comme je ne passe pas par les pointeurs, je pense que ça bug avec ta fonction pour lui donné l’argument de départ !
Code : Tout sélectionner
case 8:{
strConstRamCpy(T_message, "Etat du module:\r\nRéseau : ..%\r\nNiveaux Batterie : ..%\r\nChrono lancé : ");
// rajoute le signal
T_message[26] = T_Signal[0];
T_message[27] = T_Signal[1];
// rajoute la tension
T_message[50] = T_Tension[1];
T_message[51] = T_Tension[2];
strConstRamCpy(*(T_message+60), "azerty");
break;
}
et avec ça aussi strConstRamCpy(T_message[60], "azerty");
Mon but serait d'utiliser ta fonction mais sans partir du début du tableau T_message, mais d'une position définie
Memoire ( RAM,ROM) sur les PIC et MikroC
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Code : Tout sélectionner
strConstRamCpy(T_message[60], "azerty");
ESSAIE AVEC strConstRamCpy(T_message+60, "azerty");
ou
strConstRamCpy(&T_message[60], "azerty");
Memoire ( RAM,ROM) sur les PIC et MikroC
Memoire ( RAM,ROM) sur les PIC et MikroC
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bon la je séche encore !
Je souhaite récupérer les nombres d'heures de mon chrono . Je dois donc diviser un long ! Mais mon programme plante à chaque fois
Chrono est déclaré comme unsigned long en global. unsigned long Chrono=0;
Temp est un tableau de caractères en local char temp[100];
C'est bizarre je vois pas ce qui cloche ? un unsigned Long est sur 10 chiffres ? avec le teremianteur ca fait 11 caractères a stocker ! j'ai 100 places !
Si je change le temp[9] par une valeur quelconques ça fonctionne bien !
Je souhaite récupérer les nombres d'heures de mon chrono . Je dois donc diviser un long ! Mais mon programme plante à chaque fois
Chrono est déclaré comme unsigned long en global. unsigned long Chrono=0;
Temp est un tableau de caractères en local char temp[100];
Code : Tout sélectionner
LongWordToStr ( (Chrono/3600), temp);
T_message[92] = temp[9];
T_message[93] = temp[10];
C'est bizarre je vois pas ce qui cloche ? un unsigned Long est sur 10 chiffres ? avec le teremianteur ca fait 11 caractères a stocker ! j'ai 100 places !
Si je change le temp[9] par une valeur quelconques ça fonctionne bien !
Memoire ( RAM,ROM) sur les PIC et MikroC
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Hello,
Bon, erreur réparée !
En fait en utilisant la variable temp j’empêchais la bonne composition du numéro de téléphone , donc pas de réponse !
Par contre j'utilise la formule Pour calculer les heures :
Chronoétant un "unsigned Long" voyez-vous un inconvénient sur cette formule car la valeur retourné par la division sera un unsigned char .
Ca fonctionne comme cela , mais dois je m'attendre à des Bugs ?
Bon, erreur réparée !
En fait en utilisant la variable temp j’empêchais la bonne composition du numéro de téléphone , donc pas de réponse !
Par contre j'utilise la formule Pour calculer les heures :
Code : Tout sélectionner
ByteToStr ( (Chrono/3600), temp);
T_message[92] = temp[1];
T_message[93] = temp[2];
Chronoétant un "unsigned Long" voyez-vous un inconvénient sur cette formule car la valeur retourné par la division sera un unsigned char .
Ca fonctionne comme cela , mais dois je m'attendre à des Bugs ?
Memoire ( RAM,ROM) sur les PIC et MikroC
Memoire ( RAM,ROM) sur les PIC et MikroC
Retourner vers « Généralités sur les PICs »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 52 invités