Zitat Zitat von TobiKa Beitrag anzeigen
Du meinst also das cli(); sollte besser noch eine Zeile früher kommen?
Könnte man so machen, aber dann muss man auch das sei() aus dem if raus ziehen, weil ja sonst die Interrupts im False-Fall abgeschaltet blieben. Ich persönlich würde das nicht machen, weil dann nämlich im True-Fall die Interrupts viel länger abgeschaltet wären, als nötig. Das muss keine Auswirkungen haben (hätte es in diesem einfachen Fall auch nicht), aber besser man gewöhnt sich gleich an, Interrupts immer nur so kurz wie möglich abzuschalten. Bei mir sähe es in etwa so aus:
Code:
#include <util/atomic.h>
   
 
void make_time (void) {

    int16_t tmp_msec;

    ATOMIC_BLOCK (ATOMIC_RESTORESTATE) {
        tmp_msec = g_msec;
    }

    if (tmp_msec > 999) {

        ATOMIC_BLOCK (ATOMIC_RESTORESTATE) {
            g_msec -= 1000;
        }

        g_sec++;
        g_send=1;
        PORTA ^= (1 << PINA0);
        if (g_sec > 59){
            g_sec = 0;
            g_min++;
            PORTA ^= (1 << PINA1);
            if (g_min > 59){
                g_min = 0;
                g_h++;
                PORTA ^= (1 << PINA2);
                if (g_h > 23){
                    g_h = 0;
                    g_d++;
               }
            }
        }
    }
}