Forum: Mikrocontroller und Digitale Elektronik Interrupt Variable übergeben


von Markus P. (sebastianwurst)


Lesenswert?

Ich habe im Header der main.c folgende Deklaration:
1
#include "usart.h"
2
3
extern uint8_t u8_Uebergabe;

in der usart.h
1
volatile uint8_t u8_Uebergabe;

und das in der ISR:
1
ISR (TIMER1_COMPA_vect)
2
{
3
   usart_write_int(u8_Uebergabe);

und ich krieg immer diese Meldung:
1
In file included from main.c:26:
2
usart.h:32: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'u8_Uebergabe'

Ich hab schon so viele Kombinatioonen durch, wie muss ich denn eine 
Variable anlegen damit ich die in eine ISR übertragen kann?
Global und volatile aber wie genau ?!??! Kriege es selbst durch try and 
error nich hin...
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Schau in Zeile 32 der usart.h, vermutlich n Tippteufel

Oder fehlt ein #include <stdint.h> im Header?
von Ingo (Gast)


Lesenswert?

Lad doch mal die Files hoch...



Ingo
von dummschwaetzer (Gast)


Lesenswert?

probiere mal:
in uart.h: nichts
in uart.c: volatile uint8_t u8_Uebergabe;
in den Dateien, in denen du auf u8_Uebergabe zugreifst:
extern uint8_t u8_Uebergabe;
von Werner B. (werner-b)


Lesenswert?

A) Ein
1
volatile uint8_t u8_Uebergabe;
hat in einer Headerdatei überhaupt nichts zu suchen.
Das gehört in ein .c File, da andernfalls in in jeder Datei die das 
Headerfile einbindet Speicherplatz für die Variable u8_Ubergabe 
reserviert wird.

In dem Header File (und "normalerweise" nur in Einen) muss die 
Variable dann als extern deklariert werden.
 ==>
.c File:
1
volatile uint8_t u8_Uebergabe;
Header File:
1
extern volatile uint8_t u8_Uebergabe;

B) Der Datentyp uint8_t wird in <stdint.h> definiert.
von Fr N. (frn)


Lesenswert?

Werner B. schrieb:
> In dem Header File (und "normalerweise" nur in Einen) muss die
> Variable dann als extern deklariert werden.
dann ist aber u8_Uebergabe global.
Meiner meinung nach besser:
1
returntyp subfuntion1(ubergabewerte)
2
{
3
  extern volatile uint8_t u8_Uebergabe;
4
  ...
5
}
6
7
returntyp subfuntion2(ubergabewerte)
8
{
9
  extern volatile uint8_t u8_Uebergabe;
10
  ...
11
}
12
13
returntyp subfuntion3(ubergabewerte)
14
// hier wird u8_Uebergabe nicht verwendet
15
{
16
  ...
17
}
von Werner B. (werner-b)


Lesenswert?

Und zu was soll das gut sein? Global sichtbar ist das Symbol trotzdem.
Das ist nichts anderes als Augenwischerei. Wer im .map File nachsieht 
wird es dort auch finden.
von Markus P. (sebastianwurst)


Angehängte Dateien:

Lesenswert?

Hallo, schonmal vielen Dank für die Tips, aber leider bin ich noch nicht 
zum Ergebnis gekommen.
Ich habe da mal meine files angehängt. Vielleicht liegt der Fehler doch 
woanders....
von Frank L. (franklink)


Lesenswert?

Hallo Markus,
in der usart.h stehen folgende Zeilen:
1
volatile unsigned int buffercounter;
2
volatile uint8_t u8_Uebergabe;

mach da mal wie weiter oben schon beschrieben, das hier draus:
1
extern volatile unsigned int buffercounter;
2
extern volatile uint8_t u8_Uebergabe;

jetzt kannst Du die Header-datei per innklude überall einbinden und Dir 
stehen diese beiden Variablen zur Verfügung.

Gruß
Frank

[edit]
und nimm bitte die Zeile:
1
extern uint8_t u8_Uebergabe;

aus der Main.c heraus.
von Markus P. (sebastianwurst)


Lesenswert?

Das geht auch nicht...
Der "buffercounter" muss doch auch garnicht extern werden?!?!
Brauch doch nur den u8_Uebergabe extern da er in der ISR verwendet wird. 
Trotzdem kommen diese Fehler noch:
1
In file included from main.c:26:
2
usart.h:32: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'u8_Uebergabe'
3
main.c: In function 'main':
4
main.c:1426: warning: pointer targets in passing argument 1 of 'parse' differ in signedness
5
main.c:1436: error: 'u8_Uebergabe' undeclared (first use in this function)
6
main.c:1436: error: (Each undeclared identifier is reported only once
7
main.c:1436: error: for each function it appears in.)
8
main.c: In function '__vector_13':
9
main.c:1476: error: 'u8_Uebergabe' undeclared (first use in this function)
von Tom M. (tomm) Benutzerseite


Lesenswert?

Liegt an der Reihenfolge der includes. Zuerst die System-Includes 
einbinden, dann deine eigenen. Du hast jetzt das Problem, dass der Typ 
uint8_t nicht bekannt ist. Der wird nämlich erst durch
1
 #include <stdint.h>

definiert, aber die bindest du leider erst nach der Include der uart.h 
ein...
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.