Forum: Compiler & IDEs IF THEN im Timer Interrupt Mage128


von Marcus (Gast)


Lesenswert?

timer.c

#include <avr/io.h>
#include <avr/interrupt.h>
#include "timer.h"
#include "opti.h"

//Hier wird als Taktsignal ein Uhrenquarz genutz.

void init_timer1()
{
  int temp0,temp1;
   for(temp0=0;temp0<0x0040;temp0++)
    {
        for(temp1=0;temp1<0xFFFF;temp1++);
    }
    DDRB=0xFF;
    TIMSK &=~((1<<TOIE0)|(1<<OCIE0));
    ASSR |= (1<<AS0);

    TCNT0 = 0x00;
    TCCR0 = 0x05;
    while(ASSR&0x07);
    TIMSK |= (1<<TOIE0);
}


SIGNAL( TIMER0_OVF_vect )
 {

if(fix==1)
{
PORTLEDC ^=(1<<LED1); //soll blinken wenn fix=1 macht er nicht

}
PORTLEDC ^=(1<<LED2);//Blinkt alle 1 sec als test ob der INteruppt
auslöst macht er

}

timer.h
void init_timer1();
static volatile short fix=0;

fix ist in der headerdatei des Timers deklariert



wenn ich in einer funktion den Wert fix=1 setze müsste doch beim
nächsten auslösen des Interrupts die LED1 blinken???

von Karl heinz B. (kbucheg)


Lesenswert?

> static volatile short fix=0;
> fix ist in der headerdatei des Timers deklariert

Dort sollte es aber nicht sein
oder aber das 'static' sollte da nicht davor stehen.

Entweder du willst die Variable tatsächlich 'static' haben,
dann gehört diese Variablendefinition in das zugehörige *.c
File. Den das static sorgt ja dafür, dass der Scope dieser
Variablen auf genau diese eine Datei eingeschränkt wird.
Im Extremfall, und ich vermute mal das ist genau das was bei
dir passiert, hat so jede *.c Datei, die timer.h inkludiert
ihre eigene, ganz persönliche Variable namens 'fix'.

Oder aber du willst die Variable tatsächlich ins Headerfile
haben, weil es eine globale Variable sein soll, dann macht man
das anders:

Im Header-File

timer.h
*******
  extern volatile short int fix;

und in einer, und nur einer C-Datei:

timer.c
*******
#include "timer.h"
volatile short int fix = 0;

...

von Marcus (Gast)


Lesenswert?

Hallo

Alles Klar hat funktioniert besten Dank .

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.