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
jkhgkj schrieb: > Irgendwie steh ich da jetzt auf der Leitung. Würdet ihr da eine globale > Variable setzen oder kann man die vermeiden. globale Variable. Anders geht es nicht. volatile nicht vergessen.
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
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 | }
|
ich weiß ja nicht was du eigentlich willst, aber du darfst z.B. auch 2 counter(-Variablen) verwenden
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; |
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
>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.
hallooooo schrieb: > 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. der Compiler übersetzt die Quellen einzeln, d.h. wenn du in einer eine Variable deklarierst, kennt er sie in der anderen deswegen noch lange nicht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.