• [^] # Re: E_NOENOUGH_INFO | E_UNNEEDED

    Posté par . En réponse au message Volatile, struct et interruptions.. Évalué à 2.

    En effet, il faut sauvegarder le SREG avant de désactiver les IT pour ne pas perdre le SREG
    C'est un exemple à la RACHE. (j'ai même introduit un bug: c'est align(512) pour l'alignement du buffer)
    sur les softs que j'ai en production actuellement, je n'ai que des buffers de 256bytes pour les AVR, donc moins de données en format 16bits: ce code est extrait d'un prototype qui fonctionne très bien.

    sur les uC qui gèrent plus que l'interruption UART, j'utilise plutôt des macros du genre:

    #define AVR_ENTER_CRITICAL_REGION() volatile u8 saved_sreg = SREG;IT_ALL_DISABLE;
    #define AVR_LEAVE_CRITICAL_REGION() SREG = saved_sreg;

    Je conseille de ne surtout pas réactiver les interruptions dans les routines d'interruption en utilisant ces macros si on ne sait pas gérer les interruptions imbriqués ("nested") et attention à l'explosion de la pile avec la réentrance... etc.

    a2g