Interrupt Variable übergeben

OP #2468379
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...
#2468762
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.
#2468862
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
}
#2469824
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.
OP #2470115
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)

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