différence entre compilateurs CCS et High-tech au niveau de la gestion d'interruption
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

différence entre compilateurs CCS et High-tech au niveau de la gestion d'interruption



  1. #1
    Nappa

    Wink différence entre compilateurs CCS et High-tech au niveau de la gestion d'interruption


    ------

    Salut,

    je voudrais que quelq'un m'explique la différence entre ces deux compilateurs au niveau des outils prévus pour la gestion d'interuptions,

    avec High-tech, il est possible d'utiliser des registres et bits prévus pour la gestion précises des interruptions ( INTF,OPTION,PEIE,GIE,INTE,..., ) alors qu'avec le compilateur CCS il me semble qu'il n'y a que des fonctions prédéfinies , remplissent-t-ils les mêmes rôles ??



    voici un lien vers un code d'interruption sur INT/RB0 avec High-Tech PIC C:

    http://www.electroniciens.aquitaine-...MG/c/int_rb0.c

    voici un petit code que j'ai testé (CCS), qui consiste à inverser l'état d'une LED à chaque interruption sur RB0 pour un PIC16F876 (ne marche pas à tout les appuis )

    Code:
    /*
    #INT_EXT    //interruption sur RB0
    void ext_isr() //fonction de l'interruption 
    {
    boolean button_pressed;
    
    
         button_pressed=!button_pressed;    // à chaque fois on inverse l'état de la variable
        if(button_pressed)
          output_high(pin_a0); //allmer la LED
        else
          output_low(pin_a0); //éteindre la LED
           delay_ms(300);            // debounce button (temps d'anti-rebond)
         
           
    }
    
    
    
    
    void main()
    {
    
       port_b_pullups(TRUE);
       setup_adc_ports(NO_ANALOGS);
       setup_adc(ADC_OFF);
       setup_spi(FALSE);
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);
       setup_timer_1(T1_DISABLED);
       setup_timer_2(T2_DISABLED,0,1);
    
    
       ext_int_edge(H_TO_L);
       enable_interrupts(INT_EXT);// activer l'interruption sur RB0
       enable_interrupts(GLOBAL);
       
       set_tris_b(0xff);          //portb en entree
       set_tris_a(0);             // porta en sortie  
       
     while(true);



    voici ce que l'aide du CCS dit à propos des interruptions:


    Code:
    Interrupts
    
    --------------------------------------------------------------------------------
    
    The following functions allow for the control of the interrupt subsystem of the microcontroller.  With these functions, interrupts can be enable, disabled, and cleared.  With the preprocessor directives, a default function can be called for any interrupt that does not have an associated isr, and a global function can replace the compiler generated interrupt dispatcher.
    
     
    
    Relevant Functions:
      
     
    disable_interrupts()
     Disables the specified interrupt.
    
     
     
    enable_interrupts()
     Enables the specified interrupt.
    
     
     
    ext_int_edge()
     Enables the edge on which the edge interrupt should trigger. This can be either rising or falling edge.
    
     
     
    clear_interrupt()
     This function will the specified interrupt flag.  This can be used if a global isr is used, or to prevent an interrupt from being serviced.
    
     
     
    Relevant Preprocessor:
      
     
    #device  high_ints=
     This directive tells the compiler to generate code for high priority interrupts.
     
    #int_xxx fast
     This directive tells the compiler that the specified interrupt should be treated as a high priority interrupt.
     
     
      
     
    Relevant Interrupts:
      
     
    #int_default
     This directive specifies that the following function should be called if an interrupt is triggered but no routine is associated with that interrupt.
    
     
     
    #int_global
     This directive specifies that the following function should be called whenever an interrupt is triggered.  This function will replace the compiler generated interrupt dispatcher.
    
     
     
    #int_xxx
     This directive specifies that the following function should be called whenever the xxx interrupt is triggered.  If the compiler generated interrupt dispatcher is used, the compiler will take care of clearing the interrupt flag bits.
    
     
     
    Relevant Include Files:
     none, all functions built in.
    
     
     
    Relevant getenv() Parameters:
      
     
    none
    
     
      
     
    Example Code:
      
     
    #int_timer0
      
     
    void timer0interrupt()
     // #int_timer associates the following function with the
     
     
     // interrupt service routine that should be called
     
    enable_interrupts(TIMER0);
     // enables the timer0 interrupt
     
    disable_interrtups(TIMER0);
     // disables the timer0 interrupt
     
    clear_interrupt(TIMER0); 
     // clears the timer0 interrupt flag

    je vous remercie d'avance pour vos réponses.

    -----

  2. #2
    invite2562e666

    Re : différence entre compilateurs CCS et High-tech au niveau de la gestion d'interruption

    Moi, ce qui m'énerve, c'est :

    - 1. les " Moi je voudrais" : On ne veut rien, on fait appel à une assistance volontaire et on exige rien du tout

    - 2 - les gens qui nous prennent pour des compilateurs.
    A 99% des cas, la raison d'une erreur ou d'un warning est explicitement indiquée; mais bon c'est plus facile de balancer le code pour que les autres cherchent le problème.. que de lire et d'essayer de comprendre les messages d'erreur (qui sont pourtant là pour çà)

    - 3 les gens qui n'ont pas l'air de maitriser le sujet (et qui espère gagner du temps en soumettant - ou reportant - leur ignorance ou incapacité aux autres; ça ne marche pas ) , ici en l'occurrence les interruptions.. à revoir donc dans la datasheet ou le cours de bigonoff.

    th.

  3. #3
    invitee0bbe70d

    Re : différence entre compilateurs CCS et High-tech au niveau de la gestion d'interruption

    Bonsoir,

    Hitech = compilateur ANSI-C
    CCS = compilateur C (non ANSI)

    Avec CCS, on peut pratiquement "ignorer" les registres SFR car des fonctions prédéfinies (non ANSI) existent pour virtualiser le processeur.

    Résultat : si on utilise CCS, il faut utliser les fonctions prédéfinies mais le logiciel ne sera pas portable sur d'autre compilateurs C. De même on ne pourra par réutiliser des logiciels écrits avec d'autres compilateurs C.
    C'est un choix à faire qui a des avantages et des inconvénients en fonction de tes objectifs.

  4. #4
    Nappa

    Re : différence entre compilateurs CCS et High-tech au niveau de la gestion d'interruption

    bonjour à tous,



    Citation Envoyé par thm Voir le message
    Moi, ce qui m'énerve, c'est :
    A 99% des cas, la raison d'une erreur ou d'un warning est explicitement indiquée; mais bon c'est plus facile de balancer le code pour que les autres cherchent le problème.. que de lire et d'essayer de comprendre les messages d'erreur (qui sont pourtant là pour çà)
    je n'ai eu aucune erreur ou warning lors de la compilation de mon code.



    Citation Envoyé par thm Voir le message
    - 3 les gens qui n'ont pas l'air de maitriser le sujet (et qui espère gagner du temps en soumettant - ou reportant - leur ignorance ou incapacité aux autres; ça ne marche pas )
    je vais m'abstenir de te répondre.


    Citation Envoyé par thm Voir le message
    , ici en l'occurrence les interruptions.. à revoir donc dans la datasheet ou le cours de bigonoff.
    th.
    je suis déjà passé par la section Interruption de la partie1_rev 13 du cours de Bigonoff avant de venir ici, j'avoue que cela m'a aidé à comprendre certaines choses, mais ne m'a pas été d'une très grande aide vu que je ne programme qu'en C.


    au fait, je ne vous ai pas demandé de corriger mon code, j'ai simplement voulu comprendre grossomodo la différence entre les outils de deux compilateurs au syntaxes différents au niveau de la gestion d'interruptions (j'ai posté un code d'interruption sur INT/RB0 de chacun).

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

    Re : différence entre compilateurs CCS et High-tech au niveau de la gestion d'interruption

    Citation Envoyé par microchip Voir le message
    Bonsoir,

    Hitech = compilateur ANSI-C
    CCS = compilateur C (non ANSI)

    Avec CCS, on peut pratiquement "ignorer" les registres SFR car des fonctions prédéfinies (non ANSI) existent pour virtualiser le processeur.

    Résultat : si on utilise CCS, il faut utliser les fonctions prédéfinies mais le logiciel ne sera pas portable sur d'autre compilateurs C. De même on ne pourra par réutiliser des logiciels écrits avec d'autres compilateurs C.
    C'est un choix à faire qui a des avantages et des inconvénients en fonction de tes objectifs.
    merci pour ta réponse microchip.

Discussions similaires

  1. la difference de niveau entre la 1ereS et le TleS est il important??
    Par invite95444b7e dans le forum Orientation avant le BAC
    Réponses: 22
    Dernier message: 11/01/2009, 12h05
  2. différence entre analyse fonctionnelle de niveau 1 et 2 ??
    Par canary dans le forum Technologies
    Réponses: 1
    Dernier message: 15/01/2007, 19h50
Découvrez nos comparatifs produits sur l'informatique et les technologies.