[Arduino IDE] Feinheiten und Tricks

harryberlin:
hmm, das flag -Os ist ja eigentlich entsprechend gesetzt

Man kann das Universum natürlich auf einen Parameter reduzieren.
Aber mit der Realität hat das dann wenig zu tun.

ok, wenn nötig, dann bitte aufräumen.

RudiDL5:
Zum Thema „Erleichterungen bei der Bedienung der IDE" hätte ich vielleicht noch etwas beizusteuern:

Individuelle Farbeinstellungen für den Editor

Vielen Dank für den Tipp. Hier gibt es übrigens gleich ein fertiges Dark Theme zum runterladen: Dark Theme for Arduino IDE

Sieht dann nach ein paar weiteren Modifikationen so aus:

Nur mit der Farbe für for, if, usw. bin ich nicht so happy, aber ich finde die entsprechende Einstellung nicht. Scheint nicht in der theme.txt zu sein.

hi combie,

combie:

  • Ich möchte gerne die öffnenden und schließenden Blockklammern, in jeweils der gleichen Spalte.

So sieht sie dann aus:

#include <Streaming.h>

void setup()
{
  Serial.begin(9600);
  Serial << "Start: "<< FILE << endl;
}

void loop()
{

}

Das ist aber dann nur in der Vorlage für die zwei Klammerpaare gültig.
Um das auf Dauer festzulegen, musst Du A1 oder A15 vorgeben. Je nachdem, was mit der nächsten Ebene passieren soll.

Und hier die Lösung fürs Theme:

Mahimus:
Nur mit der Farbe für for, if, usw. bin ich nicht so happy, aber ich finde die entsprechende Einstellung nicht. Scheint nicht in der theme.txt zu sein.

Doch.
Für den ersten Versuch geh in die Sektion

STRUCTURES

ändere die Zeile:
editor.reserved_word.style = #5E6D03,plain <-- So ist sie im Original-->
in
editor.reserved_word.style = #FF0000,plain

speichern.
Arduino starten - vielleicht mit einem umfangreichen Sketch.

Achte genau drauf, was passiert ist.

Da ich annehme, das Dir das nicht gefällt, kannst Du das verfeinern.
Setze die vorige Einstellung zurück.
Schreibe darunter eine neue Zeile in die theme.txt:
editor.reserved_word_3.style = #FF0000,plain

Dann such Dir im lib-Verzeichnis die keywords.txt
Such Dir die Sektion: # KEYWORD3 specifies structures
Mach da wo Du es willst aus RESERVED_WORD -> RESERVED_WORD_3

Happy.

my_xy_projekt:
Das ist aber dann nur in der Vorlage für die zwei Klammerpaare gültig.
Um das auf Dauer festzulegen, musst Du A1 oder A15 vorgeben. Je nachdem, was mit der nächsten Ebene passieren soll.

Besoldungsordnung A ?

combie:
Besoldungsordnung A ?

Och combie,

ich dachte das Du soweit drin bist ....

Na dann:
astyle A1 oder A15
http://astyle.sourceforge.net/

Und für diejenigen, die sich hier Tipps und Tricks suchen und bisher nur Bahnhof verstanden:
In der formatter.conf, die sich unter ~/arduino[version]/lib/ befindet, können alle Einstellungen vorgenommen werden, die bei einem Druck auf STRG-T (bzw. den Menupunkt automatische Formatierung) durchgeführt werden.

Bei Sourceforge gibt es eine Beschreibung, welche Einstellungen möglich sind.
Diese reichen von Einrückungen der Ebenen, über die Behandlung von Tabulatoren etc. pp. bis hin zum genial formatierten und lesbaren Code.

Wichtiger Hinweis:
Es gibt verschiedene Möglichkeiten die Stylecommands einzubinden.
In meinem Beispiel bringen folgende Zeilen den gleichen Effekt in der formatter.conf:

style=allmann
A1

oder

style=vtk
A15

Wichtiger Hinweis 2
Die formatter.conf wird nur beim Start der Arduino.IDE einmalig eingelesen. Also unbedingt nach einer Änderung die IDE neu starten!!!

happy

Och combie,

ich dachte das Du soweit drin bist ....

Mal abgesehen, von dem voll dämlichen Spruch, bin ich dir für die Info sehr dankbar.

Hallo,

avr-gcc 9.4.0 und avr-gcc 11.2.0 sind fertig. Gebaut mit binutils v2.36.1. Gebe ich auf Anfrage raus. Ich habe keine öffentliche Ablage zur Verfügung.

Headerfiles aus dem Microchip Devicepacks
ATmega v1.7.374
ATtiny v1.10.348
AVR-Dx v1.9.103
sind folgende µC hinzugefügt.

Von der "alten" Serie der ATmega328PB.

Von den neuen Serien mit UDPI Programmierung:
ATtiny 202, 204, 212, 214
ATtiny 402, 404, 406, 412, 414, 416, 417
ATtiny 804, 806, 807, 814, 816, 817
ATtiny 1604, 1606, 1607, 1614, 1616, 1617
ATtiny 3216, 3217
ATtiny 1624, 1626, 1627
ATtiny 3224, 3226, 3227
ATmega 808, 809
ATmega 1608, 1609
ATmega 3208, 3209
ATmega 4808, 4809
AVR32DB28, AVR32DB32, AVR32DB48
AVR64DB28, AVR64DB32, AVR64DB48, AVR64DB64
AVR128DB28, AVR128DB32, AVR128DB48, AVR128DB64

Mittels

sind die neuen ATtinys und mittels

die neuen ATmegas mit der Arduino IDE programmierbar

Man benötigt noch einen UPDI Programmer.

Ein ATmega4809 befindet sich bspw. auf dem
Arduino Nano Every und Arduino Uno WiFi Rev2

Ansonsten wie gehabt zu #7.

Etwas mehr Uebersicht bei den COM Ports

Zum hochladen eines Programms auf einen Arduino wird man in der Regel den passenden COM Port auswählen müssen.
Arduinos mit 16U2, 8U2 und 32U4 erscheinen in der Port Auswahlliste mit dem Boardbezeichner
z.B. COM9(Arduino UNO)

Viele andere Boards erscheinen anonym, z.B. als COM14, COM15 usw.
Auch erscheinen in der Liste andere serielle Geräte, welche nichts, aber auch rein gar nichts, mit Arduino zu tun haben. Diese können sich sogar "verschlucken", wenn sie als Arduino angesprochen werden.
Es wäre also schön diese kennzeichnen zu können.
Im später folgenden Beispiel betrifft das zwei meiner DMX Kontroller/Interfaces.

Was macht Arduino?
Beim anzeigen der Portliste, schaut es sich die VID und PID des Seriellen USB Gerätes an, untersucht die eingebundenen Boarddefinitionen, und wenn die VID/PID dort gefunden wird, wird der Boardname im Auswahlmenü angezeigt.

Diesen Mechanismus kann man "ausnutzen" in dem man eigene unvollständige Boards anlegt.

Hier ein paar Beispiele um ansonsten anonym erscheinenden Seriell Adapter mit einem Namen zu versehen.
Der passende Ort ist eine selbst angelegte boards.local.txt, neben einer der schon vorhandenen boards.txt Dateien.

Inhalt (Beispielhaft):

# wenn schon nicht das Board erkannt wird, dann wenigstens der Schnittstellenbaustein
boardFTDI232R.name=Board mit FTDI232R
boardFTDI232R.build.board=BOARDFTDI232R
boardFTDI232R.hide=
boardFTDI232R.vid.0=0x0403
boardFTDI232R.pid.0=0x6001

boardCH340.name=Board mit CH340
boardCH340.build.board=BOARDCH340
boardCH340.hide=
boardCH340.vid.0=0x1A86
boardCH340.pid.0=0x7523


boardCP210n.name=Board mit CP2102/CP2104
boardCP210n.build.board=BOARDCP210N
boardCP210n.hide=
boardCP210n.vid.0=0x10C4
boardCP210n.pid.0=0xEA60

boardCP2108.name=Board mit CP2108
boardCP2108.build.board=BOARDCP2108
boardCP2108.hide=
boardCP2108.vid.0=0x10C4
boardCP2108.pid.0=0xEA71

boardbluepill.name=BluePill
boardbluepill.build.board=ARM_BOARDBLUEPILL
boardbluepill.hide=
boardbluepill.vid.0=0x0483
boardbluepill.pid.0=0x5740

boardmarple.name=STM32 Marple Bootloader
boardmarple.build.board=ARM_BOARDMARPLE
boardmarple.hide=
boardmarple.vid.0=0x1EAF
boardmarple.pid.0=0x0004

boardDMX512.name=DMX Adapter
boardDMX512.build.board=BOARDDMX512
boardDMX512.hide=
boardDMX512.vid.0=0x16C0
boardDMX512.pid.0=0x05DC
boardDMX512.vid.1=0x6244
boardDMX512.pid.1=0x0451


# Arduino DUE native USB Port
boardBossa.name=DUEnative/Bossa
boardBossa.build.board=ARM_BOARDBOSSA
boardBossa.hide=
boardBossa.vid.0=0x03EB
boardBossa.pid.0=0x6124



# Raspberry Pi Pico RP2040
rpipico.name=Raspberry Pi Pico
rpipico.build.board=RASPBERRY_PI_PICO
rpipico.hide=
rpipico.vid.0=0x2E8A
rpipico.pid.0=0x00C0



Ein billig Nano erscheint dann als COM33(Board mit CH340) in der Liste und ein originaler Nano als COM3(Board mit FTDI232R)

** die Zahlen hinter dem COM werden von Win vergeben, werden also bei dir anders sein

Nachtrag:
Der Menuepunkt "Werkzeuge->Boardinformationen holen" wird auch, zum Teil, aus diesen Einträgen gespeist.

Nachtrag:
Raspberry Pi Pico hinzugefügt.

1 Like

Danke, sehr nützlich und hilfreich!

Das musste ich sofort ausprobieren und siehe da, nun haben endlich auch meine Clon-Nanos (mit CH340) einen Namen, ebenso meine TTGO ESP32.

Gerade bei einem "Steuerrechner", wo mehrere USB-Serial-Geräte dran hängen, zusätzlich auch noch Buetooth (Serial) in Verwendung ist, kann die Port-Auswahlliste schon recht unübersichtlich werden.

Das ist wirklich eine "coole Sache" und eine echte Arbeitserleichterung!

Schön, dass es dir gefällt!

Gerade bei einem "Steuerrechner", wo mehrere USB-Serial-Geräte dran hängen, zusätzlich auch noch Buetooth (Serial) in Verwendung ist, kann die Port-Auswahlliste schon recht unübersichtlich werden.

Ja, so ähnlich siehts bei mir auch aus.
Ein halbes Dutzend erscheinen da immer.
Auch gerne mehr.

So viele habe ich nicht, aber ich empfinde diese Lösung als sehr angenehm.
Danke dafür.

Gruß Tommy

Nachtrag:
Oben die "build.board" Einträge hinzugefügt.
Ist nicht wichtig, aber vermeidet ein paar Meldungen.

combie:
Nachtrag:
Oben die "build.board" Einträge hinzugefügt.
Ist nicht wichtig, aber vermeidet ein paar Meldungen.

Perfekt!

Danke für's wieder aufmachen.
Hier die aktualisierten Files der boards.local.txt für esp8266-3.0.2 und esp32-1.0.6.

(ESP32)boards.local.txt.ino (3.8 KB)
(ESP8266)boards.local.txt.ino (1.5 KB)

Hier die aktualisierte Datei boards.local.txt für ESP32 2.0.4 mit COM-Port-Bezeichnungen:

boards.local.txt (4,4 KB)

Hallo,

Der x.te Anlauf um mich mit PlatformIO anzufreunden. Irgendwie war diesmal mehr Muse vorhanden. :wink:

Bild 01

Zeigt den versteckten Ordner worin PlatformIO laut meines Wissens all seine Toolchains ablegt.

In den Ordner 'packages" habe ich 2 meine Toolchains rüberkopiert. Die 10.2 und die 11.3 Version. Mit einer Pfadangabe wo diese eigentlich liegen habe ich es nicht hinbekommen, deswegen das Kopieren. Die Ordnernamen meiner beiden Toolchains habe ich umbenannt wie die anderen vorhandenen.

toolchain-atmelavr@1.1020.0
toolchain-atmelavr@1.1130.0

Das Entscheidende ist damit es überhaupt funktioniert sind die beiden Dateien .piopm und package.json in diesen Ordnern.

Siehe Bild 02

Beide Dateien kann man aus den vorhandenen Toolchains kopieren und ändert jeweils nur die Versionsangabe in beiden Dateien, alles andere darin lässt man in Ruhe. Also bei mir einmal auf "version": "1.1020.0", und die andere auf "version": "1.1130.0",

Als Arduino Board habe ich mein Nano Every verwendet. Um die eigene Toolchain u.v.m. einzubinden muss man die platformio.ini seines Projektes bearbeiten. Zuerst standardmäßig probiert, danach mit MegaCoreX Package. Mit dieser .ini wird das in PlatformIO schon integrierte MegaCoreX Package verwendet. Das hängt an den ersten 5 [env] Schlüsselwörtern und den 2 unteren 'upload' Schlüsselwörtern. Aktuell sieht es wie folgt aus. Die Streaming Lib bspw. muss man normal installieren dann wird die unterste Zeile automatisch eingefügt.

platformio.ini
[platformio]
default_envs = Upload_UPDI

[env]
platform = atmelmegaavr
framework = arduino
board = ATmega4809
board_build.f_cpu = 16000000L
board_build.variant = nano-every
build_unflags = 
    -std=gnu++11
    ;-std=gnu++14
    ;-std=gnu++17
build_flags = 
    --verbose
    -flto
    -std=c++20
monitor_speed = 250000
;platform_packages = toolchain-atmelavr@1.1020.0  ; ok
platform_packages = toolchain-atmelavr@1.1130.0  ; ok
;platform_packages = toolchain-atmelavr@C:/avrToolchain/avr-gcc-12.1.0_mingw32_binutils2.38  ; path or anything else not in okay

[env:Upload_UPDI]
upload_protocol = jtag2updi
board_upload.use_1200bps_touch = true
upload_flags = 
lib_deps = mikalhart/Streaming@^1.0.0

Um zu prüfen das die Toolchain auch wirklich verwendet wird inkl. C++20 Einstellung habe ich eine Funktion mit Spezifierer 'consteval' eingefügt. Kompiliert und das Ergebnis erscheint auch.

'verbose' verlangsamt "die Kompilierung", die Ausgabe bremst merklich. Nur als Info.

Wie ich die CppStdLib reinbekomme weiß ich allerdings noch nicht.
Falls jemand Hinweise hat ...

Edit:
Hier findet sich die Antwort zur letzten Frage.
Und hier findet man aktuelle Versionen.
avr-gcc 15.1.0

Die frischeste boards.local.txt für ESP32 findet sich hier: