mikrocontroller.net

Forum: PC-Programmierung Arduino Globale Variable in Header File


Autor: Bert S. (kautschuck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich habe auf einem ESP32-WROVER ein Projekt am laufen und habe bereits 
FreeRTOS integriert. Nun brauche ich ein paar Queues und muss die 
irgendwo global deklarieren, also habe ich für den Task, der die Queues 
abarbeitet, die Queues im Header deklariert. Nun kommt aber immer die 
Fehlermeldung:

sketch\ESP32_WROOVER.ino.cpp.o:(.bss.debug_queue+0x0): first defined 
here
sketch\WLAN_Manager.cpp.o:(.bss.rs485_queue+0x0): multiple definition of 
`rs485_queue'
sketch\ESP32_WROOVER.ino.cpp.o:(.bss.rs485_queue+0x0): first defined 
here

Dabei habe ich die rs485_queue in allen anderen Header files als extern 
eingefügt (ohne extern nur in einem Header file), ausser beim 
ESP32_WROOVER.ino.cpp, da ich nicht genau weiss, wie sich das eigentlich 
zusammensetzt. Jemand eine Idee, was genau ich da tun kann?

: Bearbeitet durch User
Autor: Chaos Programmierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In Header Files definiert man keine Variablen. Nein
das tut man nicht. Punkt.

Variablen definiert man in einem C File in der geeigneten
Hierarchie-Position als nicht-static und bezieht sich in
den anderen Sourcen (nicht Headern) mit "extern" darauf.

Autor: Εrnst B. (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bert S. schrieb:
> Dabei habe ich die rs485_queue in allen anderen Header files als extern
> eingefügt (ohne extern nur in einem Header file),

Muss genau andersherum sein. Im Header mit "extern", in einem 
Source-File ohne.

Autor: Bert S. (kautschuck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chaos Programmierer schrieb:
> static

Danke, war genau das was ich brauche. Das macht man normalerweise schon 
nicht so, aber bei geteilten xQueues sehe ich nicht viele andere 
Möglichkeiten.

Autor: Vincent H. (vinci)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chaos Programmierer schrieb:
> In Header Files definiert man keine Variablen. Nein
> das tut man nicht. Punkt.

Doch seit 2017 tut man das.

https://en.cppreference.com/w/cpp/language/inline

: Bearbeitet durch User
Autor: Carl D. (jcw2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vincent H. schrieb:
> Chaos Programmierer schrieb:
>> In Header Files definiert man keine Variablen. Nein
>> das tut man nicht. Punkt.
>
> Doch seit 2017 tut man das.
>
> https://en.cppreference.com/w/cpp/language/inline

So man die richtige Compiler-Version (z.B. GCC >=7) hat.

Edit: davor könnte Attribute "weak" funktionieren.
  RTOS_Queue myQueue __attribute__ ((weak));

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.