Forum: Mikrocontroller und Digitale Elektronik Arduino Software Überblick


von Person2021 (Gast)


Lesenswert?

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..

von Einer K. (Gast)


Lesenswert?

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/

von Programmierer (Gast)


Lesenswert?

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.

von Adam P. (adamap)


Lesenswert?

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 :-)

von Person2021 (Gast)


Lesenswert?

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

von Person2021 (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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.

von Person2021 (Gast)


Lesenswert?

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

von Person2021 (Gast)


Lesenswert?

Wie gesagt bin versorgt, hab mir den Builder jetzt angeschaut und hatte 
anfangs einfach schlecht gegoogelt weil ich dachte es gibt niemand 
Details preis.

von Franz M. (elmo64)


Lesenswert?

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
von Einer K. (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von ch (Gast)


Lesenswert?

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

von Franz M. (elmo64)


Lesenswert?

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

von ch (Gast)


Lesenswert?

>> 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.

von c-hater (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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...

von Person2021 (Gast)


Lesenswert?

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
}

von Person2021 (Gast)


Lesenswert?

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

von foo (Gast)


Lesenswert?

Kurz mal Arduino online simulieren:
https://wokwi.com/

Beitrag #6780629 wurde von einem Moderator gelöscht.
von Cyblord -. (cyblord)


Lesenswert?

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.

von Rainer V. (a_zip)


Lesenswert?

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

von Wolfgang (Gast)


Lesenswert?

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.

von EAF (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.