Pic C Appeler une fonction dans une interruption
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Pic C Appeler une fonction dans une interruption



  1. #1
    invite976e6cb2

    Pic C Appeler une fonction dans une interruption


    ------

    Bonjour,

    Je ne sais pas si il est possible d'appeler une fonction dans une interruption voici le bout de code

    Code:
    void enter(void);
    
    void RDA_isr(void)
    {
    char input[3];
    input[0]=getc();
    
    if(input[0]='m')enter();
    }
    
    void main()
    {
    while(true)
    {}
    }
    
    void enter(void)
    {
    putc(160)
    }
    J'ai alléger le code pour vous montrer le point qui m'interesse.
    En fait dans mon interruption je n'arrive pas à appeler la fonction enter()
    Je suppose donc que ce n'est pas possible (à confirmer), aussi existe t il un autre moyen en utilisant une interruption à part mettre tout le code de enter() dans l'interruption

    D'avance merci

    -----

  2. #2
    flyingrock

    Re : Pic C Appeler une fonction dans une interruption

    Bonjour,

    Et comme ça if(input[0]=='m') ?

    @+

  3. #3
    invite976e6cb2

    Re : Pic C Appeler une fonction dans une interruption

    Oui excusez moi erreur de frappe

  4. #4
    terriblement

    Re : Pic C Appeler une fonction dans une interruption

    Salut,

    il faut garder les interruptions aussi courtes que possible, le mieux étant de mettre un flag à 1 dans l'interruption, de vérifier assez souvent l'état du dis flag dans ta boucle principale, et d'agir en conséquence (ne pas oublier de mettre le flag à 0 quand tu as traité l'info.

    en gros:
    main()
    {
    if (flag)
    fonction_a_appeler();
    flag = 0;
    }

    interruption()
    {
    flag = 1;
    }
    Dernière modification par HULK28 ; 30/11/2012 à 14h31. Motif: ajout des balises code pour une meilleure lisibilité et des ;

  5. A voir en vidéo sur Futura
  6. #5
    invite03481543

    Re : Pic C Appeler une fonction dans une interruption

    Bonjour,

    visiblement vous souhaitez interrompre le programme dès lors que vous avez reçu un caractère sur votre comm.
    Donc vous optez pour la solution de terriblement, mais en utilisant la ressource interruptive de votre UART (test du bit RCIF).
    @+

  7. #6
    invite976e6cb2

    Re : Pic C Appeler une fonction dans une interruption

    J'ai finalement changé d'option en faisant une boucle infinie dans le programme principal sans utiliser d'interruption.
    JE pensais perdre des données venant de l'uart mais ce n'est pas le cas.
    Merci à tous, je note la description de l'interruption de terriblement qui est un exemple clair de son utilisation

  8. #7
    RISC

    Re : Pic C Appeler une fonction dans une interruption

    Salut,

    Terriblement a décrit la bonne méthode.
    Attention à déclarer flag en "volatile" (exemple : volatile char flag=0 pour éviter les surprises lorsque l'on optimise...
    Il n'y a aucun problème pour appeler une fonction dans une interruption en prenant garde à :
    1/ ne pas appeler une fonction aussi appelée dans le programme principal (sinon il faut sauvegarder sa zone de travail)
    2/ ne pas appeler (comme tu l'as fait) une fonction qui a un long temps d'exécution car elle peut provoquer des problèmes de bande passante

    En résumé : les interruptions courtes voire très courtes sont la clé du succès ;=)

    a+

  9. #8
    terriblement

    Re : Pic C Appeler une fonction dans une interruption

    Citation Envoyé par RISC Voir le message
    1/ ne pas appeler une fonction aussi appelée dans le programme principal (sinon il faut sauvegarder sa zone de travail)
    Malheureusement on a pas droit aux surcharges en C, c'est dommage je trouve.

  10. #9
    invite03481543

    Re : Pic C Appeler une fonction dans une interruption

    Bonjour,

    le C n'y est pour rien, quelque soit le langage un microcontroleur a besoin de temps pour effectuer une tache, le mode interruptif permet de detourner temporairement la tache de fond pour faire un traitement juge plus important, plus urgent.
    Si on reste trop longtemps d'autres evenements seront perdus et non traites ou dans le meilleur des cas desynchronises avec l'application.
    Soit on augmente la vitesse du processeur pour avoir le temps de tout faire, soit on etabli une strategie qui consiste a rendre compte de l'evenement detecte et de le sous traiter a une fonction externe dediee qui ainsi rend la main et decharge la routine d'interruption.
    D'ou comme l'indiquait RISC d'utiliser des variables volatile qui lorsqu'elle sont modifiees en interruption interagissent dynamiquement et aussitot sur l'ensemble du programme et vice versa.

    C'est donc plus une question de ressources et de temps partages qui limite ce que l'on peut faire sur un microcontroleur que de langage a proprement parle.

Discussions similaires

  1. Comment insérer une fonction Matlab dans les paramètres d'entrée d'une autre fonction ??
    Par inviteac36b108 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 04/01/2010, 07h16
  2. Appeler un programme par une seule touche , par exemple F5
    Par invite0324077b dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 07/11/2009, 06h46
  3. définir une fonction comme une intégrale dans Maple
    Par invite93279690 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 13/03/2009, 20h35
  4. Existe t il une forme appeler HYPERCONDUCTEUR
    Par invite098fec74 dans le forum Discussions scientifiques
    Réponses: 2
    Dernier message: 30/09/2007, 10h41
  5. comment appeler une fonction ecrite en C++ sur Matlab
    Par invite5c0c3007 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 17/06/2005, 14h35
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...