Interrupt Variable übergeben

OP #2468379
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...
Gast
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;
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.
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
}
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
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)
Persönliche Seite
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...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.