Timer Interrupt

Gast #2478619
Lesenswert?

Hallo

ich wollte einen CRC Timer Interrupt programmieren. Damit ich aber nicht 
mehrere Interrupts brauche wollte ich nur einen programmieren wo ich 
dann in die jeweilige Funktion einen Zähler setze.

Irgendwie steh ich da jetzt auf der Leitung. Würdet ihr da eine globale 
Variable setzen oder kann man die vermeiden.

Würde ich die Funktion im ISR ausführen könnte ich einen Zähler 
programmieren. Da ich den Zähler aber im main brauche wollte ich fragen 
was für ein Zeichen ich im ISR setzen könnnte um im Main den Zähler 
hochzuzählen.

MfG
Gast #2478664
Lesenswert?

Hi,

main.c
1
volatile unsigned char count=0;
2

3
while(1)
4
{
5
 // count auswerten
6
}


main.h
1
extern volatile unsigned char count;



timer.c
1
#include "main.h"
2

3
ISR ("COMPARE_MATCH")
4
{
5
   count++;
6
}


Grüße,
Ingo
Gast #2478700
Lesenswert?

Danke

Im main.c ist ja schon eine Deklaration, brauche ich das dann noch 
einmal im main.h mit extern.

Mich verwirrt jetzt dass auf diese Weise nie b() ausgeführt wird wenn 
das eine globale Variable ist.
1
a()
2
{
3
if (count == 5)
4
count=0;
5
}
6

7
b()
8
{
9
if (count == 10)
10
count=0;
11
}
12

13
ISR ("COMPARE_MATCH")
14
{
15
   count++;
16
}
Gast #2478886
Lesenswert?

Das ist auch eine Möglichkeit an die ich nicht gedacht habe.

Ich war darauf fixiert dass das Interrupt ein Signal sendet und zb. bei 
einer for-Schleife bzw. bei einem Counter in den Funktionen immer um 
eins weiter gezählt wird.

Braucht man eigentlich
1
extern volatile unsigned char count;

genügt nicht nur
1
volatile unsigned char count;
Gast #2478894
Lesenswert?

hallooooo schrieb:
> Mich verwirrt jetzt dass auf diese Weise nie b() ausgeführt wird wenn
> das eine globale Variable ist.

Wie denn auch? Du setzt ja count immer wieder auf 0 wenn sie 5 ist. Dann 
kann sie ja garnicht 10 werden.

Am Besten für sowas immer ein Interval auf 2^n Basis nehmen:
1
if(count%2)
2
{
3
  ...;
4
}
5

6
if(count%4)
7
{
8
  ...;
9
}
Dann brauchste count nicht löschen.

> Braucht man eigentlich
> extern volatile unsigned char count;
> genügt nicht nur
> volatile unsigned char count;

Ja, du musst deiner timer.c ja mitteilen, dass es diese variable gibt.
Guck ma ins GCCTutourial.


Grüße,
Ingo
Gast #2478941
Lesenswert?

>Ja, du musst deiner timer.c ja mitteilen, dass es diese variable gibt.
>Guck ma ins GCCTutourial.

Eine globale Variable ist ja wenn ich sie außerhalb von main deklariere. 
Somit müßte ja die Variable auch für alle anderen Dateien bekannt sein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren