Aller au contenu


Photo
- - - - -

Robot roulant pousseur de ballon


21 réponses à ce sujet

#21 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 262 messages
  • Gender:Male

Posté 15 août 2023 - 09:52

Le mot clef volatile aurait bien été nécessaire à mes yeux pour rendre le code "correct".

Pour info, un code Arduino contient une fonction "main" cachée (ie la première fonction appellée), qu'on peut résumer en :

Setup();
while(true)
{
   loop();
}

Donc sans volatile, le compilateur serait en droit de remplacer (équivalent du loop)

while(true)
{
    if(distToRun <= 0)
    {
        analogWrite(PinEN,0);
        digitalWrite(PinIN1,LOW);
        digitalWrite(PinIN2,LOW); 
    } 
}

par

if(distToRun <= 0)
{
    while(true)
    {
        analogWrite(PinEN,0);
        digitalWrite(PinIN1,LOW);
        digitalWrite(PinIN2,LOW); 
    } 
}

vue que si distToRun n'est pas volatile, le compilateur a le droit de faire l'hypothèse que distToRun ne change pas (vu qu'aucune instruction du flot d'instructions normales ne modifie distToRun).

 

 

En pratique, je ne penses pas que le compilateur fasse cette optimisation (sinon, le robot s'arrêterait jamais), mais il en aurait le droit.

 

Donc il aurait fallu mettre distToRun en volatile (comme toutes les variables qui apparaissent à la fois dans une interruption et en dehors). Mais je ne penses pas que ça aurait changé quoi que ce soit à ton problème.

 

 

 

 

Par contre, je n'ai pas d'explication à première lecture de pourquoi distToRun a diminué plus que prévu (et je n'aurais malheureusement pas le temps ces prochains jours de creuser plus dans le détail, désolé)
 

 

 


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#22 fralaric

fralaric

    Membre

  • Membres
  • 21 messages

Posté 24 août 2023 - 03:35

Merci pour ta réponse, ne te prend pas la tête, j'ai déjà compris l'idée du volatile et c'est déjà bien.

 

Je pense arrêter ce projet, j'ai fais ce que je voulais déjà (aller d'un point à A à un point B en calculant l'angle roue et la distance à effectuer).

 

J'ai une autre idée, plus complexe, je vais faire un nouveau sujet pour ça.





Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users