Forum: Compiler & IDEs Arduino in C und C++ programmieren


von Gerald M. (gerald_m599)


Lesenswert?

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.

von Dr. Sommer (Gast)


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.

von Kai S. (zigzeg)


Lesenswert?

Dr. Sommer schrieb:
> Auf den Arduino's sind
> aber nur Atmel Controller.

Falsch, auch andere e.g. ARM, Intel, ESP8266 ...

e.g. der Arduino DUE, der auf ARM basiert

von Dr. Sommer (Gast)


Lesenswert?

Kai S. schrieb:
> e.g. der Arduino DUE, der auf ARM basiert
Ja, aber ein Atmel ARM...

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.

von Kai S. (zigzeg)


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

von Patrick S. (pad)


Lesenswert?

Du solltest im Prinzip die Controller mit jeder vernünftigen IDE 
programmieren. (z.B. Keil) Das Flashen muss man sich evtl. ein bischen 
Hinfummeln...im schlimmsten Fall sollte das aber auch mit einem ST-Link 
funktionieren.

Gruß

von Kommandozeile vor dem Frühstück für Alle! (Gast)


Lesenswert?

1
$ sudo apt-get install arduino arduino-core arduino-mk
...und sich in arduino-mk einlesen

von Huh (Gast)


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!

von Carl D. (jcw2)


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/

: Bearbeitet durch User
von Markus (Gast)


Lesenswert?


Beitrag #6405260 wurde von einem Moderator gelöscht.
von Dr. Sommer (Gast)


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

von Rolf M. (rmagnus)


Lesenswert?

Es sind auch ehrlich gesagt einige Fehler drin, wie z.B.:
1
for(x= 0; x < 10, x++ ) {...};

Das Komma ist hier falsch und das Semikolon am Ende unnötig, wenn man 
die Klammern setzt.

von Jack V. (jackv)


Lesenswert?

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

In erster Linie ist’s nicht wert, dafür min. 5 Threads aus dem Keller zu 
holen, der Älteste bislang über zehn Jahre alt, um den Link zu diesem 
Bilderbuch im Querformat, mit riesiger Schrift und entsprechend wenig 
Informationen, da reinzuspammen :|

: Bearbeitet durch User
von mh (Gast)


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

: Wiederhergestellt durch Moderator
von Dr. Sommer (Gast)


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.
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jack V. schrieb:
> In erster Linie ist’s nicht wert, dafür min. 5 Threads aus dem Keller zu
> holen

Es waren noch mehr, und ich habe sie mit dem Kommentar an ihn gelöscht, 
dass er bitte seinen eigenen Thread eröffnen möge, wenn er sein Script 
hier diskutiert haben möchte.

Damit darf dieser Thread gern wieder in die Kiste.

von mh (Gast)


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?

: Wiederhergestellt durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

mh schrieb:
> Hast du zufällig mit ähnlichen Lehrmaterialien C gelernt und nennst es
> deswegen Dreckssprache?

Nicht umsonst hat er hier Hausverbot, und ansonsten war C für ihn ja 
sowieso immer die größte Katastrophe der Menschheit.

Beitrag #6453414 wurde von einem Moderator gelöscht.
Beitrag #6460845 wurde von einem Moderator gelöscht.
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.