Arduino in C und C++ programmieren

Gast #5041614
Lesenswert?

Die Arduino IDE verwendet C++. Da C++ auch fast vollständig zu C 
abwärtskompatibel ist, kannst du C-Code nur mit minimalen Änderungen 
(auf die dich der Compiler auch hinweist) übernehmen. Also erstmal kein 
Grund was anderes als Arduino zu nutzen. Wenn du aber eine bessere IDE 
möchtest oder nicht die Arduino Library nutzen möchtest, kannst du Atmel 
Studio oder eclipse mit den AVR-Plugins nehmen.

Der Code Composer ist nur für TI Mikrocontroller. Auf den Arduino's sind 
aber nur Atmel Controller.
#5041631
Lesenswert?

Dr. Sommer schrieb:
> Ja, aber ein Atmel ARM...

Stimmt, schlechtes Beispiel.

> Kai S. schrieb:
>> Falsch, auch andere e.g. ARM, Intel, ESP8266 ...
> Die Exoten hab ich mal außer Acht gelassen, den hätte der OP auch
> erwähnt. Mit Code Composer kann man auch die nicht programmieren.

Mein Punkt war eher das die Arduino IDE nicht auf Atmel Controller 
begrenzt ist (auch wenn es der Schwerpunkt ist).
Gast #5041787
Lesenswert?

Gerald M. schrieb:
> Ich suche nach einer Programmierumgebung, mit der an Arduino in C
> und
> eventuell C++ programmieren kann.
> Gibt es da empfehlungen.
> Beispielsweise CodeComposer. Hab damit Tiva erfahrung, nur möchte ich
> mich erst nach ein paar ratschlägen festlegen.

Eine Möglichkeit wäre noch das AVR-Studio (oder ATMEL Studio) und dort 
den AvrDude als Programmer einbinden. Geht prima!
#5042092
Lesenswert?

Es gibt ein fertiges Eclipse-Bundle namens "Sloeber", mit dem man 
gefühlt jede Arduino-Plattform becoden kann. Inklusive automatischer 
Installation der benötigten Toolchain/Libs. Für die ausgewählten 
Plattformen, aber wenn man bisher AVR gemacht hat und morgen kommt ein 
ESP vorbei, dann braucht es 5 Clicks und 10min Download und es kann 
losgehen.

http://www.baeyens.it/eclipse/
Beitrag #6405260 wurde von einem Moderator gelöscht.
Gast #6405297
Lesenswert?

Christof E. schrieb im Beitrag #6405260:
> Hier mein Kursskript in Ansi-C
1
extern C  //Die „extern“ Deklaration ist hier notwendig{
2
#include „main.h“
3
#include „uart328.h“
4
};

Das ist kein Ansi-C, das ist überhaupt kein C, sondern C++!
1
#include <avr\io.h>
2
#include <avr/sfr_defs.h>

Warum so inkonsistent? Das kompiliert so nur unter Windows... Das sollte 
man sich gar nicht erst angewöhnen.
1
#define _BIN_AND_ &//Binär AND
2
#define _BIN_OR_  | //Binär OR

Das sind ungültige Bezeichner, die darf man in C nicht selbst definieren 
(fangen mit Unterstrich + Großbuchstabe an). Wenn man lieber Wörter als 
& oder | schreibt, kann man auch einfach "bitand" und "bitor" schreiben 
und braucht kein Makro.

Binär-Literale wie "DDRC  =  0b0000 0001;" gibt es in Ansi-C nicht.

"Eine übersichtliche  Anzahl Regeln für Variablen, Konstanten, 
Funktionen, sogenannte Präfix-Bezeichner,haben sich bewährt. Diese sind 
fast selbsterklärend und stammen von Profi-Programmieren und werden so, 
oder so ähnlich,  in Firmen angewendet. "

schon lange nicht mehr, weil das zwangsläufig in einem Chaos endet:
https://en.wikipedia.org/wiki/Hungarian_notation#Disadvantages

Warum betonen so viele Leute besonders, ANSI-C zu machen, also den 30 
Jahre alten längst überholten Sprachstandard, nutzen dann aber doch 
Erweiterungen oder gar C++ ...?
Gast #6405339
Lesenswert?

Rolf M. schrieb:
> Es sind auch ehrlich gesagt einige Fehler drin

Die private Handynummer ist interessant...

Ich hab so viele Fragen. Ist das Skript in der Arbeitszeit erstellt 
worden? Weiß der Arbeitsgeber von dem Spendenaufruf? Gibt es Leute die 
tatsächlich etwas spenden? Ist es repräsentativ für die Physik oder die 
ganze Uni Regensburg? Hat die Uni ein © (erste Seite) oder steht es 
unter CC BY-NC-SA 3.0 AT (zweite Seite)?
Gast #6405720
Lesenswert?

Mehr Fehler:
1
round( 127 + 127.5 * (sin( 2*M_PI* (iNN/256.0)) + 1 ) );

M_PI gibt's in ANSI-C nicht. Das ist eine GNU-Erweiterung.

Ein Parser ist übrigens ein Algorithmus oder Programm zum umwandeln von 
Wörtern aus formalen Sprachen in einen Syntax-Baum. Du verwendest das 
irgendwie als Alias zu "Index", insbesondere in Kontexten welche Text 
erzeugen statt anaylsieren?! Eine Variable "parser" zu nennen ist 
IMO nur bei Anwendung von OOP sinnvoll, wenn die Variable ein komplettes 
Objekt mit zugehörigem Parser-Algorithmus enthält.

Es klingt so als würde über UART immer ASCII verwendet. Das ist ja 
keineswegs so.

"?? ist das nun „union“ oder wird ein weiteres Byte verbraten ?"
Das hat nichts mit union's zu tun, da steht ja auch nichts davon. Und 
ja, es ist nur 1 Byte.

"// abereinvolles“int” imSpeicher. Vorteil: Keiner."

Es ist nur 1 Byte. Eine Bohrmaschine am vorderen Ende festhalten hat 
auch wenige Vorteile, aber deswegen sind Bohrmaschinen nicht völlig 
nutzlos...

"MERKE: UNION ELEMENTE teilen sich den selben Speicherplatz. Hier 
reinschreiben,  woanders auslesen."

Genau dieser Missbrauch von union's ist in C implementation defined 
(d.h. der Compiler kann irgendwas draus machen) und in C++ ganz 
verboten.

"Das seltene UNION. Eine Art verkappter Typecast"

unions existieren lediglich zum Speicher sparen. Sie sind nicht zum 
Typumwandeln gemacht, auch wenn viele das so machen und das anscheinend 
hier sogar Anfängern beigebracht wird...

"Macht man das nicht, legt der Compiler  Const-Strings nicht nur im 
Programmspeicher sondern auch im wertvollen RAM ab.Beim PC ist das egal"

Beim PC ist beides im RAM...
1
#include <LiquidCrystal440.h>
2

3
LiquidCrystal lcd(13,12,11,10,5,4,3,2); //RS, RW, E2, E1, D4, D5, D6, D7

Das ist C++ mit Arduino-Libraries und nicht in echtes Ansi-C 
übersetzbar.

"in GNU-C von WinAVRwird anstelle von charinteger wordusw. eine 
einheitliche Form verwendet, die die Bitbreite angibt"

C99 hat diese Fixed-Width Integer Typen auch. Aber eigentlich ging es 
doch um ANSI-C? Und die ungarische Notation ist wie gesagt mittlerweile 
überholt und wird nicht mehr angewendet.

"ANSI-C deshalb, weil es ideale Methoden zur Bitmanipulation bietet und 
auch ansonsten professionell ausgestattet ist."

Ansichtssache. Eine Sprache, die erfordert, alle Variablen am Anfang der 
Funktion zu deklarieren und damit unübersichtliche Deklarations-Haufen 
zu produzieren, und somit auch nicht verhindert dass man eine Variable 
versehentlich liest bevor man etwas sinnvolles geschrieben hat ist nicht 
so super professionell. Professionellere Sprachen (wie C99, C11, C++) 
ermöglichen so etwas wie "int x = 42;" mitten in der Funktion; d.h. man 
kann x nicht lesen bevor man es nicht definiert und initialisiert hat.

ANSI-C verwendet man eigentlich nur, wenn man eine maximal portable 
Bibliothek schreiben möchte, die auch wirklich unter jedem antiken 
obskuren Compiler funktioniert, der in den letzten 20 Jahren nicht 
aktualisiert wurde. Sich erst auf ANSI-C einschränken, aber dann doch 
GNU-spezifische Dinge wie PROGMEM oder binär-Literale verwenden, 
verschenkt diesen Vorteil komplett und bedeutet nur unnötige Arbeit. Da 
kann man auch direkt GNU-C11 nutzen und verliert nichts.
Beitrag #6405727 wurde von einem Moderator gelöscht.
Gast #6405740
Lesenswert?

Reife Leistung schrieb im Beitrag #6405727:
> Da steckt jemand Mühe und Zeit in eine Arbeit, die insbesondere
> Anfängern bei der Einarbeitung in eine Dreckssprache erleichtern soll
> -da knackt eine der Majestäten, die sich "Moderator" nennen diese Arbeit
> weg.

Wenn sich jemand Mühe gibt, darf man sein Werk nicht kritisieren? Ich 
persönlich habe deutlich höhere Anforderungen an das Lehrmaterial an 
einer Universität.

Hast du zufällig mit ähnlichen Lehrmaterialien C gelernt und nennst es 
deswegen Dreckssprache?
Beitrag #6453414 wurde von einem Moderator gelöscht.
Beitrag #6460845 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren