Forum: Compiler & IDEs Arduino IDE zwei Sketche


von Content B. (Firma: Da) (contentblocker_da)


Lesenswert?

Gibt es eine Möglichkeit für ein Projekt das mit mehreren Prozessoren 
arbeitet die einzelnen Projekte durch "umschalten" auszuwählen?

Ich würde gerne den Sourecode vom Arduino UNO und einen STM32 Nucleo 
durch Auswählen des Bords auswählen.

Da beide Targets ein Hardware-Projekt ist, würde ich somit gerne beide 
Projekte als getrennte Sourcen in einem Sketch arbeiten.

Kann mir jemand bitte helfen welche Vorgehensweise ich machen muss?

Ich habe mit
#if defined(_AVR_ATmega328_)
#endif

zuerst versucht den entsprechenden Code zu verwenden. aber die 
precomp-direktive klappt nicht.

von arduinoleerer (Gast)


Lesenswert?

Da sieht man doch den Wink mit dem Zaunpfahl vielleicht
doch mal "richtig"  programmieren zu lernen und eine
"richtige" IDE zu verwenden.

von Joachim B. (jar)


Lesenswert?

Content B. schrieb:
> klappt nicht

klappt doch, nur muss man es richtig machen

entweder #if defined(_AVR_)
oder #if defined(ESP32)
oder #if defined(_AVR_ATmega1284P_)

fehlt evtl. das P?
#if defined(_AVR_ATmega328P_)

von Joachim B. (jar)


Lesenswert?

Joachim B. schrieb:
1
entweder #if defined(_AVR_)
2
oder #if defined(ESP32)
3
oder #if defined(_AVR_ATmega1284P_)
4
 
5
fehlt evtl. das P?
6
7
#if defined(_AVR_ATmega328P_)

von Content B. (Firma: Da) (contentblocker_da)


Lesenswert?

Joachim B. schrieb:
> Content B. schrieb:
>> klappt nicht
>
> klappt doch, nur muss man es richtig machen
>
> entweder #if defined(AVR)
> oder #if defined(ESP32)
> oder #if defined(AVR_ATmega1284P)
>
> fehlt evtl. das P?
> #if defined(AVR_ATmega328P)

Joachim B. schrieb:
> fehlt evtl. das P?


Nein, das geht eben nicht! Ich kann durch einfaches Serial.println("Chip 
1"); bzw Serial.println("Chip 2"); die unterscheidlichen Boards 
differenzieren. Aber beim Einbinden der .h gibt es dann Fehler wie die 
Meldung dass etwas nicht existiert. Entferne ich dann das andere 
Projektteil, lasse aber die #if defined stehen, so klappt es. Sobald 
jedoch ein Code beim anderen hinzu kommt, geht das compile shief

von J. S. (jojos)


Lesenswert?

Je nach Target werden unterschiedliche Toolchains verwendet. Ein Projekt 
mit verschiedenen Toolchains mag das Buildsystem nicht, ist aber auch 
sehr unüblich. Warum nicht zwei getrennte Projekte und den gemeinsamen 
Teil in eine Library packen?

von Christoph M. (mchris)


Lesenswert?

>Aber beim Einbinden der .h gibt es dann Fehler wie die
>Meldung dass etwas nicht existiert.

Zeig mal ein konkretes Beispiel.
Du musst die Files einbinden, die zum jeweiligen Prozessor passen.
Das kannst Du mit den Beispielen von Joachim tun.

Wenn du die zwei Hacken

Datei->Voreinstellungen->Ausfürhliche Ausgabe "Kopilierung" + 
"Hochladen"

setzt, siehst du auch, welchen Syntax die Compile-Switches tasächlich 
haben.

von Mayer (Gast)


Lesenswert?

Das wird nicht funktionieren! So einen Plan hatte ich auch schon. Habe 
auf einem Projekt zwei uC (ESP und AVR). Der Precompilerbefehl

#if defined(_AVR_ATmega8_)
#endif

#if defined(ESP32)
#endif

funktioniert nicht wenn man einen ganzen Sketch rein kopiert.

Bei mir war es plötzlich der Fehler dass die #include "SPIFFS.h" nicht 
funktionierte. Vermutlich ein Bug der IDE.

Also falls jemand eine Lösung hat wäre ich auch dankbar.

von Εrnst B. (ernst)


Lesenswert?

Ich würde dir empfehlen, das Projekt auf platformio (mit 
framework=arduino) umzustellen.

Da kannst du dann verschiedene "envs" für deine Prozessoren anlegen, 
wenn nötig mit "src_dir=..." auch jeder CPU einen eigenen Satz an 
Sources verpassen, und trotzdem das ganze auf einen Rutsch 
durchkompilieren.

https://docs.platformio.org/en/stable/projectconf/index.html

Als Bonus kriegst du deine Dependencies versioniert, es kann also nicht 
ein ungeplantes Library- oder Arduino-Core-Update dein Projekt 
lahmlegen.

von Content B. (Firma: Da) (contentblocker_da)


Lesenswert?

Guten Abend,

ich habe nun es geschafft meine zwei Sketche in eines einzubinden. Es 
war sehr kompliziert  für mich, aber am Ende gab es einen ganz einfachen 
Grund:
1
{
2
}


Εrnst B. schrieb:
> Ich würde dir empfehlen, das Projekt auf platformio (mit
> framework=arduino) umzustellen.

Sorry, aber du hast es leider nicht kapiert! Wenn die Farbe an der Wand 
nicht haftet, kaufst du auch kein neues Haus. Also weshalb so ein 
besheuerter Vorschlag?

von Εrnst B. (ernst)


Lesenswert?

Content B. schrieb:
> Sorry, aber du hast es leider nicht kapiert!

Hast du dir Platformio überhaupt angesehen?
Damit kannst du Arduino-Code Schreiben/Compilieren, Arduino-Bibliotheken 
verwenden und auch sonst alles machen, was dir die Arduino-IDE 
ermöglicht.

PLUS: Du kriegst eine vernünftige, gut versionierbare Verwaltung von 
Build-Environments, verschiedenen Targets/Boards, Bibliotheken usw.

IAW: So wie ich dein Problem verstanden habe, ein perfektes Werkzeug für 
dich.

Aber ich will dir da nichts einreden, mit einem Hammer kriegt man die 
Schraube ja auch irgendwie in die Wand.

von Content B. (Firma: Da) (contentblocker_da)


Lesenswert?

Εrnst B. schrieb:
> Hast du dir Platformio überhaupt angesehen?

Wieso sollte ich? Es ging um Arduino!

von Εrnst B. (ernst)


Lesenswert?

Content B. schrieb:
> Wieso sollte ich? Es ging um Arduino!

Deshalb habe ich es vorgeschlagen.
Das Arduino/Wiring-Framework ist nicht mit der Arduino-IDE verheiratet.

von Content B. (Firma: Da) (contentblocker_da)


Lesenswert?

Εrnst B. schrieb:
> Content B. schrieb:
>> Wieso sollte ich? Es ging um Arduino!
>
> Deshalb habe ich es vorgeschlagen.
> Das Arduino/Wiring-Framework ist nicht mit der Arduino-IDE verheiratet.

Nur der Vollständigkeit halber:

Im Beruf nutze ich PlatformIO und da kann ich diese Sketche so nutzen. 
Privat würde ich gerne das selbe auch mit der Arduino-IDE können. Dein 
Vorschlag, ich solle PlatformIO nutzen ist daher für die Tonne, da es 
dich überhaupt nicht zu interessieren scheint wieso ich das so will.

von Klaus H. (klummel69)


Lesenswert?

Content B. schrieb:
> Dein
> Vorschlag, ich solle PlatformIO nutzen ist daher für die Tonne, da es
> dich überhaupt nicht zu interessieren scheint wieso ich das so will.

Warum denn so pampig? Ich hätte Dir das gleiche empfohlen.
Die Info, dass du PlattformIO kennst und nutzt hast du uns nicht 
mitgegeben.

von Klaus H. (klummel69)


Lesenswert?

Content B. schrieb:
> Guten Abend,
>
> ich habe nun es geschafft meine zwei Sketche in eines einzubinden. Es
> war sehr kompliziert  für mich, aber am Ende gab es einen ganz einfachen
> Grund:
> {
> }

Ich verstehe Deine Antwort nicht. Warum/Wo hat ein Klammernpaar 
geholfen?

von Konstantin Opel (Gast)


Lesenswert?

Content B. schrieb:
> Beruf nutze ich PlatformIO

bla bla, dann würdest du nicht die Arduino IDE verwenden wollen.

von VD (Gast)


Lesenswert?

Content B. schrieb:
> Im Beruf nutze ich PlatformIO und da kann ich diese Sketche so nutzen.
> Privat würde ich gerne das selbe auch mit der Arduino-IDE können. Dein
> Vorschlag, ich solle PlatformIO nutzen ist daher für die Tonne, da es
> dich überhaupt nicht zu interessieren scheint wieso ich das so will.

Du bist aber unfreundlich. Fragst nach Ideen, und wenn Ideen kommen, die 
du auch ablehnen kannst und darfst, wenn es dir nicht passt, fährst du 
Menschen persönlich an. Menschen lesen über dein Scheißproblem, 
investieren Zeit und wollen dir helfen. Aber dir ist nicht mehr zu 
helfen. Und das hat mit Arduino nicht mehr zu tun.

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
Noch kein Account? Hier anmelden.