Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de Watchdog dans un système temps réel.

    15 juin 2021 à 11:14:18

    Bonjour à tous,

    Je viens à vous car j'ai un problème lié au Watchdog que je ne sais pas trop comment résoudre. 

    Pour faire simple dans mon RTOS (Qui fonctionne par priorité des tâches : la tâche la plus prioritaire garde la main) , j'ai une tâche IDLE qui se charge de faire un reset du watchdog.

    Cependant il arrive que j'ai des tâches de priorités plus importante qui interviennent : dans le cas si le temps d'exécution de la tâche est inférieur au temps watchdog tout va bien. Cependant il arrive que j'ai une tâche qui peut durer plus de deux secondes : dans ce cas mon watchdog pète et mon système plante :

    J'ai pensé à plusieurs chose c'est rendre la main en mettant un delay dans ma tâche la plus prioritaire, mais je peux aussi imaginer alors qu'une autre tâche prenne la main sur la tâche IDLE et dans ce cas j'aurais aussi le problème ... Je peux aussi faire un reset manuel du watchdog dans ma tâche mais c'est pas hyper propre non plus ... 

    Avez vous une solution à proposer ?

    Merci pour votre réponse.

    Kasimashi.

    -
    Edité par Kasimashi 15 juin 2021 à 11:16:01

    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2021 à 14:07:16

      Comme tu l'as dis toi même, faire un refresh du watchdog dans la Task2 est effectivement la solution la plus simple mais pas forcément la plus propre.

      Le but du watchdog consiste à détecter une anomalie dans le traitement et faire un reset du CPU donc si on rajoute des reset watchdog un peu partout, il perd de son utilité.

      Rajouter un delay dans Task2 ne te garantie pas que tu programme retourne en TaskIdle, il se peut très bien qu'une autre tache prenne le relais car elle a quelque chose à faire.

      A moins que toutes tes autres taches soient ultra courtes, et dans ce cas là, tu reviendras en Idle un peu plus tard.

      Une autre solution consisterait à mettre un timeout du watchdog plus grand que 2 secondes, de façon à ce que tous les traitements de toutes les tâches puissent être fait avant que le watchdog ne se déclenche.

      Généralement, il y a des diviseurs qui permettent de configurer ce temps, tu pourrais très bien mettre 4 ou 8 secondes.

      Une dernière solution serait d'avoir un tache de gestion du watchdog en priorité la plus élevée.

      Cette tache consulterait une MessageBox (donc tache bloquée lorsqu'il n'y a pas de message), et ferait des reset watchdog lorsque les messages reçus sont cohérents.

      Dans tes autres taches, il te suffirait alors d'envoyer des messages à cette tache watchdog pour notifier que tout va bien.

      Une bonne chose à faire serait d'envoyer un numéro incrémental ou quelque chose du même genre de façon à ce que la tache watchdog puisse détecter une anomalie.

      Par exemple, si le numéro reçu ne s'incrémente pas ou qu'il manque un numéro, c'est que la tache est bloquée quelque part ou a zappé un bout de code, donc ne pas faire un reset watchdog de façon à ce que le CPU soit automatiquement reset serait une bonne chose.

      • Partager sur Facebook
      • Partager sur Twitter

      Problème de Watchdog dans un système temps réel.

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown