Forum: Mikrocontroller und Digitale Elektronik Arduino IDE 1.8.10 - wohin eigene libraries?


von Egonwalter M. (heiner1234)


Angehängte Dateien:

Lesenswert?

Hallo

Ich möchte mit der Arduino-IDE 1.8.10 ein file kompilieren, das ich 
bislang mit AVRStudio 4.18 kompiliert habe (für dieses file habe ich mir 
ein paar eigene libs mit entsprechenden Header-files geschrieben).

Ich habe dieses file mit den zugehörigen selbsgeschriebenen libs und den 
Header-files in ein Arduino Directory kopiert (Name des Directory und 
Name des C-files stimmen natürlich überein). Das C-file ist in AVRStudio 
- Art geschrieben (mit main()) - mein C-file enthält also kein Arduino 
spezifisches loop() oder setup()).
(file aufgebaut wie in 
https://www.mikrocontroller.net/articles/Umstieg_von_Arduino_auf_AVR)

Wenn ich nun das file mittels "Überprüfen/Kompileren" checke, erhalte 
ich sehr viele Fehlermeldungen, die sich auf meine libs beziehen - siehe 
Anhang "Fehlermeldungen.txt" ("...undefined reference to..")

Im AVRStudio läßt sich mein file problemlos kompilieren.

Ich würde es aber gerne mittels Arduino-IDE kompilieren und dann mittels 
"Hochladen" auf das UNO Board laden.

Frage also: wohin müssen die libs und die Header files?

Vielen Dank

von Schlaumaier (Gast)


Lesenswert?

Ich hab meine im Unterverzeichnis " libraries " des Hauptprogramm von 
Arduino.

Also "c:\Arduino\Arduino.exe"  <- Hauptprogramm

"c:\Arduino\libraries\"  <- libraries

"c:\Arduino\libraries\LiquidCrystal"  <- libraries LiquidCrystal

Darin befindet sich das alles was in den Zip-Päckchen drin war von 
Github.
inkl. Paket-zugewiesene Unterorder.

funktioniert so einwandfrei unter Win-7.

von Wolfgang (Gast)


Lesenswert?

Egonwalter M. schrieb:
> Das C-file ist in AVRStudio
> - Art geschrieben (mit main()) - mein C-file enthält also kein Arduino
> spezifisches loop() oder setup()).

Die Arduino IDE verwendet selber einen File mit der Funktion main(), die 
du normalerweise aber nicht zu sehen bekommst. Aus dieser heraus werden 
loop() und setup() die du in einem Arduino Sketch findest, aufgerufen. 
Dein Code darf also kein zusätzliches main() enthalten, wenn du ihn in 
der Arduino IDE übersetzen willst. Sonst bekommst du ein Problem.

von Schlaumaier (Gast)


Lesenswert?

Kleiner Nachtrag:

Aus vielen Gründen besonders inkompatibel unter Versionen, habe ich für 
JEDE Arduino-Version ein eigenes Verzeichnis mit eigenen 
Unterverzeichnissen.

Ich habe einige Prg. geschrieben die unter der 1 Arduino-Version 1a 
laufen und unter den Nachfolger mir die Fehlermeldung um die Ohren 
fliegen.

Deshalb mein Tipp. Dokumentiere am besten im Header als Kommentar mit 
welcher Version du das erstellt und getestet hast.

Ist übrigens mit ein Grund wieso ich auf B4X umgestiegen bin.

von Einer K. (Gast)


Lesenswert?

Egonwalter M. schrieb:
> Frage also: wohin müssen die libs
Die eigenen Libs gehören in sketchbook/libraries
Dieser Platz ist dafür vorgesehen.

Schlaumaier schrieb:
> Ich hab meine im Unterverzeichnis " libraries " des Hauptprogramm von
> Arduino.
Das ist für die mitgelieferten unspezifischen Libraries vorgesehen, und 
sollte man auch so belassen.


Dazu gibt es Hardwarespezifische Libs in den jeweiligen Ordnern mit den 
Hardware Definitionen.
z.B. für AVR ESP STM32 SAM



Wolfgang schrieb:
> Dein Code darf also kein zusätzliches main() enthalten, wenn du ihn in
> der Arduino IDE übersetzen willst. Sonst bekommst du ein Problem.
Das ist so konsequent nicht wahr!
Wenn man setup() und loop() weg lässt, kann man sehr wohl eine eigene 
main() verwenden. Muss dann allerdings auch auf einige Arduino Features 
verzichten.

Egonwalter M. schrieb:
> (für dieses file habe ich mir
> ein paar eigene libs mit entsprechenden Header-files geschrieben).

Lesestoff:
https://arduino.github.io/arduino-cli/latest/library-specification/
evtl. auch: 
https://arduino.github.io/arduino-cli/latest/platform-specification/

von Manfred (Gast)


Lesenswert?

Schlaumaier schrieb:
> Aus vielen Gründen besonders inkompatibel unter Versionen, habe ich für
> JEDE Arduino-Version ein eigenes Verzeichnis mit eigenen
> Unterverzeichnissen.

Das macht man sinnvollerweise portabel, legt also manuell den Ordner 
\portable\ an, damit die IDE die Finger von den Benutzerordnern lässt.

In dem Falle gehören zusätzliche Libs nach
..\Arduino_IDE_189\portable\sketchbook\libraries

> Ich habe einige Prg. geschrieben die unter der 1 Arduino-Version 1a
> laufen und unter den Nachfolger mir die Fehlermeldung um die Ohren
> fliegen.

Das Problem kenne ich, dessen Ursache konnte ich nicht ergründen.

von Schlaumaier (Gast)


Lesenswert?

Manfred schrieb:
> Das Problem kenne ich, dessen Ursache konnte ich nicht ergründen.

Dann sind wir schon 2. ;)

Aber wie bereits erwähnt, bin ich auf b4x umgestiegen, da habe ich dann 
eher das Problem eine Arduino-Libs "anzupassen" für b4x.

Aber was lüpt das lüpt.

von Michael D. (nospam2000)


Lesenswert?

Schlaumaier schrieb:
> Deshalb mein Tipp. Dokumentiere am besten im Header als Kommentar mit
> welcher Version du das erstellt und getestet hast.

Mein Vorschlag: nimm PlatformIO mit VisualStudio Code.
Die Versionen der verwendeten Platform (z.B. Arduino) und der Libraries 
definierst du fest in der platformio.ini

Du verwendest die selben Libraries und schreibst denselben Code, nur die 
Verwaltung und der Editor ist besser.

Sieht dann z.B. so aus:
1
lib_deps_generic_external =
2
  lsatan/SmartRC-CC1101-Driver-Lib @ 2.5.6
3
  joaolopesf/RemoteDebug @ 3.0.5
4
5
#platform_version_esp32 = platformio/espressif32@1.11.1 ; using Arduino core 1.0.4
6
platform_version_esp32 = platformio/espressif32@3.2.0

Das ganze funktioniert dann auch auf jedem anderen Rechner, die 
entsprechenden Lib Versionen werden beim build automatisch runtergeladen 
(Projektspezifisch).

Die Arduino IDE installiert die Libs immer global. Wenn du zwei Projekte 
hast welche unterschiedlichen Library Versionen wollen oder das auf 
einem anderen Rechner oder 6 Monate reproduzieren willst, hast du viel 
Spass.

> Ist übrigens mit ein Grund wieso ich auf B4X umgestiegen bin.

Kenne ich nicht, den Grund kann ich aber gut nachvollziehen!

  Michael

: Bearbeitet durch User
von Schlaumaier (Gast)


Lesenswert?

Michael D. schrieb:
> Kenne ich nicht, den Grund kann ich aber gut nachvollziehen!

www.b4x.com  Basiert auf Visual-Basic Technik.

Der Trick ist, man kann Arduinos, Raspberry, Android + IOS mit ein und 
der selben Grundlagen-Software programmieren.

Man muss halt nur die passende IDE nehmen und logoweis die passenden 
Libs einbinden.  Das geniale an der Idee ist, man muss NICHT 4 
verschiedene Programmiersprachen lernen. Die IDE/Compiler rechnet den 
Code in die passende Sprache  um.

Was eigentlich der Hauptgrund war wieso ich umgestiegen bin,  BASIC kann 
ich im Schlaf, C geht so, Java-Zeug nicht wirklich.  Ergo nur wie üblich 
ein paar neue Befehle/Aufrufe lernen und das war's.

Kannst dir die HP mal ansehen. Ist alles außer IOS (da will apple kohle) 
Kostenlos.

von Manfred (Gast)


Lesenswert?

Michael D. schrieb:
> Die Arduino IDE installiert die Libs immer global.

Nur dann, wenn man sie sie lässt.
Manfred schrieb:
> Das macht man sinnvollerweise portabel, legt also manuell den Ordner
> \portable\ an, damit die IDE die Finger von den Benutzerordnern lässt.
>
> In dem Falle gehören zusätzliche Libs nach
> ..\Arduino_IDE_189\portable\sketchbook\libraries

> Wenn du zwei Projekte hast welche unterschiedlichen Library Versionen wollen

Dann hat man heftigen Ärger.

> oder das auf einem anderen Rechner

Ich betreibe mehrere PCs und habe kein Problem, die komplette IDE zu 
kopieren und zu nutzen.

> oder 6 Monate reproduzieren willst, hast du viel Spass.

Das kann ich bestätigen: Ein Gerät nach zwei Jahren nochmal anfassen, 
eine simple Korrektur - und schon war der Nachmittag um :-(

von Egonwalter M. (heiner1234)


Lesenswert?

Hallo

Vielen Dank für Eure Tipps - speziell die von Arduino Fanboy D. (ufuf); 
mit den von Dir aufgeführten links:

Lesestoff:

https://arduino.github.io/arduino-cli/latest/library-specification/

evtl. auch:

https://arduino.github.io/arduino-cli/latest/platform-specification/

müsste ich wohl in der Lage sein, das mit den libs funktionsfähig zu 
bekommen.

: Bearbeitet durch User
von Michael D. (nospam2000)


Lesenswert?

Manfred schrieb:
> Ich betreibe mehrere PCs und habe kein Problem, die komplette IDE zu
> kopieren und zu nutzen.

Es gibt auch Projekte wo mehrere Personen zusammenarbeiten (z.B. 
luftdaten.info). Dort werden builds auch auf einem Build-Server 
ausgeführt.

Da möchte man schon gerne die Library und Platform Versionen im Projekt 
festgelegt haben.

Ich möchte das nicht mehr missen.

  Michael

von Einer K. (Gast)


Lesenswert?

Egonwalter M. schrieb:
> müsste ich wohl in der Lage sein, das mit den libs funktionsfähig zu
> bekommen.
Das denke ich auch.

Und wenn es damit Probleme gibt, dann lass mir den Kram doch mal 
zukommen.

von Egonwalter M. (heiner1234)


Lesenswert?

Hallo Arduino Fanboy D (ufuf)

Arduino Fanboy D. schrieb:


> Und wenn es damit Probleme gibt, dann lass mir den Kram doch mal
> zukommen.


Vielen Dank für Dein Angebot; dank Deiner links habe ich es geschafft - 
und es funktioniert!!

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.