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 ---
On parle des Pics, sans rapport avec le langage ou la programmation

Modérateur : Jérémy

Memoire ( RAM,ROM) sur les PIC et MikroC
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#21 Message par paulfjujo » ven. 3 févr. 2017 21:41


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 .. :sifflotte:



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.
Aide toi, le ciel ou FantasPic t'aidera

Memoire ( RAM,ROM) sur les PIC et MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#22 Message par Jérémy » sam. 4 févr. 2017 10:28

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é

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=0Compteur2=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 !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Memoire ( RAM,ROM) sur les PIC et MikroC
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#23 Message par paulfjujo » sam. 4 févr. 2017 19:16

..La 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 ?


oui, je ne l'ai pas testé, mais je pense que c'est jouable .
Aide toi, le ciel ou FantasPic t'aidera

Memoire ( RAM,ROM) sur les PIC et MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#24 Message par Jérémy » sam. 4 févr. 2017 19:55

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 !

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
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Memoire ( RAM,ROM) sur les PIC et MikroC
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#25 Message par paulfjujo » sam. 4 févr. 2017 20:11

Code : Tout sélectionner

strConstRamCpy(T_message[60], "azerty");


ESSAIE AVEC strConstRamCpy(T_message+60, "azerty");

ou

strConstRamCpy(&T_message[60], "azerty");
Aide toi, le ciel ou FantasPic t'aidera

Memoire ( RAM,ROM) sur les PIC et MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#26 Message par Jérémy » sam. 4 févr. 2017 20:23

Les deux fonctionnent parfaitement !

franchement ca ne veut pas rentrer dans ma petite tête ces histoires de pointeurs etc .....

Un grand merci Paul ! en deux coups de cuillères à pot tu as trouvé deux solutions viables ! +1
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Memoire ( RAM,ROM) sur les PIC et MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#27 Message par Jérémy » sam. 4 févr. 2017 22:36

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 :mur:

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 !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Memoire ( RAM,ROM) sur les PIC et MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#28 Message par Jérémy » dim. 5 févr. 2017 09:06

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 :

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 ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Memoire ( RAM,ROM) sur les PIC et MikroC
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#29 Message par paulfjujo » dim. 5 févr. 2017 10:14

bonjour,

a priori, le compilo s'en débrouille mais tu peux toujours rajouter un cast
(unsigned char) (chrono/3600)
...ceinture et bretelles...
Aide toi, le ciel ou FantasPic t'aidera

Memoire ( RAM,ROM) sur les PIC et MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#30 Message par Jérémy » dim. 5 févr. 2017 10:28

(unsigned char) (chrono/3600)
...ceinture et bretelles...


Ok je vais comme d'habitude suivre tes bons conseils ! :bravo:

Jérémy en mode satisfait ! fiabilité a 100% ......... pour le moment !

Me reste la partie lecture tension et "date" à intégrer
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Généralités sur les PICs »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 18 invités