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
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.
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.
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.
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
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.
1 | RTOS_Queue myQueue __attribute__ ((weak)); |
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.