Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Syntaxe interruption MPLAB



  1. #1
    arcane86

    Syntaxe interruption MPLAB


    ------

    Bonjour,

    je réalise actuellement un programme en C dans lequel je dois effectuer des interruptions toutes les 100µs.

    Matériel :

    PIC18F2820

    Logiciel :

    MPLAB v7.50 et C18 C compiler

    J'utilise pour générer les interuption l'overflow du Timer0.

    Le probleme c'est que je ne suis pas sur de ma syntaxe de déclaration des interruptions ! (j'ai essayé de coller au plus pres de l'aide de MPLAB C18)

    voila ce que ça donne :

    Code:
    /*
    #pragma code high_vector=0x08
    void interrupt_at_high_vector(void) // Déclaration des interruption à l'adresse 0x08
    
    {
    	_asm GOTO interruption _endasm	// Bouclage sur le programme d'interruption
    }
    
    #pragma code // Fin d'interruption, reprise du programme principal
    */
    
    
    
    #pragma interrupt interruption	// declaration de l'interruption et des zones memoires à sauvegarder
    
    void interruption(void)
    { //Programme de gestion des interruptions
    
    // Sequences divers (sans aucun appel de sous programmes ou routines)
    
    }
    J'ai mis la premiere partie du code ( #pragma code high_vector=0x08 ... ) en commentaire car MPLAB refuse de me le compiler (de plus l'aide n'en parle pas).

    Voila je voulais savoir si ma syntaxe etait bonne, auquel cas j'irais chercher l'erreur (mon programme ne marche pas) ailleurs !

    Merci

    -----

  2. Publicité
  3. #2
    umfred

    Re : Syntaxe interruption MPLAB

    Apparemment avec C18 C, il existe une directive #pragma interrupt fonc_name

    Consulte le guide utilisateur du compilateur à partir de la page 35

  4. #3
    RISC

    Re : Syntaxe interruption MPLAB

    Bonsoir,

    Ci-dessous un exemple :

    /****************************** **********/

    void low_isr(void);
    void high_isr(void);

    ///** I N T E R R U P T V E C T O R S ****************************** ***********/

    #pragma code high_vector=0x08
    void interrupt_at_high_vector(void)
    {
    _asm goto high_isr _endasm
    }


    #pragma code low_vector=0x18
    void interrupt_at_low_vector(void)
    {
    _asm goto low_isr _endasm
    }


    Attention car il existe 2 modes d'interruptions :
    a/ Legacy mode (1 seul vecteur)
    b/ Priority mode (2 vecteurs)


    a+

  5. #4
    arcane86

    Re : Syntaxe interruption MPLAB

    Le probleme justement c'est que C MPLAB ne veut pas me compiler ça :

    #pragma code high_vector=0x08
    void interrupt_at_high_vector(void) // Déclaration des interruption à l'adresse 0x08

    {
    _asm GOTO interruption _endasm // Bouclage sur le programme d'interruption
    }

    #pragma code // Fin d'interruption, reprise du programme principal

    Pour info l'erreur que m'affiche MPLAB :

    C:\Documents and Settings\Production\Bureau\tes t.c:8:Error [1013] error in pragma directive
    BUILD FAILED: Tue Apr 24 14:26:56 2007


    J'ai peur que se soit ça qui ne va pas dans mon programme (que je compile en mettant le code ci dessus en commentaire).
    Dernière modification par arcane86 ; 24/04/2007 à 14h30.

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

    Re : Syntaxe interruption MPLAB

    je pense qu'il faut que tu ai déclaré la fonction d'interruption avant le pragma ce qui donne:
    void interruption(void);
    #pragma code high_vector=0x08
    void interrupt_at_high_vector(void) // Déclaration des interruption à l'adresse 0x08

    {
    _asm GOTO interruption _endasm // Bouclage sur le programme d'interruption
    }

    #pragma code // Fin d'interruption, reprise du programme principal

  8. #6
    RISC

    Re : Syntaxe interruption MPLAB

    arcane,

    Sur quelle ligne précisemment as-tu le message d'erreur (le numéro de ligne xxx est normalement écrit au milieu du message d'erreur juste avant les : qui précèdent l'explication de l'erreur :

    [1013] error in pragma directive xxx

    Essaye de taper l'instruction GOTO en minuscule (goto) ?


    PS : je confirme également ce que t'a dit Umfred. Les déclarations doivent être avant les interruptions. Dans mon exemple ci dessus :

    void low_isr(void);
    void high_isr(void);

    #pragma....

    a+

  9. Publicité
  10. #7
    arcane86

    Re : Syntaxe interruption MPLAB

    Merci a tous, effectivement il fallait que je place un prototype de la fonction avant de déclarer le vecteur d'interruption !

    C'etait tout bete comme erreur (comme souvent d'ialleurs j'ai l'impression).

    Merci pour cette aide

    Sinon la casse n'a finalement pas d'importance pour le GOTO.

Discussions similaires

  1. Question de syntaxe
    Par Bernouilly dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 25/10/2007, 12h30
  2. Syntaxe programme C++
    Par Paulochon dans le forum Électronique
    Réponses: 6
    Dernier message: 06/07/2007, 10h50
  3. Syntaxe mutation
    Par brunop dans le forum Biologie
    Réponses: 4
    Dernier message: 11/04/2006, 16h53
  4. Syntaxe
    Par brunop dans le forum Chimie
    Réponses: 1
    Dernier message: 17/01/2006, 16h33
Découvrez nos comparatifs produits sur l'informatique et les technologies.