INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino und C++
26.06.2016, 13:32 (Dieser Beitrag wurde zuletzt bearbeitet: 26.06.2016 13:33 von Atwist.)
Beitrag #1
Arduino und C++
Hallo

Habe vielleicht einen dumme Frage BlushBlush aber ich Frag doch mal.

Versteht die Arduino C++ ????????

Beispiel
Code:
// reading a text file
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
  string line;
  ifstream myfile ("example.txt");
  if (myfile.is_open())
  {
    while ( getline (myfile,line) )
    {
      cout << line << '\n';
    }
    myfile.close();
  }

  else cout << "Unable to open file";

  return 0;
}

Ich danke mal im Voraus

Mit freundliche grüßen
Andreas
--
Es tut mir Leid dass ich nicht immer oder direkt ihre Antwort verstehe, durch Konzentration Probleme ist es für mich leichter zu lehren durch "Learning by seeing" bitte um Verständnis.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.06.2016, 16:13 (Dieser Beitrag wurde zuletzt bearbeitet: 26.06.2016 16:14 von rkuehle.)
Beitrag #2
RE: Arduino und C++
Hallo Andreas,
die Frage kann man eindeutig mit "Jain" beantworten Big Grin
Das "Hauptproblem" an deinem Beispiel ist die streaming - Klasse.
Die ist auch beim Arduino die Elternklasse für print() etc. Klassen.
Man kann dem C++ - Style aber weitestgehend treu bleiben wenn man z. B. diese Library einbindet: http://arduiniana.org/libraries/streaming/
Damit dürften dann die Includes aus deinem Beispiel entfallen.
Bleibt die Frage wo du den Vergleich mit C++ ansonsten fest machst.
Nebenbei, der Funktionsaufruf "main" ist beim Arduino genauso gleichwertig wie jeder andere Funktionsaufruf. Du kommst also an setup() und loop() nicht vorbei.
Grüße Ricardo
PS: Es ist übrigens ein weit verbreiteter Irrglaube, dass C/C++ einem Funktionsaufruf "main" brauchen.

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.06.2016, 18:20 (Dieser Beitrag wurde zuletzt bearbeitet: 26.06.2016 18:23 von Atwist.)
Beitrag #3
RE: Arduino und C++
Ricardo Danke für dein ausführliche Antwort.

Ich versuche es mal mit die "streaming" library zu includen.
Vielleicht kann ich hiermit mein Problem lösen Big Grin

Mit freundliche grüßen
Andreas
--
Es tut mir Leid dass ich nicht immer oder direkt ihre Antwort verstehe, durch Konzentration Probleme ist es für mich leichter zu lehren durch "Learning by seeing" bitte um Verständnis.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.07.2016, 19:59
Beitrag #4
RE: Arduino und C++
Hallo,

(26.06.2016 16:13)rkuehle schrieb:  Hallo Andreas,
die Frage kann man eindeutig mit "Jain" beantworten Big Grin
Bleibt die Frage wo du den Vergleich mit C++ ansonsten fest machst.
Nebenbei, der Funktionsaufruf "main" ist beim Arduino genauso gleichwertig wie jeder andere Funktionsaufruf. Du kommst also an setup() und loop() nicht vorbei.

das stimmt so nicht. Ohne setup() und loop() stattdessen mit main() bindet die Arduino-IDE nichts vom Arduino ein. Man programmiert den nackten Controller und ist für alles selber zuständig.

Sein Beispiel scheitert aber schon daran, daß die gewünschten includes z.B. für den AVR garnicht vorhanden sind mangels Betriebssystem und Filesystem.

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.07.2016, 17:23
Beitrag #5
RE: Arduino und C++
Hey!

(08.07.2016 19:59)amithlon schrieb:  ...
das stimmt so nicht. Ohne setup() und loop() stattdessen mit main() bindet die Arduino-IDE nichts vom Arduino ein. Man programmiert den nackten Controller und ist für alles selber zuständig.
...

Stimmt auch nicht ganz Smile Die IDE bindet die Core Datein von alleine ein. Wenn man mit main() schreibt, wird nur die eigentliche Main Funktion nicht ausgeführt und somit fehlt dann dieser Part hier:
Code:
int main(void)
{
    init();

    initVariant();

#if defined(USBCON)
    USBDevice.attach();
#endif
    
    setup();
    
    for (;;) {
        loop();
        if (serialEventRun) serialEventRun();
    }
        
    return 0;
}
Timer und ADC (evtl. USB) Funktionen werden dann nicht funktionieren (wird in init() eingestellt bzw. USB in attach()).

Aber du kannst immernoch deinen eigenen Main-Code schreiben:
Code:
int main()
{
  pinMode(3, OUTPUT);
  digitalWrite(3, HIGH);
  while(1);
}
... funktioniert! Big Grin

mfg Scheams
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.07.2016, 21:38
Beitrag #6
RE: Arduino und C++
Hallo,
(09.07.2016 17:23)Scheams schrieb:  Hey!

(08.07.2016 19:59)amithlon schrieb:  ...
das stimmt so nicht. Ohne setup() und loop() stattdessen mit main() bindet die Arduino-IDE nichts vom Arduino ein. Man programmiert den nackten Controller und ist für alles selber zuständig.
...

Stimmt auch nicht ganz Smile Die IDE bindet die Core Datein von alleine ein. Wenn man mit main() schreibt, wird nur die eigentliche Main Funktion nicht ausgeführt und somit fehlt dann dieser Part hier:
Code:
int main(void)
{
    init();

    initVariant();

#if defined(USBCON)
    USBDevice.attach();
#endif
    
    setup();
    
    for (;;) {
        loop();
        if (serialEventRun) serialEventRun();
    }
        
    return 0;
}
Timer und ADC (evtl. USB) Funktionen werden dann nicht funktionieren (wird in init() eingestellt bzw. USB in attach()).

Aber du kannst immernoch deinen eigenen Main-Code schreiben:
Code:
int main()
{
  pinMode(3, OUTPUT);
  digitalWrite(3, HIGH);
  while(1);
}
... funktioniert! Big Grin

mfg Scheams

Naja, der Preprozessor scheint da noch einiegs zu machen.
Dein bespiel liefert:
Der Sketch verwendet 534 Bytes (1%) des Programmspeicherplatzes.

Code:
int main()
{
  DDRD |= 1<<PD4;
  PORTD |= 1<<PD4;
  while(1);
}
Der Sketch verwendet 138 Bytes (0%) des Programmspeicherplatzes
Er bindet also mindestens die AVR-Header ein.

Code:
#include <avr/io.h>

int main()
{
  DDRD |= 1<<PD4;
  PORTD |= 1<<PD4;
  while(1);
}
Mein altes AVR-Studio 4.18 macht
Program: 46 bytes (2.2% Full)
draus.

Eigentlich ist mir das aber heutzutage ziemlich egal...

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.07.2016, 12:13
Beitrag #7
RE: Arduino und C++
Hey!

Naja der Compiler optimiert halt. Beim ersten Bsp (534 Bytes) werden die Bytes für die Funktionen benötigt.
Beim Zweiten wird die funktion dann halt wegcompiliert und braucht somit weniger Speicher. Ein paar Bytes werden noch da sein da volatile (wenn ich volatile bis jetzt nicht falsch verstanden habe Big Grin) die Variablen dazu zwingt, da zu sein und dem Compiler sagt, sie nicht wegzucompilieren. Die ISR werden warscheinlich auch vorhanden sein.
Im AVR-Studio hast du diese volatile Variablen und Funktionien nicht und dann kommt man auf 46b.

Mir auch und ich würde NIE in meinem Leben in der Arduino IDE AVR schreiben Big Grin

mfg Scheams
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.07.2016, 14:54
Beitrag #8
RE: Arduino und C++
Hallo,

(10.07.2016 12:13)Scheams schrieb:  Naja der Compiler optimiert halt. Beim ersten Bsp (534 Bytes) werden die Bytes für die Funktionen benötigt.
Das macht der Compiler immer, wenn man es ihm gesagt hat, müßte in den Innereien der IDE schauen, welche Optimierungsstufe gestzt wird.
Die arduino.h scheint generell includiert zu werden, sonst würde er die Arduino-Funktionen nicht kennen. Die includiert offenbar die AVR-spezifisschen Sachen abhängig vom Board. Das selbst kostet aber noch keinen Speicherplatz. Das macht erst die Nutzung und da ist der Preprozessor wohl recht gut aufmetzt worde.

Zitat:Beim Zweiten wird die funktion dann halt wegcompiliert und braucht somit weniger Speicher. Ein paar Bytes werden noch da sein da volatile (wenn ich volatile bis jetzt nicht falsch verstanden habe Big Grin) die Variablen dazu zwingt, da zu sein und dem Compiler sagt, sie nicht wegzucompilieren. Die ISR werden warscheinlich auch vorhanden sein.
Die werden garnicht erst eingebunden, der Compiler selbst optimiert nur den Codeablauf. Für das Linken ist der Linker zuständig, der bindet die benötigten Objectfiles zusammen.
Zitat:Im AVR-Studio hast du diese volatile Variablen und Funktionien nicht und dann kommt man auf 46b.
Portzugriffe sind immer volatile. volatile sagt dem Compiler nur, daß der Wert einer Variablen von außen verändert werden kann, also durch Umstände, die er im Programm nicht feststellen kann.
Das gilt für Portzugriffe generell, für den Compiler ist auch PORTB nur eine variable.
Bei Interrupts ist es genauso. Für den Compiler ist es eine Funktion wie jede andere, für ihn wird die nie aufgerufen und alles darin bleibt unverändert.
Auch da muß dafür gesorgt werden, daß er nicht einfach die ganze ISR wegoptimiert, weil sie ja nie aufgerufen wird.

Zitat:Mir auch und ich würde NIE in meinem Leben in der Arduino IDE AVR schreiben Big Grin

Naja, ich mische das, wie ich es gerade brauche.
Der Overhead gerade bei digitalWrite/Read() ist beachtlich.
Ein Bytezugriff auf einen Port ist durchaus 10x schneller als 8x digitalRead() für jeden Pin.

Komme sowieso aus alten µP/µC-Zeiten, da war Assembler die Sprache der Wahl.
Auf den kleinen AVR, da zähle ich auch den Mega328 dazu, erst recht die Tinys, kann man die Vorteile der C++ Klassen der Arduino-IDE sowieso schlecht nutzen, die String- und Stream-Klasse können schnell den Ram auffressen.
Beim ESP8266 macht es dagegen richtig Spaß, 40k Ram und 1MB Flash verfügbar, WLAN sowieso schon da.
Wenn ich da an das AVR-NetIO von denke, das war dagegen eher Strafarbeit. Wink

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino Ethernet mit USB 2 Serial Converter/Welche Einstellungen im Arduino-Sketch lociluke 1 1.113 05.05.2015 13:40
Letzter Beitrag: Bitklopfer
  Arduino Mega-Projekt mit EEPROM auf Arduino Due portieren Foto-Ralf 17 3.139 16.03.2015 12:06
Letzter Beitrag: Foto-Ralf

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste