Hallo, ich habe mal eine Frage zur Arduino IDE: Und zwar möchte ich ein vorhandenes Atmel Studio Projekt in Arduino IDE importieren. Im Internet war nichts darüber zu finden (nur von Arduino zu Studio) Also habe ich es einfach mal ausprobiert: - main.cpp kopiert und entsprechend bei setup() und Loop() eingefügt - #include's eingefügt - entsprechende .h und .cpp datein in den arduino ordner kopiert. Auf compilieren gedrückt (für Arduino Pro Mini)..... Und es wurde ohne Fehler compiliert. Schön....Aber wo ist der Haken? Ich finde das ging jetzt zu einfach? Oder ist das wirklich so einfach? Ich kann leider die funktion nicht testen weil die Hardware noch garnicht fertig ist. Kann ich jetzt in dem Code einfach Arduino funktionen nutzen? (vorrausgesetzt das keine Pins doppelt genutzt werden usw.) Ich habe noch nier mit Atmel Studio oder Atmegas gearbeitet, nur eben mit der Arduino IDE.
Der Haken ist wohl folgender: Das Programm läuft nicht. Selbst die LED's können nicht aktiviert werden. Auch nicht mit den Arduino funktionen. Lustiger nebeneffekt. Wenn die Main.cpp aus dem Arduino Ordner gelöscht wird (Wird ja nicht benötigt, steht ja alles im .ino file), kann das projekt nicht mehr in Arduino IDE kompiliert werden. Aber eigentlich sollte das doch möglich sein?
Hallo, mach einen neuen leeren Sketch in der IDE auf. Lösche den Inhalt (setup() und loop() und kopieren den Inhalt Deiner main rein. Speichere den Sketch. Schließe die IDE und kopieren alle anderen Dateien die zum Projekt hehören in den Sketchordner. Dann starte die IDE, mach den Sketch auf und compiliere und schau Dir an, wo er mault (erweiterte Ausgaben beim Compilieren in den Einstellungen einschalten). Die ArduinoIDE compiliert das dann ohne Einbindung der Arduino-Sachen, es muß also ein prinzipiell komplett lauffähiges Projekt sein und die main muß als Sketchname.ino im Ordner Skezchname im Sketchbook liegen. Mit plain c klappt bei kleinen Projekten bei mir meist ohne sonderliche Nacharbeit, mit C++ habe ich es noch nicht genutzt. Wenn beim C++ reine C-Sachen dabei sind, darfst Du vermutlich die .h noch mit
1 | #ifdef __cplusplus |
2 | extern "C" { |
3 | #endif |
4 | |
5 | C-Headerfile-Inhalt |
6 | |
7 | #ifdef __cplusplus |
8 | } |
9 | #endif |
sonst kann er die Verweise nicht auflösen. Gruß aus Berlin Michael
Hallo Michael, das werde ich mal ausprobieren. Lässt es sich denn trotzdem einrichten die Arduino funktionen und Libs zu nutzen? Den reinen C/C++ Code kann ich auch im Atmel Studio nutzen. Es ging mir darum das Projekt mit den einfachen Arduino Hilfsmitteln zu erweitern.
Hallo, john schrieb: > Hallo Michael, > > das werde ich mal ausprobieren. > Lässt es sich denn trotzdem einrichten die Arduino funktionen und Libs > zu nutzen? Kannst Du kombinieren, ich habe nur mal alte C-Routinen für RFM-Funkmodule von mir in ein Arduino Projekt eingebaut, ging für mich recht problemlos. Komplexe Kombinationen habe ich da noch nicht gebaut, mein Bekannter hat mal das BT-Audio Beipiel aus den IDK-Demosourcen vom ESP32 in die IDE gepackt, so 2 Stunden später lief der Compiler fehlerfrei durch. Das lag aber mehr daran, daß das der Demo-Source schon nichtmehr zum aktuellen IDK passte. Zumindest hatten wir dann einen BT-Lautsprecher mit ESP32. Gruß aus Berlin Michael
john schrieb: > Und zwar möchte ich ein vorhandenes Atmel Studio Projekt in Arduino IDE > importieren. Vergiss das, dafuer ist die Arduino IDE nicht ausgelegt. Die Arduino IDE ist nur ein schlechterer Texteditor, aber nichts was die Bezeichnung IDE verdient. Natuerlich kannst du den Code von Hand kopieren. In der Atmel Studio Projektdatei steht aber noch viel mehr drin: Welcher Compiler, welche Compilerflags, Projektkonfigurationen, Dateipfade, etc. Wenn du den Code kopierst geht all das verloren und moeglicherweise ist das Ergebnis der Arduino IDE etwas anders (wenn auch funktionsfaehig), als das von Atmel Studio, aufgrund unterschiedlicher Toolchains, Configs, etc.
john schrieb: > Auf compilieren gedrückt (für Arduino Pro Mini)..... > > Und es wurde ohne Fehler compiliert. > Schön....Aber wo ist der Haken? Ich finde das ging jetzt zu einfach? > Oder ist das wirklich so einfach? im Studio gibt es eine Endlosschleife while(1) oder for(;;) o.ä. alles von dort in Arduino loop() alles vor der Endlosschleife kommt in setup! alle *.c oder *.cpp kommen in den Sketchordner des Arduinos "Projekt" als *.ino alle #Include Header *.h, *.hpp sollten auch da landen. alle genutzten LIBs sollten in dem Arduino library Ordner landen oder im Sketchordner. Sketchordner und main PRG müssen den gleichen Namen tragen! Das wird dann genug Arbeit, ohne setup und loop gehts über Arduino auch mit dem gcc, weiss aber nicht aus der IDE über seriell oder nur über ISP als hex Übertragung.
:
Bearbeitet durch User
Michael U. schrieb: > Hallo, > > mach einen neuen leeren Sketch in der IDE auf. > Lösche den Inhalt (setup() und loop() und kopieren den Inhalt Deiner > main rein. > Speichere den Sketch. Schließe die IDE und kopieren alle anderen Dateien > die zum Projekt hehören in den Sketchordner. Dann starte die IDE, mach > den Sketch auf und compiliere und schau Dir an, wo er mault (erweiterte > Ausgaben beim Compilieren in den Einstellungen einschalten). > > Die ArduinoIDE compiliert das dann ohne Einbindung der Arduino-Sachen, > es muß also ein prinzipiell komplett lauffähiges Projekt sein und die > main muß als Sketchname.ino im Ordner Skezchname im Sketchbook liegen. > Mit plain c klappt bei kleinen Projekten bei mir meist ohne sonderliche > Nacharbeit, mit C++ habe ich es noch nicht genutzt. > Wenn beim C++ reine C-Sachen dabei sind, darfst Du vermutlich die .h > noch mit#ifdef __cplusplus > extern "C" { > #endif > > C-Headerfile-Inhalt > > #ifdef __cplusplus > } > #endif > sonst kann er die Verweise nicht auflösen. > > Gruß aus Berlin > Michael Hallo Michael, ich habe den Sketch so aufgesetzt wie von dir vorgeschlagen. ohne die ifdefs in den Headern....war mir nich sicher ob c oder c++ ist Jedenfalls kompilierte alles wie zuvor (die erweiterten ausgaben waren auch unauffällig)....Also alles wie vorher. Aber diesesmal funktionierte das Programm, ich konnte sogar mit pinmode() und pinwrite() einen GPIO toggeln. Soweit scheint es zu funktionieren. Der Endgültige Test steht noch aus. Das ganze Projekt wird ein Logger mit RC Telemetrie. Für Jeti, HoTT und SPort Telemetrie gibt es fertige funktionierende Arduino Libs. Leider nicht für Futaba SBUS. Im Netz habe ich aber SBUS Code gefunden als Atmel Studio projekt. Angeblich lässt sich die UART mit Arduino nicht auf SBUS einstellen....Das muss ich jetzt testen ob das funktioniert. Dann kann ich das ganze Projekt mit SD Karte, Config usw I2C fertig machen und per Define auswählen welchen Telemetrieprotokoll er verwenden soll. Deswegen wollte ich die SBUS Telemetrie nicht mit dem Atmel Studio machen. Dann hätte ich den Code immer 2 mal pflegen müssen. Ich werde berichten wie es ausgeht. trotzdem schonmal vielen Dank an Michael Gruß John (ebenfalls aus Berlin)
Hallo, john schrieb: > ich habe den Sketch so aufgesetzt wie von dir vorgeschlagen. > > ohne die ifdefs in den Headern....war mir nich sicher ob c oder c++ ist > > Jedenfalls kompilierte alles wie zuvor (die erweiterten ausgaben waren > auch unauffällig)....Also alles wie vorher. > Aber diesesmal funktionierte das Programm, ich konnte sogar mit > pinmode() und pinwrite() einen GPIO toggeln. > Soweit scheint es zu funktionieren. Der Endgültige Test steht noch aus. freut mich, das es bis dahin geklappt hat. Bisher hat mir die ArduinoIDE weit mehr positive als negative Überraschungen geboten. Gruß aus Berlin Michael
Nach langer Zeit nun das Ergebnis: Die unter Arduino kompilierte Firmware aus Atmel Studio funktioniert ohne Einschränkungen. Arduino Funktionen gehen auch. Getestet bisher nur mit GPIO toggeln. Das einzige was nicht funktioniert: Ich muss weiterhin int main(void){} anstatt Setup() und Loop() verwenden, sonst gibts Fehlermeldungen im Kompiler. Arduino: 1.8.5 (Windows 10), TD: 1.41, Board: "Arduino Pro or Pro Mini, ATmega328P (3.3V, 8 MHz)" wiring.c.o (symbol from plugin): In function `delayMicroseconds': (.text+0x0): multiple definition of `__vector_16' C:\Users\eric\AppData\Local\Temp\arduino_build_438229\sketch\CC_esc.cpp. o (symbol from plugin):(.text+0x0): first defined here collect2.exe: error: ld returned 1 exit status exit status 1 Fehler beim Kompilieren für das Board Arduino Pro or Pro Mini. Vermutlich wird irgendwo ein Interrupt von meinem Code und dem Arduino Code doppelt verwendet. Warscheinlich bei DelayMicroseconds? Interessanterweise verwende ich die CC_esc.cpp gar nicht mehr. Ich bleibe aber dran.
Nachtrag: Auch mit Setup() und Loop() funktioniert es. Habe nochmal ein neues Projekt angelegt und die Header eingebunden. Jetzt läuft es. Vielen Dank nochmal an Michael.
john schrieb: > Timmo H. schrieb: >> Nimm PlatformIO! > > Aha! Jup. Ich finds besser. Kannst du deine Arduino-Projekte direkt mit importieren und kannst neben AVR auch ESP8266, ESP32 und stm32f1 inkl. Arduino Framework bedienen (geht natürlich auch ohne Arduino oder FreeRTOS). Zudem hat man dann eine einheitliche IDE für alle Controller und Git ist auch gleich mit drin.
Ja das klingt recht interessant. Nur mein Problem (bisher) war das ich externen C Code (für atmel studio) in meine bereits vorhandenen Arduino projekte importieren wollte. Wenn ich das jetzt alles nochmal in eine neue IDE importiere und teste werde ich ja nie fertig.
Der Code ist erstmal unabhängig von der IDE. Du kannst in Arduino genauso in den Registern rumfummeln wie gehabt (nur mit einem Timer muss man etwas aufpassen). Arduino nimmt dir im Prinzip nur die main() weg und ersetzt sie durch main(){setup(); while(1){loop();}) und gibt dir dazu noch Funktionen die dir das Rumfummeln in den Registern und das Datenblatt zu lesen abnehmen. In der Regel alles gut implementiert, aber sowas wie Digitalwrite ist halt eine ganze Ecke langsamer als direkt in das Port-Register zu schreiben, da dort noch einiges mehr passiert. Bei PlatformIO gibts halt dieses ominöse INO-File nicht mehr sondern eben ganz normal C(pp) und H files in dem anstatt main eben setup und loop drin ist. Und viele ehemals Arduino IDE-Projekte, steigen inzwischen vielfach auf PlatformIO um (zu sehen unter github durch die PlatformIO.ini). Selbst bei Marlin ist inzwischen das INO-File leer (nur noch Kommentare)
:
Bearbeitet durch User
Hallo, john schrieb: > Nur mein Problem (bisher) war das ich externen C Code (für atmel studio) > in meine bereits vorhandenen Arduino projekte importieren wollte. Bei mir war und ist es ähnlich. Hobby, Einzelprojekte, teilweise Jahre alt, bunte Mischung von AVR-ASM (die ganz alten), C in Atmelstudio 4.x, Arduino. Die werden manchmal doch noch angefasst, erweitert oder umgebaut. Bis jetzt hat die ArduinoIDE da gewonnen, da die C-Sachen sich recht problemlos weiternutzen und mit Arduino-Geschichten erweitern ließen. Jetzt passiert öfter ähnliches mit den ESP, Arduino-Projekt und Funktionen des ESP-SDK nutzen, die aus der Arduino Implemetierung (noch) nicht genutzt werden. Der Aufwand, zusätzlich zur ArduinoIDE noch das ESP8266 SDK und das ESP32 IDK komplett zu installieren, stände da in keinem sinnvollen Zeitverhältnis. > Wenn ich das jetzt alles nochmal in eine neue IDE importiere und teste > werde ich ja nie fertig. :-)) @ Timmo H. (masterfx): meinen Grund gegen PlatformIO kann ich Dir erklären: Die ArduinoIDE installiere ich generell als Portable. Gestern die 1.8.6, ZIP runtergeladen, entpackt, portable-Ordner angelegt und die IDE gestartet. Die zusätzlichen Board-URLs (ESP8266/ESP32,Mighty, TinyAVR) eingetragen und die Erweiterungen installiert. Ist die Gelegenheit, unnütze Sachen, mit denen man mal rungespielt hat, rauszuwerfen. Meine aktiven und in Nutzung befindlichen Sachen aus dem Sketchordner der alten in die neue kopiert und compiliert. Die logischerweise fehlenden Bibliotheken aktuell installiert, so fliegt auch da der Kram von Experimenten mal raus. Angepasst, was evtl. wegen neueer Lib-Versionen zu ändern war, geflucht und wenn jemand in einer Lib was geändert hat, was definitiv völlig sinnlos war (Adafruit_ST7735 z.B.). Das dauert nicht sonderlich lange und ich muß es nicht sofort alles machen. Wenn ich an einem alten Projekt was wirklich schnell korrigieren muß, kann ich es auch in der 1.6.9 oder 1.8.5 mit den jeweils alten ESP-SDK machen und dann das Projekt in Ruhe in die aktuelle packen und anpassen, wenn nötig. Mit Atmel/AVR-Studo, PlattformIO usw. mehrere Version parallel betriebsbereit zu halten wäre dagegen eine Strafarbeit. Mehrere Vm wären zwar möglich, nur muß das auch eingerichtet und gepflegt werden und kollidiert evtl. mit anderen Änderungen an meinem genutztem Windowssystem. Ein Bekannter von mir, der auch beruflich und in anderen Größenordnungen programmiert, ist bei seinen Hobby-Sachen mit AVR und ESP aus genau den gleichen Gründen bei der ArduinoIDE gelandet. Die Zeitersparnis und die Handhabung haben gewonnen. Gruß aus Berlin Michael
Michael U. schrieb: > Die ArduinoIDE installiere ich generell als Portable. > Gestern die 1.8.6, ZIP runtergeladen, entpackt, portable-Ordner angelegt > und die IDE gestartet. Vscode unterstützt auch portable.
Timmo H. schrieb: > Du kannst in Arduino > genauso in den Registern rumfummeln wie gehabt (nur mit einem Timer muss > man etwas aufpassen). ja ist mir auch aufgefallen wenn ich zwischen m328p und m1284p wechsel ich habe einfach die Timer per #define ausgetauscht!
Timmo H. schrieb: > Du kannst in Arduino > genauso in den Registern rumfummeln wie gehabt (nur mit einem Timer muss > man etwas aufpassen) Ich hatte das nie probiert als ich dieses Thema gestartet habe. Deswegen wollte ich mich absichern bevor etwas ganzlich schief geht. Aber, welcher Timer ist denn der kritische? In meinem externen C Code sind kommentare das Timer 0 und Timer 2 genutzt werden. Leider kenne ich mich in den AVR Registern überhaupt nicht aus. Ich komme da eher aus der STM32 Ecke. Deswegen nutze ich auch gerne Arduino um schnell und einfach eine funktionalität zu bekommen.
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.