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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.