Forum: Mikrocontroller und Digitale Elektronik Umstieg von Bascom auf C


von Umsteiger (Gast)


Lesenswert?

Hallo,

da die Zukunft der AVRs ja eher unsicher ist und STM32 doch eine 
handvoll Vorteile bietet, würde ich gerne umsteigen.

Der Nachteil: Ich programmiere bisher in Bascom, und das klappt ganz 
gut.

Allerdings supportet Bascom ja nur AVR. Deshalb werde ich wohl oder übel 
umsteigen müssen.
Mir ist die C-Syntax zuwider, haufenweise Klammern, Semikola, usw.!

Deshalb suche ich ein gutes, einsteigerfreundliches Tutorial. Das 
hauseigene finde ich zu theoretisch.

Wer kennt ein gutes?

von Einer K. (Gast)


Lesenswert?

Umsteiger schrieb:
> Mir ist die C-Syntax zuwider,..
Mir auch!

Aber trotzdem, das ist die falsche Einstellung!

Tipp:
Begrüße deine Probleme wie alte Freunde, denn sie sind und bleiben dir 
treu.

von S. M. (lichtmensch)


Lesenswert?

Es gibt da noch Mikrobasic ich glaube das ist Basic für Stm32 & viele 
andere. Aber ob das was taugt weiß ich nicht.

von anonym20 (Gast)


Lesenswert?

ich hab mir vor paar Tagen aus Spaß mal eine App (Android) 
runtergeladen. Grad wenn du schon programmieren kannst und hauptsächlich 
Syntax lernen willst, halte ich das gar nicht für schlecht. Gibt es für 
quasi jede Sprache und heisst "Learn C" usw.

von anonym20 (Gast)


Lesenswert?

Nachtrag: heißen wahrscheinlich mehrere so. Hatte die App von 
"SoloLearn"

von Random .. (thorstendb) Benutzerseite


Lesenswert?

C ist längst nicht so grausig wie viele meinen. BASIC übrigens auch 
nicht :-)

Es ist nur sehr wichtig, sich gleich zu Beginn einen guten Stil 
anzueignen, um übersichtlichen Code und wartbare Programme zu schreiben.

Ich für meinen Teil bin der Meinung, dass C und C++ noch immer die 
wichtigsten Programmiersprachen sind, auch wenn wegen der ganzen 
Smartphones Java z.Zt. die Vorherrschaft hat.

Programmiersprachen wie Java und C# beschützen den Programmierer vor 
seiner eigenen Blödheit, in C/C++ muss man halt wissen, was man tut.

Vor allem in der Mikrocontrollerwelt, wo es häufig drauf ankommt, das 
letzte bischen aus der MCU rauszuholen.

Mit IoT wird da noch einiges kommen.

von Der Andere (Gast)


Lesenswert?


von Stefan (Gast)


Lesenswert?

Umsteiger schrieb:
> Mir ist die C-Syntax zuwider, haufenweise Klammern, Semikola, usw.!

Nur mal so am Rande vermerkt -- wenn man sich mit C num überhaupt nicht 
anfreunden mag, dann gibt es heute ja durchaus sehr gute Alternativen. 
Jedenfalls wenn man kein absoluter Depp ist und etwas Zeit, Lernwillen 
und Eigeninitiative mitbringt. Aber das letztere braucht man für C ja eh 
auch. Nim setzen einige ja schon auf größeren Controllern wie STM32 ein 
-- auch wenn es noch recht rauh zugehen mag. Aber bei echtem Interesse 
gibt es auch Hilfe von den Entwicklern. Etwa 
https://github.com/nim-lang/Nim/issues/4437 und ich hatte schon andere 
ähnliche Projekte gesehen.

Aber natürlich ist C Lernen nicht verkehrt, wahrscheinlich sinnvoller 
als Latein.

von Stefan (Gast)


Lesenswert?

Stefan schrieb:
> ch hatte schon andere
> ähnliche Projekte gesehen.

http://goran.krampe.se/2016/02/25/nim-meets-arduino/

von Peter D. (peda)


Lesenswert?

Umsteiger schrieb:
> Mir ist die C-Syntax zuwider, haufenweise Klammern, Semikola, usw.!

Ja, C wurde speziell für Schreibfaule entwickelt, die keinen 10-Finger 
Blindschreibekurs absolviert haben.
Wichtige Syntaxelemente werden deshalb mit möglichst wenig Zeichen 
kodiert.
Sie lassen sich daher auch schnell lernen und dann mag man diese 
kompakte Schreibweise.
C bietet auch eine große Freiheit, Ausdrücke beliebig lang zu 
kombinieren, da der Zeilenvorschub kein Syntaxelement ist.

von Helmut L. (helmi1)


Lesenswert?

Peter D. schrieb:
> Ja, C wurde speziell für Schreibfaule entwickelt, die keinen 10-Finger
> Blindschreibekurs absolviert haben.

Spaetestens im Alter wenn die Finger nicht mehr so beweglich sind ist 
das ein grosser Vorteil. :=)

von Einer K. (Gast)


Lesenswert?

Peter D. schrieb:
> C bietet auch eine große Freiheit, Ausdrücke beliebig lang zu
> kombinieren, da der Zeilenvorschub kein Syntaxelement ist.
Der Präprozessor scheint das etwas anders zu sehen.....
;-) ;-)

Und überhaupt, die Sprache(Präprozessor), in der Sprache(C)
Mit C++ ist das etwas besser geworden.


Sicherlich ist C in den Jahrzehnten besser geworden!
Heutzutage gibts wenigstens Meldungen, wenn man 2 Buchstaben addiert, 
die Wurzel draus zieht und das Ergebnis dann als Pointer nutzt.
OK, unterdrücken (weg casten) kann man sie immer noch.

Früher konnte man ein Gürteltier auf der Tastatur wälzen, und der 
Kompiler hats klaglos verdaut.


Das alles macht die Sprache nicht schlecht!
Nur unhandlich. Ecken und Kanten.
Eben etwas unangenehm.
Aus meiner Sicht ist C/C++ das Beste für meine kleinen µC.
Forth wäre mir noch lieber, aber das beißt sich etwas mit der Harvard 
Architektur.

von Jim M. (turboj)


Lesenswert?

Peter D. schrieb:
> Ja, C wurde speziell für Schreibfaule entwickelt, die keinen 10-Finger
> Blindschreibekurs absolviert haben.
> Wichtige Syntaxelemente werden deshalb mit möglichst wenig Zeichen
> kodiert.


Nö, das hat man gemacht weil Speicher (besonders RAM) damals noch viel 
teuerer und viel kleiner war als heute. Der Zielrechner wäre heute ein 
besserer Taschenrechner, war damals (fast 40 Jahre her...) aber so groß 
wie ein Schrank und sollte ein Programm in endlicher Zeit übersetzen 
können. Sonderzeichen als Syntax Elemente machen es für den Compiler 
einfacher.

Ein paar ganz olle Altlasten hat man mit C89 beseitigt, danach gab es 
haupsächlich Feinschliff.

von Joachim B. (jar)


Lesenswert?

Peter D. schrieb:
> da der Zeilenvorschub kein Syntaxelement ist.

und der TAB auch nicht

C&P gehts bei Python schon mal öfter schief.

von Der Andere (Gast)


Lesenswert?

Jim M. schrieb:
> Sonderzeichen als Syntax Elemente machen es für den Compiler
> einfacher.

Nicht nur für den Compiler.
Das sinnlose "begin" ... "end" tippen bei Pascal war auch nicht die 
reine Freude.
Wobei der beschissene Griff für eckige und geschweifte Klammern auch 
Murks ist. Mit der US Tastatur war/ist das alles deutlich ergonomischer.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Im Artikel STM32 gibt es den Link:

"MikroE bietet neben Pascal und Basic auch C mit kompletter Oberfläche 
mit Compiler etc. pp relativ günstig"

https://www.mikroe.com/products/#compilers-software

Diese Firma bietet neben C auch Basic und Pascal als Umgebung für die 
STM32.

Wie schnell die allerdings diese Firma die vielen neue µC von ST 
unterstützt weiß ich nicht, da ST ja fast täglich neue µC mit anderen 
Features heraus bringt.

von A. S. (Gast)


Lesenswert?

Peter D. schrieb:
> Ja, C wurde speziell für Schreibfaule entwickelt, die keinen 10-Finger
> Blindschreibekurs absolviert haben.
> Wichtige Syntaxelemente werden deshalb mit möglichst wenig Zeichen
> kodiert.

Das ist ein Missverständnis. Bei 10 Zeilen am Tag und guten IDEs kommt 
es nicht auf die Schreibleistung an.

Die prägnante Schreibweise dient (heute) ausschließlich der Lesbarkeit.

Die Mathematik hat sich 1000e von Jahren mit ausführlichen Schreibweisen 
rumgeärgert, bis irgendwann jemand das Stellensystem einführte. Und 
selbst da hat es noch 1000 Jahre gedauert (nach 1500), bis dieses auf 
Nachkommastellen übertragen wurde. Begin und End (als Beispiel) sind 
einfach wenig effizient. "GetLastMemberOnAlternativeList" kann es 
hingegen sein.

von Piepenheinz (Gast)


Lesenswert?

Der Andere schrieb:
> Jim M. schrieb:
> Wobei der beschissene Griff für eckige und geschweifte Klammern auch
> Murks ist.

Ja, besonders { und [, wenn man gezwungen ist, Alt Gr statt Strg + Alt 
zu benutzen. Bei Vim lege ich schon immer einiges auf Strg + ö, ä, ü.

von Nop (Gast)


Lesenswert?

Der Andere schrieb:
> Wobei der beschissene Griff für eckige und geschweifte Klammern auch
> Murks ist. Mit der US Tastatur war/ist das alles deutlich ergonomischer.

Wie es der Zufall so will, war Ritchie ja US-Amerikaner. Was 
herauskommt, wenn sich jemand mit europäischer Tastatur an eine Sprache 
macht, sieht man ja bei Pascal.


Arduino F. schrieb:
> Früher konnte man ein Gürteltier auf der Tastatur wälzen, und der
> Kompiler hats klaglos verdaut.

LOL! :-)

Nee im Ernst, natürlich kann man in C kryptische Ausdrücke schreiben. Es 
gibt sogar den Obfuscated-C-Contest für besonders verwirrende Programme. 
Aber weder muß man dies, noch sollte man dies für Nutzcode tun.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Jim M. schrieb:
> Peter D. schrieb:
>> Ja, C wurde speziell für Schreibfaule entwickelt, die keinen 10-Finger
>> Blindschreibekurs absolviert haben.
>> Wichtige Syntaxelemente werden deshalb mit möglichst wenig Zeichen
>> kodiert.
>
> Nö, das hat man gemacht weil Speicher (besonders RAM) damals noch viel
> teuerer und viel kleiner war als heute.

Die Größe der einzelnen Syntaxelemente haben praktisch keinen Einfluss
auf den RAM-Bedarf beim Kompilieren (da die Quellcodedatei nie als
Ganzes in den Hauptspeicher geladen werden muss) und schon gar nicht
beim Ausführen von Programmen.

> Sonderzeichen als Syntax Elemente machen es für den Compiler
> einfacher.

Für den Compiler sind Sonderzeichen Zeichen wie alle anderen. Für ihn
ist ein '%' nicht kryptischer als ein 'A'.

Die Sonderzeichen werden ausschließlich verwendet, um dem Programmierer
die Eingabe und das Lesen des Quellcodes zu erleichtern, denn dieses
Beispiel

1
x = (a - 1) * (b + 1);

ist nicht nur schneller getippt, sondern wird auch beim Lesen vom Auge
wesentlich leichter in seiner Struktur erfasst als dieses:

1
assign product of difference of a and 1 and sum of b and 1 to x

Natürlich muss man dazu die Bedeutung der Zeichen '=', '+', '-', '*'
usw. kennen. Da es in C mehr Datentypen gibt als in Basic, ist auch die
Anzahl der Operatoren größer. Dazu kommen noch ein paar "Abkürzungs"-
Operatoren wie bspw '++', die Basic ebenfalls nicht hat. Das hat man
aber sehr schnell gelernt, und ist, wenn überhaupt, höchstens ganz am
Anfang etwas ungewohnt.

Nop schrieb:
> Der Andere schrieb:
>> Wobei der beschissene Griff für eckige und geschweifte Klammern auch
>> Murks ist. Mit der US Tastatur war/ist das alles deutlich ergonomischer.
>
> Wie es der Zufall so will, war Ritchie ja US-Amerikaner. Was
> herauskommt, wenn sich jemand mit europäischer Tastatur an eine Sprache
> macht, sieht man ja bei Pascal.

Auch in Pascal werden [] (für Array-Indizes) und {} (für Kommentare)
verwendet.


Aber zurück zum Thema:

Für den frischen Einstieg in C finde ich dieses interaktive C-Tutorial
nicht schlecht:

  https://www.learn-c.org/

Da es aber – wie praktisch alle Tutorials – nicht den kompletten
Sprachumfang abdeckt, sollte man sich zusätzliche Literatur wie bspw.
den von "Der Andere" empfohlenen toten Baum von Kernighan und Ritchie
besorgen.

Umsteiger schrieb:
> Deshalb suche ich ein gutes, einsteigerfreundliches Tutorial. Das
> hauseigene finde ich zu theoretisch.

Welches meinst du?

von Der Andere (Gast)


Lesenswert?

Nop schrieb:
> Was
> herauskommt, wenn sich jemand mit europäischer Tastatur an eine Sprache
> macht, sieht man ja bei Pascal.

gab es damals schon normierte deutsche Tastaturen?
Meine erste Tastatur konnte man im Dos mit Ctrl-Alt-F1 auf amerikanisch 
und mit F2 wieder auf deutsch umschalten. Der Zeichensatz war in einer 
anderen Farbe auch auf die Tasten gedruckt.
Ich habe das zum Programmieren sehr lange benutzt, nur beim Y und Z 
musste man dann aufpassen.

von Der Andere (Gast)


Lesenswert?

Yalu X. schrieb:
> (da die Quellcodedatei nie als
> Ganzes in den Hauptspeicher geladen werden muss)

Früher hing das schon vom benutzten Editor ab. Beim Commodore CBM-3008 
von meinem Kumpel war das z.B. schon ein Problem.
Da wurde mit jedem Leerzeichen, Zeilenumbruch und den Zeilennummern 
gegeizt, daß der Quellcode (Basic) in den Speicher passte.

von Einer K. (Gast)


Lesenswert?

> x = (a - 1) * (b + 1);
> assign product of difference of a and 1 and sum of b and 1 to x

a 1 - b 1 + * x !

von Dussel (Gast)


Lesenswert?

Yalu X. schrieb:
> x = (a - 1) * (b + 1);
>
> ist nicht nur schneller getippt, sondern wird auch beim Lesen vom Auge
> wesentlich leichter in seiner Struktur erfasst als dieses:
>
> assign product of difference of a and 1 and sum of b and 1 to x
Offtopic: Und Java macht es wieder rückgängig
In C++:
1
Matrix A,B,C,D,E;
2
E=A*B+C*D;
In Java:
1
E=(A.multiply(B)).add(C.multiply(D));
oder so ähnlich. :-)

von Joachim B. (jar)


Lesenswert?

Der Andere schrieb:
> Da wurde mit jedem Leerzeichen, Zeilenumbruch und den Zeilennummern
> gegeizt, daß der Quellcode (Basic) in den Speicher passte.

irgendwann half das nicht mehr und man musste einige Routinen in ASM 
einbauen (lassen).

Glücklicherweise hatten wir dafür einen Werkstudenten der Informatik.

von Umsteiger (Gast)


Lesenswert?

Vielen Dank für die zahlreichen Meinungen.

Ich bin nicht auf eine Programmiersprache fixiert, eindeutiges 
Haupotziel sind Mikrocontroller, die etwas moderner und zukunftssicherer 
sind als die AVR-Familie.
Ich wusste gar nicht, dass es Basic auch für STMs gibt, das werde ich 
mir auch mal ansehen, bevor ich mir eine neue Sprache (welche auch 
immer) aufhalse.

Was ich jetzt rausgelesen habe:
- C ist nicht mehr das Maß der Dinge, es sollte eher C# oder C++ sein
- Pascal und Basic sind auch vertreten
- Python scheint eine Alternative zu sein
- wie zu erwarten gibt's dafür Apps (das müsste aber bei mir iOS oder 
Windows Phone sein)
- tote Bäume sind als Lernmaterial zu empfehlen

Die Grundprinzipien (Timer, Takt, Schleifen, Verzweigungen, Funktionen, 
Subroutinen (gosub) usw.) sind mir ja einigermaßen aus Bascom bekannt. 
Wie die Struktur aussehen muss, weiß ich also ungefähr.

Hauptsächlich geht's darum, diese Strukturen eben nicht mehr mit Bascom, 
sondern mit einer zukunftstauglichen Sprache in Controller zu bringen, 
damit ich bei Bedarf (=AVR tot) umsteigen kann, ohne dann erst einen 
Monat C oder was auch immer lernen zu müssen.

von Einer K. (Gast)


Lesenswert?

Umsteiger schrieb:
> es sollte eher C#
Das gibts nicht auf µC.
(soweit ich weiß)

Umsteiger schrieb:
> - C ist nicht mehr das Maß der Dinge,
Auf µC?
Doch doch....

Mein Tipp:
Lerne C und auch gleich C++.
Dann bist du für die ganze µC Welt offen.
... würde ich mal so sagen ...

von Dussel (Gast)


Lesenswert?

Arduino F. schrieb:
> Mein Tipp:
> Lerne C und auch gleich C++.
> Dann bist du für die ganze µC Welt offen.
> ... würde ich mal so sagen ...
Auch wenn er Arduino im Namen hat ;-), muss ich ihm recht geben.

von Lilalaunebär (Gast)


Lesenswert?

Arduino F. schrieb:
> Umsteiger schrieb:
>> es sollte eher C#
> Das gibts nicht auf µC.

Doch:
http://netmf-tutorial.de/net-micro-framework-c-auf-einem-microcontroller/

Ist aber in diesem Betreich doch etwas exotisch, ich würde es nicht 
empfehlen (obwohl ich C# an sich ganz gut finde).

> Umsteiger schrieb:
>> - C ist nicht mehr das Maß der Dinge,
> Auf µC?
> Doch doch....

Ja, ganz klar.

> Lerne C und auch gleich C++.
> Dann bist du für die ganze µC Welt offen.
> ... würde ich mal so sagen ...

Um C++ sinnvoll auf einem Mikrocontroller einsetzen zu können, muss man 
es schon recht gut beherrschen, würde ich mal sagen.

Umsteiger schrieb:
> ohne dann erst einen Monat C oder was auch immer lernen zu müssen

Zumindest C++ lernt man vermutlich nicht (gut) in einem Monat, wenn man 
nicht nur die Syntax und Grundlagen kennen will, sondern auch Dinge wie 
Idiome, Implementierung der typischen Patterns, komplexere 
Template-Programmierung etc.

von Joachim B. (jar)


Lesenswert?

Arduino F. schrieb:
> Mein Tipp:
> Lerne C und auch gleich C++.
> Dann bist du für die ganze µC Welt offen.
> ... würde ich mal so sagen ...

von Basic auf C sehe ich weniger das Problem, cpp ist für mich immer 
noch ein Rätsel.

Ich progge lieber alles in C nutze aber gerne LIBs (und auch da kann man 
noch Optimierungen in C einbringen)

von Einer K. (Gast)


Lesenswert?

Joachim B. schrieb:
> cpp ist für mich immer
> noch ein Rätsel.
Ich komme halt aus der OOP Ecke...
;-) Heimvorteil ;-)

Delphi, PHP, ein bisschen Java, usw..
Da ist das µC OOP eher wie Fahrrad fahren.

von Umsteiger (Gast)


Lesenswert?

OOP habe ich nie verstanden und mehrmals versucht.

Mag ich einfach nicht.

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.