Hallo zusammen, ich nutze nun seit einigen Monaten PlatformIO (Atom) zur AVR Programmierung. Ich bin etwas genervt von dem Arduino Framework. Es wird eine "main.cpp" Datei erstellt und der Compiler ist auf "avr_g++" gestellt. Bei jedem neuen Projekt muss man die Main umbenennen und den Compiler ändern. Zudem steht in der Main "setup" und "loop". Nutzt jemand von euch PlatformIO für die AVR Programmierung und hat sich schon mit der Template Thematik auseinander gesetzt? Evtl. könnte ich eine kleine Anleitung schreiben, wie man unter Linux eine Entwicklungsumgebung mit Atom und PlatformIO aufbaut. Gern würde ich hier auch auf Erfahrungen von eurer Seite zurück greifen. :) Dinera
Grundlegend hat PlatformIO nichts mit Arduino zu tun. Arduino hat auch nichts mit Atom zu tun. Das Problem sollte nochmal sachlich geschildert werden.
Also wenn ich auf der PlatformIO Home-Seite ein neues Arduino Projekt erzeuge, bekomme ich eine main.cpp mit folgendem Inhalt:
1 | #include <Arduino.h> |
2 | |
3 | void setup() { |
4 | // put your setup code here, to run once:
|
5 | }
|
6 | |
7 | void loop() { |
8 | // put your main code here, to run repeatedly:
|
9 | }
|
Dinera D. schrieb: > Ich bin etwas genervt von dem Arduino Framework. dito :) > Evtl. könnte ich eine kleine Anleitung schreiben, wie man unter Linux > eine Entwicklungsumgebung mit Atom und PlatformIO aufbaut. aber gerne, welcome > Nutzt jemand von euch PlatformIO für die AVR Programmierung und hat sich > schon mit der Template Thematik auseinander gesetzt? Ich bin immer noch auf der Arduino IDE und merke dass ich an Grenzen stoße. Templates würden mich generell interessieren. Gerade wenn man unterschiedliche devices hat, geht es schon z.B. mit dem Pinout oder angeschlossener Peripherie los. Ein paar Experimente mit verschachtelten #ifdef habe ich gefahren. Geht auf jeden Fall in die richtige Richtung, nur ein zentrales Handling o.ä. fehlt mir. Auch die Möglichkeiten von Split/Merge/Include wären interessant. Neuerding kommt der OTA include zum Einsatz. Diesen bräuchte ich quasi als Standard. Eine Kombination mit oben erwähnten wäre genial. Jedenfalls, würde ich gerne mehr erfahren. Sei es auch nur der Einstieg/Umstieg auf was anderes.
:
Bearbeitet durch User
Dinera D. schrieb: > Ich bin etwas genervt von dem Arduino Framework. Es wird > eine "main.cpp" Datei erstellt und der Compiler ist auf "avr_g++" > gestellt. Hae? Ja nun, Arduino ist nunmal C++. Wenn man es nicht mag, muss man es ja nicht benutzen.
Nimm doch einfach das "native blink" aus "examples" von "platform AVR": https://docs.platformio.org/en/latest/platforms/atmelavr.html#examples Das sieht dann so aus:
1 | /**
|
2 | * Copyright (C) PlatformIO <contact@platformio.org>
|
3 | * See LICENSE for details.
|
4 | */
|
5 | |
6 | #include <avr/io.h> |
7 | #include <util/delay.h> |
8 | |
9 | int main(void) |
10 | {
|
11 | // make the LED pin an output for PORTB5
|
12 | DDRB = 1 << 5; |
13 | |
14 | while (1) |
15 | {
|
16 | _delay_ms(500); |
17 | |
18 | // toggle the LED
|
19 | PORTB ^= 1 << 5; |
20 | }
|
21 | |
22 | return 0; |
23 | }
|
devzero schrieb: > Hae? Ja nun, Arduino ist nunmal C++. Wenn man es nicht mag, muss man es > ja nicht benutzen. Ja und genau das ist mein Problem. Es werden z.B. Die Registernamen nicht in C++ erkannt, weil der Compiler "avr-g++" als Standard herangezogen wird. Ich versuche nun seit 3 Wochen ein Framework zu basteln, das mir beim Laden eines neuen Projekts den Compiler "avr-gcc" und eine "main.c" erstellt. Ich bin leider kein Programmier-Crack, sonst wäre ich wahrscheinlich schon lange fertig. Mich nervt einfach der Workaround, dass ich jedes neue Projekt erst einmal anpassen muss, dass ich überhaupt ein Programm kompilieren kann.
Dinera D. schrieb: > Ich versuche nun seit 3 Wochen ein Framework zu basteln, das mir beim > Laden eines neuen Projekts den Compiler "avr-gcc" und eine "main.c" > erstellt. WTF? Wie oft am Tag erstellst Du ein neues Projekt? Mach Dir doch ein leeres Projekt das so konfiguriert ist wie Du es gerne magst und kopier das wenn Du es brauchst!? Und warum nimmst Du überhaupt eine Arduino IDE wenn Du gar kein Arduino willst?
:
Bearbeitet durch User
Dinera D. schrieb: > devzero schrieb: >> Hae? Ja nun, Arduino ist nunmal C++. Wenn man es nicht mag, muss man es >> ja nicht benutzen. > > Ja und genau das ist mein Problem. Es werden z.B. Die Registernamen > nicht in C++ erkannt, weil der Compiler "avr-g++" als Standard > herangezogen wird. > > Ich versuche nun seit 3 Wochen ein Framework zu basteln, das mir beim > Laden eines neuen Projekts den Compiler "avr-gcc" und eine "main.c" > erstellt. > > Ich bin leider kein Programmier-Crack, sonst wäre ich wahrscheinlich > schon lange fertig. > > Mich nervt einfach der Workaround, dass ich jedes neue Projekt erst > einmal anpassen muss, dass ich überhaupt ein Programm kompilieren kann. Warum du auf einem AVR C und nicht C++ machen willst erschliest sich mir nicht, ist aber bestimmt Geschmachssache. Aber wenn schon Urzeit dann bitte richtig, mit vi und asm ;) ;) ;)
:
Bearbeitet durch User
Dinera D. schrieb: > Ich versuche nun seit 3 Wochen ein Framework zu basteln, das mir beim > Laden eines neuen Projekts den Compiler "avr-gcc" und eine "main.c" > erstellt. Hast du es denn mal mit dem von mir verlinkten "native blink" Beispiel versucht? Das dürfte ziemlich genau das machen, nach was du suchst.
Ich verstehe dein Gemecker auch nicht. Warum verwendest du das Arduino Framework wenn es dich nervt? Dann nimm es doch nicht. Wenn du Probleme mit den Registernamen hast, dann liegt das eher an dir. Es fehlen sicherlich paar includes. Wenn man kein Framework wie zum Bsp. Arduino verwendet, dann muss man sich um alles selbst kümmern. Man kann dann aber nicht die Schuld einen anderen in Schuhe schieben. Klappt einfach nicht. Und wenn du main.cpp bekommst statt main.c dann wirst du wohl schon bei der Projekterstellung etwas falsch auswählen. Wenn man in platformIO bei der Projekterstellung nicht zwischen C und C++ und anderen auswählen kann, was ich nicht so recht glauben mag, ja dann wäre platformIO sowieso Mist.
Dinera D. schrieb: > Ich versuche nun seit 3 Wochen ein Framework zu basteln, das mir beim > Laden eines neuen Projekts den Compiler "avr-gcc" und eine "main.c" > erstellt. Dazu braucht man kein Framework, sondern eine Kopiervorlage. Sieh mal: http://stefanfrings.de/avr_hello_world/index.html Mit dieser Vorlage kannst du sowohl C als auch C++ nutzen - auch gemischt im selben Projekt. > Mich nervt einfach der Workaround, dass ich jedes neue Projekt erst > einmal anpassen muss, dass ich überhaupt ein Programm kompilieren kann. Und darum ersetzt du das durch einen Projekt-Generator, der ebenso viele Konfigurationsparameter benötigt? Da bringt doch keinen echten Vorteil!
Dinera D. schrieb: > Ja und genau das ist mein Problem. Es werden z.B. Die Registernamen > nicht in C++ erkannt, weil der Compiler "avr-g++" als Standard > herangezogen wird. Das kann ich so nicht bestätigen. Also du kannst natürlich wie Christopher schon sagte ein native AVR Projekt machen, dann hast du deine Main wieder, aber auch wenn du das Arduino Framework benutzt hast du wie gehabt Zugriff auf alle Register wie man es kennt. Das hier kompiliert fehlerlos durch
1 | #include <Arduino.h> |
2 | |
3 | void setup() { |
4 | DDRB = 1 << 5; |
5 | |
6 | while (1) |
7 | {
|
8 | _delay_ms(500); |
9 | |
10 | // toggle the LED
|
11 | PORTB ^= 1 << 5; |
12 | }
|
13 | |
14 | return; |
15 | }
|
16 | |
17 | void loop() { |
18 | // put your main code here, to run repeatedly:
|
19 | }
|
Christopher J. schrieb: > Hast du es denn mal mit dem von mir verlinkten "native blink" Beispiel > versucht? Das dürfte ziemlich genau das machen, nach was du suchst. Der "native blink" funktioniert. Mir geht es um die Timer und genau diese Register erkennt es bei mir nicht, obwohl ich die IC spezifischen Header eingebaut habe. Bernd K. schrieb: > WTF? Wie oft am Tag erstellst Du ein neues Projekt? Mach Dir doch ein > leeres Projekt das so konfiguriert ist wie Du es gerne magst und kopier > das wenn Du es brauchst!? > > Und warum nimmst Du überhaupt eine Arduino IDE wenn Du gar kein Arduino > willst Veit D. schrieb: > Ich verstehe dein Gemecker auch nicht. Warum verwendest du das Arduino > Framework wenn es dich nervt? Wenn ich jeden Tag mehrere Projekte erstellen würde, dann ist das kein Problem, aber wenn ich nur jeden Monat eins erstelle, dann vergesse ich gerne mal die eine oder andere Einstellung und es funktioniert nicht. (Ich weis ich bin ein Schussel, jedoch versuche ich mich zu bessern ;) ) Ich habe mit der Arduino IDE angefangen, aber wenn man nicht nur einen Texteditor haben möchte, sondern auch eine Code-Vervollständigung, dann ist das eben nicht so prikelnd. Ich möchte einen Editor nutzen, den ich sehr mag und auch schon kenne (Atom). Ich bin bei der Suche auf PlatformIO gestoßen und bin auch zufriden, bis auch den Fakt, dass bei der Erstellung eines neuen Projektes (zumindest für den ATtiny13A und ATtiny2313) nur das Framework "Arduino" möglich ist. Deshalb habe ich mir gedacht, es wäre cool, wenn man ein Framework hat, welches den Compiler "avr-gcc" setzt und direkt eine "main.c" (evtl. gleich mit "#include <avr/io.h>") ohne eine "setup()"- und "loop()"-Funktion. Veit D. schrieb: > Klappt einfach > nicht. Und wenn du main.cpp bekommst statt main.c dann wirst du wohl > schon bei der Projekterstellung etwas falsch auswählen. Wenn man in > platformIO bei der Projekterstellung nicht zwischen C und C++ und > anderen auswählen kann, was ich nicht so recht glauben mag, ja dann wäre > platformIO sowieso Mist. Danke für den Beitrag! Wenn man unter Linux AVR Programmierung betreiben möchte ist das leider nicht so einfach. Atmel Studio ist nur in einer alten Version unter Wine nutzbar und jeder der Wine schon einmal benutz hat wird wissen, dass ein Ansprechen der HW nicht immer einfach ist. Da du dich auskennst, kannst du mir auch gern einen Tipp geben, wie ich meine ICs besser programmieren kann. Timmo H. schrieb: > Also du kannst natürlich wie > Christopher schon sagte ein native AVR Projekt machen, dann hast du > deine Main wieder, aber auch wenn du das Arduino Framework benutzt hast > du wie gehabt Zugriff auf alle Register wie man es kennt. so einen ähnliche Workaround habe ich bereits. Für mich fühlt sich das aber an wie von hinten durch die Brust ins Auge. Da frage ich vielleicht anders: Kann ich ein PlatformIO Projekt erstellen, ohne das "Arduino"-Framework und mit C-Compiler?
Ich schätze dass du für den ATtiny13 nur Arduino als Framework wählen kannst, weil alle anderen Frameworks in diesen kleinen Mikrocontroller nicht rein passen. Selbst bei Arduino hast du auf diesem kleinen Mikrocontroller erhebliche Einschränkungen. Deswegen wird dort meistens eher der ATtiny45 verwendet. > Kann ich ein PlatformIO Projekt erstellen, ohne > das "Arduino"-Framework und mit C-Compiler? Keine Ahnung, offensichtlich nicht, sonst stände das wohl dort: https://docs.platformio.org/en/latest/boards/atmelavr/attiny13.html
Stefanus F. schrieb: > Ich schätze dass du für den ATtiny13 nur Arduino als Framework wählen > kannst, weil alle anderen Frameworks in diesen kleinen Mikrocontroller > nicht rein passen. Selbst bei Arduino hast du auf diesem kleinen > Mikrocontroller erhebliche Einschränkungen. Deswegen wird dort meistens > eher der ATtiny45 verwendet. Stefanus, Danke! Ich glaube wir kommen meinem Problem schon näher^^ Ich benötige nicht den Overhead des Arduino Frameworks, jedoch ist die Funktionserweiterung von Atom durch PlatfomrIO elegant. Ein PlatformIO-Framework, was eigentlich kein direktes Framework wäre, sondern "nur" Compiler, Sizer und Uploader bereitstellt (Tinycore, Megacore, etc. müssten natürlich auch mit dabei sein). Naja. Ich werde mich damit abfinden, dass ich den Workaround anwenden muss.
Dinera D. schrieb: > Ein PlatformIO-Framework, was eigentlich kein direktes Framework wäre Das ist aber nicht der Sinn von PlatformIO. PlatformIO ist wohl das falsche Produkt für dich. Was du dann wohl eher haben willst, nennen wir hier liebevoll "bare metal" Programmierung. Hier hast du eine Kopiervorlage dazu: http://stefanfrings.de/avr_hello_world/index.html (im Grunde genommen brauchst du nur das Makefile) (ich weiss, das habe ich dir weiter oben schon empfohlen) Hier steht, wie du eine moderne IDE als besseren Textditor verwendest: http://stefanfrings.de/avr_tools/index.html#ide Und hier hast du ein ganzes Buch zur "bare metal" Programmierung und Anwendung des ATtiny13: http://stefanfrings.de/mikrocontroller_buch2/index.html
Hallo, naja, dass hat sich leider am Anfang gelesen wie sinnfreies Gemecker auf Arduino, obwohl das nichts damit zu tun hat. Darauf musste ein Missverständnis folgen. Erledigt, Haken ran. Anderer Vorschlag. CodeBlocks. Mit dem allgemeinen Problem die richtige IDE für sich zufinden bist du nicht der Einzigste. Das machen alle durch. :-)
Dinera D. schrieb: > Kann ich ein PlatformIO Projekt erstellen, ohne das "Arduino"-Framework > und mit C-Compiler? Ja kannst du. Allerdings nicht über New Project, sondern Platforms => Atmel AVR => Examples => Native Blink => Import
:
Bearbeitet durch User
Timmo H. schrieb: > Dinera D. schrieb: >> Kann ich ein PlatformIO Projekt erstellen, ohne das "Arduino"-Framework >> und mit C-Compiler? > Ja kannst du. Allerdings nicht über New Project, sondern Platforms => > Atmel AVR => Examples => Native Blink => Import So ist es und wenn du keinen Atmega328, sondern einen Attiny13A hast, dann musst du das entsprechend in deiner platformio.ini anpassen. Da kannst bzw. musst du dann auch noch entsprechende Zeilen für den Upload angeben. Beispiele und Doku findest du hier: https://docs.platformio.org/en/latest/platforms/atmelavr.html
Timmo H. schrieb: > Ja kannst du. Allerdings nicht über New Project, sondern Platforms => > Atmel AVR => Examples => Native Blink => Import Das funktioniert, aber das ist noch umständlicher, als die main umzubenennen und den avr-gcc compiler einzustellen. Trotzdem Danke, den Weg kannte ich noch nicht. Christopher J. schrieb: > So ist es und wenn du keinen Atmega328, sondern einen Attiny13A hast, > dann musst du das entsprechend in deiner platformio.ini anpassen. Da > kannst bzw. musst du dann auch noch entsprechende Zeilen für den Upload > angeben. Beispiele und Doku findest du hier: Das ist bekannt. Ich habe bereits erfolgreich ICs geflashed. Veit D. schrieb: > Anderer Vorschlag. CodeBlocks. Mit dem allgemeinen Problem die richtige > IDE für sich zufinden bist du nicht der Einzigste. Das machen alle > durch. :-) Eigentlich habe ich meine IDE schon gefunden und war ziemlich Glücklich, dass ich mit Atom auch Mikrocontroller programmieren kann. Zumindest bedingt nach langem einrichten. ;) Deshalb wollte ich auch in der Community fragen, ob es bereits ein gutes Tutorial für Platformio unter linux gibt. Ich werde mich in den nächsten Wochen mal ran setzten und einen kleine Crashkurs zusammenschreiben, dass der nächste Mikrocontroller-Neuling nich die gleiche Odysee durchmachen muss.
Dinera D. schrieb: > aber wenn ich nur jeden Monat eins erstelle, dann vergesse ich > gerne mal die eine oder andere Einstellung und es funktioniert nicht. Daher der Vorschlag mit der Kopiervorlage. Ich selbst mach das exakt genau so. Ich benutze zwar ne andere IDE (noch dazu eine die noch viel komplexer und zickiger ist) aber das Prinzip ist das selbe: Ich hab ein leeres Projekt das nur ne LED blinkt zum Beweis daß es funktioniert, das hat etliche vom Default der IDE abweichende Konfigurationen, es hat ein handgeklöppeltes Makefile, einen eigenen Startupcode, ein paar zusätzliche eigene Header und Code mit Sachen die ich immer brauche oder immer so mache, eine Ordnerstruktur wie sie mir genehm ist und noch ein paar andere Sachen die ich in jedem Projekt haben will und das ist dann meine ganz persönliche Vorlage für alle Projekte mit diesem Prozessor. Für die paar anderen Prozessoren die ich auch noch benutze hab ich ähnliche Vorlagen. Für nen neuen Prozessor alle paar Jahre bau ich mir schnell eine Vorlage basierend auf einer bereits existierenden. Wenn ich ein neues Projekt anfangen will dann klone ich einfach dieses Repository, geb ihm nen neuen Namen und nen neuen Origin und kann dann sofort loslegen auf Basis eines komplett nach meinen Vorlieben fix und fertig konfigurierten und organisierten und lauffähigen Minimalprojekts. Ich könnte später sogar nachträgliche Verbesserungen an meiner Vorlage ohne viel Rumgefummel in existierende Projekte oder in andere Vorlagen reinmergen weil sie alle die selbe Wurzel haben.
:
Bearbeitet durch User
Bernd K. schrieb: > Daher der Vorschlag mit der Kopiervorlage. Das werde ich mal probieren. Ich denke am Anfang wird das nervig sein, aber wenn die erste Vorlage steht, sollte das ja funktionieren. Besten Dank!
Ein kleines Update: Ich habe jetzt aus Spaß PlatformIO (Atom und VSC) unter Windows installiert und getestet. Beides funktioniert tadellos. Ich vermute ich habe bei meiner Linux-Insatallation was verbastelt. Es könnte aber auch allgemein an Linux i n Kombination mit Atom und PlatformOi sein. Ich werde die Tage auch noch VSC unter Linux probieren. (Leider ist bei mir die Zeit bei mir im Moment etwas knapp. Vorbereitung aufs Studium, Katzenbabys, Umzug) Ich habe aber die leise Vermutung, dass VSC besser funktioniert als Atom :/ Gibt es von eurre Seite Erfahrungswerte mit VSC unter Linux?
Dinera D. schrieb: > Gibt es von eurre Seite Erfahrungswerte mit VSC unter Linux? Funktioniert bei mir absolut tadellos und ist mein Standardeditor für Go, Python und Rust.
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.