Ich muss mich mit Arduino beschäftigen Vorerst bin ich nicht hilflos in der Thematik AVR. Aber ich würde mir gern Zeit und Mühe sparen, weil Arduino scheint etwas zu sein, das bewusst Details VERSTECKEN möchte, auch in Dokumentation. Das macht die Suche im Internet etwas schwerer Also wendet nicht viel Zeit auf, kurze Links oder Stichwörter ect können helfen -Ich würde gern einen detaillierten Überblick über die Software haben. Gibt es einen detailierten Software Struktur Überblick. Also Kontrollfluss , Aufrufe, benutzte Bibliotheken und Dateien -Falls nein, dann Einzelfragen "The microcontrollers can be programmed using the C and C++ programming languages, using a standard API which is also known as the "Arduino language". In addition to using traditional compiler toolchains" Quelle: Wikipedia Es werden Sketches benutzt. Aber was geschiet dann. Gibt es einen C/C++ nach C++ Compiler(so wie der Moc Compiler bei QT c++ nach c++) der die "Arduino language" übersetzt in was anderes. Dann wäre ja das ganze schwer nchverfolgbar Oder läüft das ganz normal nachvollziehbar über Bibliotheken. Ich hab mit einer Textsuche main.cpp gefunden. Ist das ein ganz einfach nachvollziehbares System, ohne "Überaschungen"? Will mich nicht auf einen zeitaufwendigen Pfad begeben und dann kommt die Überaschung: die Arduino GUI-Anwendung benutzt main.cpp normal garnicht, sondern generiert erst neue C++ Dateien und die werden benutzt mit einer Toolchain..
Person2021 schrieb: > Es werden Sketches benutzt. Aber was geschiet dann. Gibt es einen C/C++ > nach C++ Compiler Es gibt einen builder. https://arduino.github.io/arduino-cli/latest/sketch-build-process/
Person2021 schrieb: > -Ich würde gern einen detaillierten Überblick über die Software haben. > Gibt es einen detailierten Software Struktur Überblick. https://www.arduino.cc/reference/en/ Person2021 schrieb: > Gibt es einen C/C++ > nach C++ Compiler(so wie der Moc Compiler bei QT c++ nach c++) der die > "Arduino language" übersetzt in was anderes. Ja, aber der macht nur minimale Änderungen, wie das Einbinden von Libraries. Zu 99,9% ist es aber Standard-C++ (nicht C) unter der Verwendung der Arduino-Libraries. Allerdings wird die Standard-C++-Bibliothek bei AVR nicht unterstützt, weil der AVR-GCC diese nicht mitliefert. Person2021 schrieb: > Oder läüft das ganz normal nachvollziehbar über Bibliotheken. Zum Allergrößten Teil, ja. Person2021 schrieb: > Ich hab > mit einer Textsuche main.cpp gefunden. Hä? Das ist einfach nur ein Dateiname. Arduino-Sketches verwenden andere Dateiendungen (.ino) aber das ist völlig irrelevant, weil es eben zu 99,9% C++ ist. Person2021 schrieb: > sondern > generiert erst neue C++ Dateien und die werden benutzt mit einer > Toolchain.. Es wird wie gesagt eine minimale Verarbeitung durchgeführt. Wenn du so tief einsteigen möchtest und genau wissen willst was da "im Hintergrund" passiert, ist Arduino vielleicht nicht das Richtige. Es funktioniert aber so wie beworben, weshalb man sich da nicht so viele Sorgen machen muss.
Person2021 schrieb: > "The microcontrollers can be programmed using the C and C++ programming > languages, using a standard API which is also known as the "Arduino > language". Grundsätzlich nutzt du C++ (C auch möglich). "Arduino language" ist hier nichts anderes als bereits fertige C++ Klassen bzw. gekapselt in so genannte Bibliotheken. Person2021 schrieb: > Es werden Sketches benutzt. Aber was geschiet dann. Gibt es einen C/C++ > nach C++ Compiler(so wie der Moc Compiler bei QT c++ nach c++) der die > "Arduino language" übersetzt in was anderes. Der C++ Code wird einfach kompiliert. "Arduino language" ist keine eigene Sprache in dem Sinne. Person2021 schrieb: > Oder läüft das ganz normal nachvollziehbar über Bibliotheken. Ja. Person2021 schrieb: > Ich hab > mit einer Textsuche main.cpp gefunden. Ist das ein ganz einfach > nachvollziehbares System, ohne "Überaschungen"? Genau, die main() wird einfach nur "versteckt" und dem User die setup() und loop() zur Verfügung gestellt.
1 | int main(void) |
2 | {
|
3 | init(); |
4 | |
5 | initVariant(); |
6 | |
7 | #if defined(USBCON)
|
8 | USBDevice.attach(); |
9 | #endif
|
10 | |
11 | setup(); |
12 | |
13 | for (;;) { |
14 | loop(); |
15 | if (serialEventRun) serialEventRun(); |
16 | }
|
17 | |
18 | return 0; |
19 | }
|
Da es soviele Bibliotheken gibt, hat Arduino jedoch ein paar Eigenheiten die man kennen sollte. Z.b. kann nicht jeder Timer frei genutzt werden, ich glaub Timer0 wird fix für millis() verwendet usw. Also es gibt einiges was durch die Bibliotheken leichter fällt aber auch vieles was dann nicht so einfach möglich ist. So meine Erfahrung - man kann es lieben oder hassen :-)
Vielen Dank für die Antworten soweit, das hilft sehr mit dem Einblick, werde gleich mal alles genau anschauen. Programmierer schrieb: > Wenn du so tief einsteigen möchtest und genau wissen willst was da "im > Hintergrund" passiert, ist Arduino vielleicht nicht das Richtige. Arduino hab ich mir nicht freiwillig selbst ausgesucht, aber ist ganz interessant so abstrakt. Ich brauche auch nicht einen sehr tiefen Einblick Eventuell würde ich zum Beispiel einen AVR Simulator benutzen wollen( nicht einen speziellen Arduino Simulator) dazu müsste ich ein bischen Überblick haben. Werde mich mal durch die Antworten/Links durchlesen
Person2021 schrieb: > Vielen Dank für die Antworten soweit, das hilft sehr mit dem > Einblick, > werde gleich mal alles genau anschauen. Ich bin also soweit versorgt, Fragen sind beantwortet
Person2021 schrieb: > Eventuell würde ich zum Beispiel einen AVR Simulator benutzen wollen Was nur in Kombination mit einem Debugger Sinn macht, aber genau das ist in Arduino nicht vorgesehen. Wenn du wissen willst, was im Mikrocontroller passiert, musst du Meldungen wie Serial.println("Ich mache gerade dies und das") in dein Programm einfügen.
Stefan ⛄ F. schrieb: > Person2021 schrieb: >> Eventuell würde ich zum Beispiel einen AVR Simulator benutzen wollen > > Was nur in Kombination mit einem Debugger Sinn macht, aber genau das ist > in Arduino nicht vorgesehen. > > Wenn du wissen willst, was im Mikrocontroller passiert, musst du > Meldungen wie Serial.println("Ich mache gerade dies und das") in dein > Programm einfügen. Ich will mir nämlich keinen Arduino kaufen, sondern will nur Sketches schreiben und testen, durchsimulieren mit Debugger am PC. Soll dann jemand anderes mit Arduino Hardware benutzen
Wie gesagt bin versorgt, hab mir den Builder jetzt angeschaut und hatte anfangs einfach schlecht gegoogelt weil ich dachte es gibt niemand Details preis.
Person2021 schrieb: > Arduino scheint etwas zu sein, das > bewusst Details VERSTECKEN möchte, auch in Dokumentation. Das macht die > Suche im Internet etwas schwerer Richtig. Arduino (das Framework) könnte man als third-party HAL bezeichnen. Wenn du AVR in Reinform erleben möchtest, geht das mithilfe des Datenblattees und des Atmel- bzw. Microchip Studios 7. Da Steht dir frei c, c++, oder ASM zu benutzen. Ein "Simmulator" ist auch an Bord.
:
Bearbeitet durch User
Person2021 schrieb: > weil ich dachte es gibt niemand > Details preis. Ja, das denken viele, welche mit fachlicher Vorbildung in die Arduino Welt einschlagen. Diese sprechen gerne von verstecken und verbergen. Die Situation ist allerdings leicht anders. Es ist alles recht gut dokumentiert. Es liegt alles offen, also im Quellcode vor. Andererseits trägt Arduino die innere Komplexität nicht laut nach außen, um absoluten Einsteigern einen niederschwelligen Zugang zu bieten. Wer wissen will, findet auch den Zugang zu den Innereien.
Person2021 schrieb: > Ich will mir nämlich keinen Arduino kaufen, sondern will nur Sketches > schreiben und testen, durchsimulieren mit Debugger am PC. Soll dann > jemand anderes mit Arduino Hardware benutzen Wie stellst du dir das in der Praxis vor? Es geht doch (fast) immer darum, konkrete Hardware anzusteuern. Wenn du diese simulieren willst, musst du dir den Simulator selbst bauen. Ich habe bisher noch keinen AVR Simulator gesehen, wo man selbst programmierte Simulations-Module andocken kann.
Person2021 (Gast) 10.05.2021 12:50 >Ich will mir nämlich keinen Arduino kaufen, sondern will nur Sketches >schreiben und testen, durchsimulieren mit Debugger am PC. Soll dann >jemand anderes mit Arduino Hardware benutzen Mit einem Linux-PC kannst Du das gut machen: https://github.com/ChrisMicro/ArduinoOnPc
ch schrieb: > Person2021 (Gast) > 10.05.2021 12:50 > >>Ich will mir nämlich keinen Arduino kaufen, sondern will nur Sketches >>schreiben und testen, durchsimulieren mit Debugger am PC. Soll dann >>jemand anderes mit Arduino Hardware benutzen > > Mit einem Linux-PC kannst Du das gut machen: > https://github.com/ChrisMicro/ArduinoOnPc Das Programm eignet sich dazu eher nicht. Als Startpunkte: https://de.wikipedia.org/wiki/Model_in_the_Loop https://de.wikipedia.org/wiki/Hardware_in_the_Loop#Software_in_the_Loop
>> Mit einem Linux-PC kannst Du das gut machen: >> https://github.com/ChrisMicro/ArduinoOnPc Franz M. (elmo64) 10.05.2021 17:12 >Das Programm eignet sich dazu eher nicht. Es eignet sich sehr gut, wenn man es in Eclipse-CDT importiert. Dann kann man ganz normal debuggen. Mit Breakpoints und Variablen-Watch.
Stefan ⛄ F. schrieb: > Person2021 schrieb: >> Eventuell würde ich zum Beispiel einen AVR Simulator benutzen wollen > > Was nur in Kombination mit einem Debugger Sinn macht, aber genau das ist > in Arduino nicht vorgesehen. Wieso sollte man einen Simulator nur in Kombination mit einem Debugger verwenden können? Es ist im Gegenteil so, dass ein guter Simulator einen Debugger u.U. sogar vollständig ersetzen kann oder sogar Dienste über das hinaus leisten kann, was mit einem Debugger möglich ist. Leider sind so gute Simulatoren eher selten, so dass es in der Praxis eher darauf hinaus läuft, dass man je nach konkretem Problem mal einen Debugger und mal einen Simulator verwendet. Sofern denn einer verfügbar ist, der was taugt... Für die typischen Arduino-AVRs gibt es einen immerhin einigermaßen brauchbaren. Als Teil des Atmel-Studio.
c-hater schrieb: > Für die typischen Arduino-AVRs gibt es einen immerhin einigermaßen > brauchbaren. Als Teil des Atmel-Studio. An solche Simulatoren dachte ich dabei. Diese kann man nur zusammen mit dem Debugger nutzen, weil sie eben nicht die Hardware um den µC simulieren. Ich stimme dir zu. Wenn man wirklich die ganze Maschine simuliert, dann kann man damit den Code prima testen. Der Aufwand dafür ist allerdings hoch, weil man das IMHO weitgehend selbst programmieren muss.
Stefan ⛄ F. schrieb: > An solche Simulatoren dachte ich dabei. Diese kann man nur zusammen mit > dem Debugger nutzen, weil sie eben nicht die Hardware um den µC > simulieren. Du meinst: wirklich externe Hardware? Weil: die interne Hardware des µC wird ja zumindest teilweise durchaus simuliert. Viele typische Arduino-Anfängerprojekte könnte man damit tatsächlich vollständig simulieren. Was die Zusammenarbeit mit wirklich externer Hardware betrifft (im Arduino-Slang: "shields"), diese wird natürlich nicht direkt simuliert. Allerdings ist sie im Debugger genausowenig als solche sichtbar. Was man darin sieht, ist nur bestenfalls die Wirkung auf die interne Hardware, an der sie angeschlossen ist. Und diese Wirkung kann man (zumindest für Eingänge jeglicher Form) mit entsprechend angepassten Programmversionen auch aufzeichnen. Und später diese Aufzeichnung im Simulator beliebig oft wieder abspielen. Diese Verwendung solcher Aufzeichnungen nennt sich "Stimuli". Der erste Schritt ist im Prinzip fast genau sowas wie: > Wenn du wissen willst, was im Mikrocontroller passiert, musst du > Meldungen wie Serial.println("Ich mache gerade dies und das") in dein > Programm einfügen. Nur dass man das Ergebnis dieser Ausgabe hinterher beliebig oft als Simulator-Eingabe verwenden und so eine problematische Situation wieder und wieder durchspielen kann. Das ist inbesondere nützlich bei Fehlern, die irgendwann tief in der Vergangenheit ihre Ursache haben, deren Wirkung sich aber erst Hunderte, Tausende, Millionen oder gar Milliarden Takte später so deutlich zeigt, dass man sie leicht detektieren kann. Es gibt leider solche Fehler...
Stefan ⛄ F. schrieb: > Wie stellst du dir das in der Praxis vor? > > Es geht doch (fast) immer darum, konkrete Hardware anzusteuern. Ich will auch nicht alles simulieren, ich will meinen Sketch auf dem Atmega simulieren. Ich kann also durch den C Quellcode der Arduino Bibliotheken surfen mit AVR Studio Simulator. Ich schau dann auf die Ports, und PINX und ADCX kann ich händisch manipulieren. Soweit klappt das, mal schauen. Ich hab ja Schaltpläne für die Arduino Hardware Module , ich kann ja abschätzen was passiert, Schnittstellen Kommunikation natürlich nur grob Wen's interessiert: ich hab aus dem Temp den vorkompilierten Sketch rausgegriffen(Arduino.h wurde includiert, u.w.), und danach als Kontext zeige ich main.cpp, so wie es kompiliert wird
1 | http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay |
2 | */
|
3 | |
4 | // constants won't change. Used here to
|
5 | // set pin numbers:
|
6 | #include "Arduino.h" |
7 | void setup(); |
8 | void loop(); |
9 | #line 26
|
10 | const int ledPin = 13; // the number of the LED pin |
11 | |
12 | // Variables will change:
|
13 | int ledState = LOW; // ledState used to set the LED |
14 | long previousMillis = 0; // will store last time LED was updated |
15 | |
16 | // the follow variables is a long because the time, measured in miliseconds,
|
17 | // will quickly become a bigger number than can be stored in an int.
|
18 | long interval = 1000; // interval at which to blink (milliseconds) |
19 | |
20 | void setup() { |
21 | // set the digital pin as output:
|
22 | pinMode(ledPin, OUTPUT); |
23 | }
|
24 | |
25 | void loop() |
26 | {
|
27 | // here is where you'd put code that needs to be running all the time.
|
28 | |
29 | // check to see if it's time to blink the LED; that is, if the
|
30 | // difference between the current time and last time you blinked
|
31 | // the LED is bigger than the interval at which you want to
|
32 | // blink the LED.
|
33 | unsigned long currentMillis = millis(); |
34 | |
35 | if(currentMillis - previousMillis > interval) { |
36 | // save the last time you blinked the LED
|
37 | previousMillis = currentMillis; |
38 | |
39 | // if the LED is off turn it on and vice-versa:
|
40 | if (ledState == LOW) |
41 | ledState = HIGH; |
42 | else
|
43 | ledState = LOW; |
44 | |
45 | // set the LED with the ledState of the variable:
|
46 | digitalWrite(ledPin, ledState); |
47 | }
|
48 | }
|
main.cpp
1 | #include <Arduino.h> |
2 | |
3 | int main(void) |
4 | {
|
5 | init(); |
6 | |
7 | #if defined(USBCON)
|
8 | USBDevice.attach(); |
9 | #endif
|
10 | |
11 | setup(); |
12 | |
13 | for (;;) { |
14 | loop(); |
15 | if (serialEventRun) serialEventRun(); |
16 | }
|
17 | |
18 | return 0; |
19 | }
|
Person2021 schrieb: > Ich will auch nicht alles simulieren, ich will meinen Sketch auf dem > Atmega simulieren. Schlecht formuliert. Ich simuliere momentan meinen Sketch samt den Arduino Bibliotheken mit AVR Studio Simulator, simuliert wird dabei zB Atmega328p
Beitrag #6780629 wurde von einem Moderator gelöscht.
Person2021 schrieb: > Person2021 schrieb: >> Ich will auch nicht alles simulieren, ich will meinen Sketch auf dem >> Atmega simulieren. > Schlecht formuliert. Ich simuliere momentan meinen Sketch samt den > Arduino Bibliotheken mit AVR Studio Simulator, simuliert wird dabei zB > Atmega328p Ich würde ja eher zu einem Debugger wie dem Atmel ICE raten und dann statt simulieren lieber ins laufende Target schauen. Bei einer Controllerschaltung ist die Peripherie sehr wichtig und die kann man immer nur sehr schwer simulieren.
Das kann ja nur im klassischen Software-Hardware-Krieg enden! Hat mich früher so lange sehr vergnügt, bis ich dann selbst solche Vögel in der Gruppe hatte. Wünsche trotzdem Erfolg! Gruß Rainer
Adam P. schrieb: > Genau, die main() wird einfach nur "versteckt" und dem User die setup() > und loop() zur Verfügung gestellt. Hääh? setup() und loop() sind Funktionen, die der User zur Verfügung stellen muss, damit diese beim Compilieren/Linken von main() zur Verfügung stehen.
Wolfgang schrieb: > die der User zur Verfügung stellen > muss, damit diese beim Compilieren/Linken von main() zur Verfügung > stehen. Alternativ, muss er eine eigene main() erstellen.
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.