Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question sur le temps réel et interruption

Surcharge en tache et problème d'appel d'ISR

    23 décembre 2020 à 23:43:40

    Bonjour à tous ! :) Bonne fête de fin d'année à tous ! et merci pour ceux qui prennent le temps de me lire :p

    Dans le cadre d'un projet sur BeagleBone Black, j'utilise un système temps réel (Quadros RTXC) :

    Pour faire du timestamp j'utilise aussi 2 timers sur un Crystal 25MHz : Le TIMER2 qui me sert à compter mes millisecondes, ainsi que le TIMER5 qui me sert à compter mes nanosecondes.

    Pour être plus précis :

    Le TIMER2 est initialisé à (2^32 -1) - 25000 et lève un flag lorsqu'il arrive à 0 : par appel à ce flag : j'appelle l'interruption qui me permet d'incrémenter une variable ms. J'en profite aussi pour remettre mon TIMER5 à 0.Ainsi la valeur de mon Timestamp vaut la valeur ms + TIMER5_TCRR. (Cette fonctionnalité est effectué hors temps réel)

    Voici mon problème :

    j'observe dans ma fonction qui récupère le timestamp un retour dans le passé de la valeur ms + TIMER5_TCRR : C'est à dire qu'il arrive que la valeur calculée soit inférieur à la valeur précédente après appel à l'interruption TIMER2. Ce que j'ai observé c'est qu'il arrive que mon interruption TIMER2 ne soit pas appelé au bout d'une milliseconde mais parfois au bout de 3 millisecondes. Ce qui est je pense donc l'origine de mon problème. (TIMER5 n'est pas réinitialisé et ms n'est pas incrémenté). 

    Ma question est simple :

    Est-ce qu'un système temps réel "Surchargé" de tâche occulte les interruptions (interruption qui sont extérieures au système temps réel) ? Est-ce que les interruptions TIMER doivent t-elle obligatoirement faire partie du système temps réel pour être vue? Doit-on être obligatoirement en tâche IDLE pour que l'interruption s'appelle (Ps voir image ci dessous de FreeRTOS) : 

    Merci beaucoup d'avance pour votre réponse !

    Kasimashi

    -
    Edité par Kasimashi 23 décembre 2020 à 23:59:03

    • Partager sur Facebook
    • Partager sur Twitter
      30 décembre 2020 à 12:33:27

      Pas de réponse ?

      Je suis sur un processeur AM3352 de chez TI j'aimerais faire un test en désactivant toutes les interruptions SAUF l'interruption lié au TIMER2

      Pour désactiver toutes les interruptions je procède ainsi : par modification du registre CPSR:

      #define IRQ_BIT  0x80u
      #define RTXC_Mode 0x13u
      PSR psr;
      psr = __get_CPSR();
      __set_CPSR(IRQ_BIT + RTXC_Mode); /* immediate mode */
      return psr;

      Je pense qu'en procédant comme ceci je cache toutes les interruptions : Cependant j'aimerais le faire SAUF l'interruption lié au TIMER2 : comment puis-je faire ?

      Merci d'avance.

      • Partager sur Facebook
      • Partager sur Twitter

      Question sur le temps réel et interruption

      × 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