Algorithme 2 boucles principales et interruption
Répondre à la discussion
Affichage des résultats 1 à 24 sur 24

Algorithme 2 boucles principales et interruption



  1. #1
    boy30

    Algorithme 2 boucles principales et interruption


    ------

    Bonjour, je programme sur un PIC en assembleur.
    J'ai une boucle principale qui ne fait rien, seul le code de l'interruption est nécessaire.
    Puis j'ai une boucle secondaire qui ne fait rien non plus mais dans laquelle d'autres interruptions sont en œuvres; la sélection et le changement de mode se fait dans l'interruption matérielle (RB0: appui sur un bouton).

    Cependant, je ne peux pas utiliser de "Goto mode1 ou mode2" dans l'interruption puisque par définition elle revient d'où elle est venue.

    Je suis donc obliger de scruter sans cesse dans quel mode je suis pour rediriger vers la boucle adéquate selon celle choisie lors d'une interruption suite à l'appui sur le bouton. Ce qui enlève tout l'intérêt de l'interruption, et en plus j'aurais besoin de très longue tempo dans une boucle, alors le temps de réaction sera ridicule.

    Quelqu'un aurait-il une piste qui pourrait m'inspirer?


    Nom : algo.JPG
Affichages : 191
Taille : 177,0 Ko

    -----
    ....j'ai glissé chef!

  2. #2
    invitee05a3fcc

    Re : Algorithme 2 boucles principales et interruption

    A mon humble avis ..... tu as mal démarré l'étude de ton programme !
    Tu peux expliquer ce que tu veux faire, les actionneurs, les capteurs , l'organigramme ?

  3. #3
    Gérard

    Re : Algorithme 2 boucles principales et interruption

    Un BP par mode.

  4. #4
    invitef9ccb542

    Re : Algorithme 2 boucles principales et interruption

    Bonjour,

    Cela ressemble à un système multitâche dans lequel on exécute deux taches: mode1 et mode2.
    Il faut donc un "ordonnanceur" qui sera la tache lancée par la gestion de l’interruption du BP.
    Cet ordonnanceur devra stocker les compteurs de programme de la tache mode1 et de la tache mode2, il devra aussi stocker le contexte (le contenu des accumulmateurs et registres), et l'identifiant de la tâche courante (qui décrit si c'est mode1 ou mode2 qui tourne). A chaque entrée dans l'ordonnanceur on va sauver le contexte courant et restituer le contexte suivant et faire un goto sur le compteur de programme.

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

    Re : Algorithme 2 boucles principales et interruption

    Merci, je préfère de loin cette réponse qui réponds à une question d'ordre générale où il n'est nul besoin de savoir ce que font les modes (tâches). De plus je ne le sais même pas encore moi-même!
    Donc, cela veut dire qu'il faut un ordonnanceur qui sera exécuté après l'interruption pour rediriger vers la tâche activée mais comme il revient d'où il vient, où dois-je mettre cet ordonnanceur, un petit organigramme je pense serait très intéressant, si possible.
    ....j'ai glissé chef!

  7. #6
    invitee05a3fcc

    Re : Algorithme 2 boucles principales et interruption

    Ce que tu cherches, c'est un moniteur temps réel qui permet de faire exécuter plusieurs taches successivement par une unité centrale.

    A mon avis, c'est un marteau pilon qui est inutile dans ton application . Si tu nous disais ce que tu veux faire ?

    PS : Ca existe pour un PIC, http://nicot31.fr/noyau-temps-reel.

  8. #7
    invitef9ccb542

    Re : Algorithme 2 boucles principales et interruption

    Bonjour,

    En général l’ordonnanceur est une routine d’interruption (sur pic on dit ISR).
    Cette routine d’interruption est, en général, lancée par un timer toutes les xxx secondes, cela peut ressembler à 10ms ou à 1µs, suivant la simplicité de changement de contexte, la stratégie de découpage des tâches, les capacités du processeur qui va hacher le temps.
    Dans ton cas ce n'est pas un timer qui demande la commutation de tâche, mais l'appui sur un BP.

  9. #8
    boy30

    Re : Algorithme 2 boucles principales et interruption

    Merci pour les infos des noyaux, je vais y venir mais pour l'instant c'est vrai que mon problème ne nécessite pas un tel niveau de complexité. Je vais juste choisir le mode dans l'interruption et faire un goto vers celle qu'il faut en restaurant le contexte comme si il sortait de la routine d'interruption mais sans le "return from interrupt" qui me posait problème, et qui ne sera pas exécuté, son adresse de retour stockée en stack sera écrasée ou non mais ne servira pas puisque remplacée par le goto, je shunte en fait la sortie de l'interruption. Pour ce qui est de l'ordonnanceur, c'est justement dans l'un des deux mode qu'il rentrera en jeu...
    Dernière modification par boy30 ; 05/02/2014 à 17h16. Motif: grammaire
    ....j'ai glissé chef!

  10. #9
    invitee05a3fcc

    Re : Algorithme 2 boucles principales et interruption

    Une usine à gaz !
    Tu positionnes un flag qui est testé dans ton main

    1/ Flag= 1 GOTO 4/ pour exécution prog1
    2/ exécution prog0
    3/ GOTO 1/
    4/ exécution prog1
    5/ GOTO 1/

    En interruption :
    - Interruption bouton 0 -> Flag=0 et return from interrupt
    - Interruption bouton 1 -> Flag=1 et return from interrupt

  11. #10
    invitef9ccb542

    Re : Algorithme 2 boucles principales et interruption

    @ DAUDET78

    Cela ne marche pas, on ne sait pas à quel endroit du mode1 ou du mode2 revenir, il faut sauvegarder le contexte.

  12. #11
    invitee05a3fcc

    Re : Algorithme 2 boucles principales et interruption

    Citation Envoyé par jlcms Voir le message
    Cela ne marche pas,
    Si ça marche !
    Si on est en train d’exécuter le prog1 et qu'on appui sur le bouton 0 , le flag est mis à 0 et après l'interruption, on reviens d'où on est parti .
    Quand le prog1 est terminé, il vient testé le flag et donc ensuite c'est le prog0 qui est exécuté .

    Pour accélérer le basculement, on peut tester l'état du flag dans diverses phases de prog0 et de prog1 (par exemple, dans des boucles de tempo)

  13. #12
    boy30

    Re : Algorithme 2 boucles principales et interruption

    Le contexte n'est pas trop important puisque le shuntage d'un mode à l'autre commencera obligatoirement par son initialisation spécifique mais surtout je ne veux en aucun cas scruter un flag pour savoir si il faut changer de mode, j'ai besoin de l'immédiateté de l'interruption. Il pourrait avoir des tempo de l'ordre de quelques secondes dans le mode 2 par exemple avant d'aller voir le flag qui aurait déjà changé.
    ....j'ai glissé chef!

  14. #13
    invitef9ccb542

    Re : Algorithme 2 boucles principales et interruption

    @DAUDET78: Stack overflow

  15. #14
    invitee05a3fcc

    Re : Algorithme 2 boucles principales et interruption

    Citation Envoyé par jlcms Voir le message
    @DAUDET78: Stack overflow
    I d'ont agree ! J'ai pisser plus de ligne de code dans ma vie que tu n'en as encore écrite !
    Citation Envoyé par boy30 Voir le message
    mais surtout je ne veux en aucun cas scruter un flag pour savoir si il faut changer de mode,
    Et pourquoi?
    j'ai besoin de l'immédiateté de l'interruption.
    c'est quoi immédiat pour toi? 1µS ? 1mS ? 100mS?
    Il pourrait avoir des tempo de l'ordre de quelques secondes dans le mode 2 par exemple avant d'aller voir le flag qui aurait déjà changé.
    Tu fais comment ta tempo ?
    - par une boucle soft ? tu met le test du flag dans ta boucle
    - par un timer que tu viens tester ? tu met le test du flag dans ta boucle de test du timer

  16. #15
    invite60c6fa7f

    Re : Algorithme 2 boucles principales et interruption

    Tu le dis toi même, c'est pas possible par interruption. Donc qu'est ce que tu n'aimes pas dans la proposition de Daudet? Si ton programme est truffé de tempo, c' est pas le test d'un flag qui va le ralentir.... Reste à savoir si c'est une question rétorique ou qui débouche sur une application pratique. Si ça te tentes, tu peux très bien aboutir à une solution avec IRQ. Resette le pic en IRQ avec le WDT, c'est pas si sale, et au début de ton programme, et bien tu teste dans quelle boucle tu veux aller...

  17. #16
    invite60c6fa7f

    Re : Algorithme 2 boucles principales et interruption

    Remarque jamais fait ça, mais en assembleur tu peux même essayer depuis l'Irq de revenir à l'adresse 0, comme le ferait un reset. En tout cas, tu peux essayer...

  18. #17
    invitef9ccb542

    Re : Algorithme 2 boucles principales et interruption

    Citation Envoyé par DAUDET78 Voir le message
    I d'ont agree ! J'ai pisser plus de ligne de code dans ma vie que tu n'en as encore écrite
    Je ne sais pas, moi j'en suis à environ 467000 lignes.

  19. #18
    invitee05a3fcc

    Re : Algorithme 2 boucles principales et interruption

    Citation Envoyé par r4ph Voir le message
    comme le ferait un reset. En tout cas, tu peux essayer...
    Ca ... c'est un stack overflow !

  20. #19
    invite60c6fa7f

    Re : Algorithme 2 boucles principales et interruption

    Citation Envoyé par jlcms Voir le message
    Je ne sais pas, moi j'en suis à environ 467000 lignes.
    C'est tu rendu un concours de quéquette?!

    Moi je dis ça, c'est juste pour donner des idées hein... Mais on en apprends, je pensais que le stack overflow arrivait juste quand la stack est pleine, quand on a trop fait de sauts....

    Sinon, pensez vous que ça marcherais?

  21. #20
    Gérard

    Re : Algorithme 2 boucles principales et interruption

    Citation Envoyé par r4ph Voir le message


    C'est tu rendu un concours de quéquette?!
    Comprends pas tout là, ça doit être l'heure.

    Citation Envoyé par r4ph Voir le message
    Moi je dis ça, c'est juste pour donner des idées hein... Mais on en apprends, je pensais que le stack overflow arrivait juste quand la stack est pleine, quand on a trop fait de sauts....

    Sinon, pensez vous que ça marcherais?
    Stack overflow arrive quand on a fait un appel de S/P ou d'interruption de trop. Un saut simple (GOTO) ne compte pas.

  22. #21
    invite60c6fa7f

    Re : Algorithme 2 boucles principales et interruption

    Oui ce doit être l'heure. Pour être plus cohérent, j'aurais aussi du mettre la citation de Daudet post #18. Mais oui c'est ce que je voulais dire par saut, pour un appel de fonction ou une interruption, je me suis mal exprimé.

    Bon, j'ai crois avoir compris ce qu'il voulais dire, un stack overflow aboutirai à un reset manifestement. Est-ce qu'un GOTO 0 aurais le même effet?

  23. #22
    invite60c6fa7f

    Re : Algorithme 2 boucles principales et interruption

    Finalement il y a plein de solutions pour Boy30, non?

  24. #23
    invitee05a3fcc

    Re : Algorithme 2 boucles principales et interruption

    Citation Envoyé par r4ph Voir le message
    Est-ce qu'un GOTO 0 aurais le même effet?
    Je précise : je ne connais rien aux PICs

    Mais je sais qu'on peut faire plusieurs types de reset : Hard, WD , instruction reset (?) qui ont des effets différents (sinon de relancer le programme) . Différents? Au sens que l'état hard et soft du µC n'est pas tout à fait identique .

    Par contre le GOTO 0 est à proscrire car le pointeur de la pile n'est pas modifié et on va droit au stack overflow

    PS : Une autre solution ! Avec ses deux boutons poussoirs, il fait toujours un reset hard du µC et il positionne une bascule RS fait avec deux portes logiques . Quand le µC redémarre, il vient lire l'état de la RS et démarre le programme "0" ou "1" . Chouette non ?

  25. #24
    invite60c6fa7f

    Re : Algorithme 2 boucles principales et interruption

    Très chouette effectivement, mais tu le sais bien, pourquoi faire simple quand on peut faire compliqué !


    Quoi qu'il en soit, merci à tous, je me coucherais moins bête. Mais moins con, pas si sur...

Discussions similaires

  1. calcul des contraintes principales
    Par invite06c66a72 dans le forum Physique
    Réponses: 0
    Dernier message: 11/11/2013, 12h31
  2. PIC : interruption externe et interruption on change ?
    Par invitea3277f60 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/04/2012, 13h41
  3. Analyse Composantes Principales
    Par invite40ab0cad dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 12/04/2009, 22h59
  4. Créer des partitions principales
    Par Fistos dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 30/12/2008, 19h49
  5. Analyse des composantes principales !
    Par invitea069fc56 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 02/12/2008, 12h03
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...