Umstieg von Bascom auf C

Gast #4900995
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?
Gast #4901213
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.
Persönliche Seite #4901234
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.
Gast #4901258
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.
#4901325
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.
Gast #4901349
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.
#4901463
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.
Gast #4901583
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.
(Firma: EleLa - www.elela.de) #4901597
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.
Gast #4901607
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.
Gast #4901666
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.
Moderator #4901683
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?
Gast #4901685
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.
Gast #4901692
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.
Gast #4901757
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. :-)
Gast #4901897
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.
Gast #4901944
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.

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