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:> -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
intmain(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
return0;
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.
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
>> 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
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
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.