Forum: Mikrocontroller und Digitale Elektronik Welche Programmiersprachen benutzt ihr ?


von Torsten (Gast)


Lesenswert?

Hallo Leute,

da ich im Bezug auf Mikrocontroller noch keine Erfahrung habe und ich 
mich seit kurzem intensiv damit beschäftige habe ich eine Frage an euch.

Was für Programmiersprachen benutz Ihr ?
Wo liegen welche Vor- und Nachteile ?
Bsp. Ist Basic langsamer wie beispielsweise C; Funktionsumfang ?
Was würdet Ihr mir empfehlen ?

Ich habe vor Jahren mit Basic und Delphi Programmiert, und wollte nun in 
die Mikrocontrollerwelt abtauchen. Dazu habe ich gestern zunächst erst 
mal ein ATMEL Butterfly bestellt. Ich möchte auch nicht unbedingt 
mehrere Programmiersprachen lernen müssen, so nach dem Motto „Fang man 
erst mit Basic an“. Wenn ich am Ende sowieso eine andere lernen „muss“.
Was sagt Ihr dazu ?

Grüße Torsten

von sven s. (Gast)


Lesenswert?

c

genauer benutz ich den gcc compiler (winavr) zusammen mit dem avr 
studio.

von Rahul, der Trollige (Gast)


Lesenswert?

Die Programmiersprache ist (erstmal) völlig egal (es gibt aber wohl kein 
Delphi für AVR...).
Wichtig ist es, sich mit dem Datenblatt des Controllers auseinander zu 
setzen, sich auch mal die Tutorien anzugucken
(C: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
AVR-Assembler: http://www.mikrocontroller.net/articles/AVR-Tutorial)
und wenn man sich z.B. für Bascom (Basic-Dialekt für AVR) entschieden 
hat, sich dessen Handbuch genauer anguckt, BEVOR man hier Fragen stellt.
Dann ist es natürlich auch wichtig, erstmal zu gucken, ob nicht jemand 
anders schon das gleiche Problem hatte (Suchfunktion des Forums/Google).

>Ist Basic langsamer wie beispielsweise C; Funktionsumfang ?
Vielleicht nicht langsamer, teilweise aber wesentlich 
resourcenunfreundlicher, sofern man die vorgegebenen Funktionen benutzt.

von jmoney (Gast)


Lesenswert?

Ich habe zuerst mal angefangen, mich mit Assembler durch die 
Datenblätter zu wühlen. Mittlerweile bin ich bei C gelandet und denke, 
dass mir der Einstieg über Assembler geholfen hat. Ich hatte vorher noch 
keine Erfahrung mit C, lediglich ein wenig Delphi. Mit ANSI C kommt man 
aber ziemlich schnell zurecht, wenn man schon mal eine andere 
Programmiersprache benutzt hat.
Viel langwieriger meiner Meinung nach ist das Erlernen der Vorgänge im 
µC. Wenn man hardware-Funktionen benutzen will (und nicht eventuelle 
library-Funktionen des Compilers nutzt), muss man sowieso einzelne 
Register bearbeiten. Und das geht wiederrum genauso schnell in 
assembler.
Für die ersten kleinen "Hallo Welt"-Programme ist assembler also gar 
nicht verkehrt.
Ich habe aber auch schnell gemerkt, dass man in assembler schon sehr 
strukturiert und geplant vorgehen muss, damit man nicht sofort den 
Überblick über den eigenen Code verliert. Eine höhere Sprache wie C oder 
Pascal erleichtert so eine Strukturierung wie ich finde erheblich. 
Datenblätter lesen und verstehen ist aber für hardwarenahe 
Programmierung auch in Hochsprachen unerlässlich.
Ein anderes Thema ist die Verfügbarkeit. Einen Assembler bekommst du 
sicher zu jeder Architektur kostenlos. C gibt es für AVR mit dem gcc, 
alles andere kostet Geld oder ist in einer kostenlosen Version in der 
Codegröße oder Nutzungsdauer beschränkt. Zu nennen wäre da aber noch 
BASCOM für Basic oder AVRco Pascal. Vielleicht willst du auch gar nicht 
bei AVR bleiben. Für Microchip PIC gibt es beispielsweise auch schöne 
Compiler, allerdings auch fast alle kostenpflichtig. Mit anderen 
Architekturen hatte ich noch nicht zu tun.
Einen C-Compiler wirst du aber so gut wie für jeden Controller auf dem 
Markt finden. Wenn du vielleicht mal professionell mit den Dingern 
arbeiten willst, führt wohl kein Weg an C vorbei.

von Torsten (Gast)


Lesenswert?

Danke für die wirklich ausführliche Antwort "jmoney".
Vieleich mögen sich noch weitere zu dem Thema äußern.

grüße
Torsten

von Stefan (Gast)


Lesenswert?

C weil's für mich einfach am bequemsten ist. Besonders, weil ich als 
Hobbyloge nicht auf einen µC fixiert bin. Mal mache ich was mit AVR, mal 
mit ARM, mal mit R8C. Ich bin nicht mehr so fit, um jedes Mal im Kopp 
auf den passenden Assembler Instruction Set umzuschalten. Ich bin froh, 
wenn ich das mit den Spezialregistern schaffe. Vor Assembler schrecke 
ich nicht grundsätzlich zurück, beschränke mich aber darauf beim 
Debuggen. Die handvoll Befehle kann ich in dann nachschlagen.

von dschedsche (Gast)


Lesenswert?

C und wenn nötig assembler implementieren. grade bei zeitkritischen 
funktionen.

von _sk_ (Gast)


Lesenswert?

C gibt es für --jeden-- Microcontroller. Bei jeder anderen Sprache 
kannst Du Glück, aber auch Pech haben.

In Assembler will ich heute kein komplettes Projekt mehr machen müssen. 
Assembler ist ok zum Kennenlernen des Processors und um KLEINE 
zeitkritische Programmteile effizient zu programmieren. In einem großen 
Projekt verlierst Du aber schnell den Überblick. Es gibt viele 
assembler-typische Bugs, die man sich mit den Hochsprachen spart.


Viele Grüße, Stefan

von F.H. (Gast)


Lesenswert?


Ich habe mich für die Pic's von Microchip entschieden.

Da ich auf eine Hochsprache nicht verzichten wollte,habe ich mich auf
die Suche nach einer Programmiersprache für diese Controller gemacht.

Eine visuelle Programmierspache:
http://www.parsic.de/
Ein Tip für diejenigen,die keine Hochsprache erlernen möchten.
Das Preis-Leistungs-Verhältnis ist gut
Der Programmierer sollte eine Billig-Version für den 16F84 herausgeben.

Basic:
http://www.pic-basic.de/
Eine Programmierspache von der,hoffentlich noch eine Menge zu erwarten
ist,derzeit,im Vergleich zu anderen Produkten, leider ein noch zu
schwaches Preis-Leistung-Verhältnis(wenig unterstützte Controller).
Der Programmierer sollte eine Billig-Version für den 16F84 herausgeben.

Basic:
http://www.il-online.de/il_indx1.htm
Dieses Basic ist sehr leistunsfähig,leider liefen meine Applicationen in
der Demoversion nicht auf dem 16F84.(wie angegeben). Die schwefällige
Kommunikation mit dem Hesteller bei Problemlösungen hat zum NEIN, bei
diesem Produkt geführt.
'********************************************************************
Das theoretisch beste Basic für Pic's wäre(meiner Meinung nach):
http://www.mikroelektronika.co.yu/german/compilers.htm
Leider habe ich mit einer Testversion die einfachsten Dinge nicht zum
laufen bekommen,der Support war gleich 0,vielleicht hat ja schon einmal
jemand positive Erfahrungen gemacht ?
Wenn funktionsfähig, 1.ste Wahl.
Erste Wahl,weil Debugger integriert.
**********************************************************************
Die Entscheidung fiel auf:
 http://www.picbasic.org/proton_lite.php
Ein leicht zu verstehendes Produkt,ein an die alte Basic Stamp
angelehnter
Befehssatz.
Ein Support in Punkto Programmierung war bisher nicht nötig.
Nachteil:
Ich habe eine Version,bei der, bei Defekt des Rechners,eine neue
Registration notwendig wird,das kann dann z.B. eine Woche dauern,bis man
wieder arbeitsfähig ist.
**********************************************************************
Sicher gibt es weitere, unerwähnte Umgebungen,aber die obigen habe ich
ausprobiert.

mfg F.H.



von Mikrocon T. (-42-)


Lesenswert?

Für AVRs ist BASCOM das Beste was es auf der großen ganzen Welt gibt. Da 
ich dafür zu blöd bin, programmiere ich in Assembler.

MFG

von Rahul, der Trollige (Gast)


Lesenswert?

*lol

von Stephan H. (stephan-)


Lesenswert?

bin für C zu blöd, und mache deshalb Assembler...8051

von Peter D. (peda)


Lesenswert?

F.H. wrote:

> Ich habe mich für die Pic's von Microchip entschieden.

Dann solltest Du eigentlich wissen, daß PIC nicht gleich PIC ist.


> schwaches Preis-Leistung-Verhältnis(wenig unterstützte Controller).
> Der Programmierer sollte eine Billig-Version für den 16F84 herausgeben.

Nun für Hochsprachen sind die kleinen PICs nur mit großen Bauchschmerzen 
zu verwenden. Ihnen fehlen einfach zuviele wichtige Befehle.
In nem anderen Thread hatte ich ja kürzlich gezeigt, was für 
schnuckelige Befehle bei anderen 8Bittern das Leben wesentlich einfacher 
machen.


Der Fokus der PIC-Hochsprachenentwickler liegt daher bei den PIC18xxx, 
die anderen 8Bittern befehlsmäßig nahekommen.
Und das wird sich kaum nach abwärts hin ändern.

Bzw. ein 16F84 Compiler würde nicht billiger sondern teurer sein, da er 
ja aufwendiger zu entwickeln wäre.


Peter

von F.H. (Gast)


Lesenswert?

F.H. wrote:

> Ich habe mich für die Pic's von Microchip entschieden.
Dannegger:
Dann solltest Du eigentlich wissen, daß PIC nicht gleich PIC ist.

Antwort: Darum steht da ja auch: Pic's von Microchip


> schwaches Preis-Leistung-Verhältnis(wenig unterstützte Controller).
> Der Programmierer sollte eine Billig-Version für den 16F84 herausgeben.

Dannegger:
Nun für Hochsprachen sind die kleinen PICs nur mit großen Bauchschmerzen
zu verwenden. Ihnen fehlen einfach zuviele wichtige Befehle.
In nem anderen Thread hatte ich ja kürzlich gezeigt, was für
schnuckelige Befehle bei anderen 8Bittern das Leben wesentlich einfacher
machen.

Antwort:
Dann schau Dir mal:
http://www.picbasic.org/proton_lite.php
an. Sehr effizienter Code,ich programmiere damit die meisten 
Durchschnittsanwendungen 10x schneller,als unsere Ing's in Assembler,nur 
in wenigen Ausnahmen kommt es vor , in Assembler programmieren zu 
müssen.

Dannegger:
Der Fokus der PIC-Hochsprachenentwickler liegt daher bei den PIC18xxx,
die anderen 8Bittern befehlsmäßig nahekommen.
Und das wird sich kaum nach abwärts hin ändern.
Antwort: Klar,Die 18er sind im kommen

Dannegger:
Bzw. ein 16F84 Compiler würde nicht billiger sondern teurer sein, da er
ja aufwendiger zu entwickeln wäre.

Blödsinn:
Antwort: Hättest Du dir die Link's angesehen,so hättest Du bemerkt,das 
SÄMLICHE oben genannten HERSTELLER,den 16F84 sowieso integriert haben.
Der 16F84 ist für kommerzielle Anwendungen viel zu teuer,somit könnte 
man eine Programmierumgebung nur für diesen Chip billig anbieten,da nur 
für Bastler interessant.




von Oschi (Gast)


Lesenswert?

Ich gehöre zu denen, denen das Leben zu kurz fuer C ist. Alles andere 
ist gut. Zum Glück gibt's hie und einen Pascal compiler.

O.

von sven s. (Gast)


Lesenswert?

an alle denen C zu schwer ist oder sie "zu blöd sind" kann ich nur sagen 
das wenn sie mit assembler zurecht kommen C ein leichtes für sie sein 
sollte.

wenn ich nur daran denke in assembler eine formel umzusetzen am besten 
noch mit 16 oder 32 bit auf einem z.b. avr... da würd ich mich lieber 1 
wochenende lang über ein C buch hocken.

basic ist auch nicht schlecht kann mich aber nicht dafür begeistern.

von Gast (Gast)


Lesenswert?

>Zum Glück gibt's hie und einen Pascal compiler.
Ich dachte, ich habe von fast allen Programmiersprachen schon mal 
gehört. Aber was ist hie?

Ich programmierer alle meine Anwendungen mit Logo. Ist zwar recht 
langsam, sieht aber schnuckelig aus, wenn das Schildkrötendreieck die 
Umrandungen von Buttons, Fenstern usw. Linie für Linie zeichnet.

von Pffft (Gast)


Lesenswert?

>an alle denen C zu schwer ist oder sie "zu blöd sind" kann ich nur sagen
>das wenn sie mit assembler zurecht kommen C ein leichtes für sie sein
>sollte.

Es geht weniger um packen koennen, als ums wollen. Es ist mir zu blöd. 
Nur weil Kernigham & Ritchie keinen Bitset/Bitclear Befehl hatten, hat C 
immer noch keinen. Jeder Controller kann den. Und ich soll einen 
kryptischen Bandwurm deswegen hinschreiben. Nee.

P.

von Mikrocon T. (-42-)


Lesenswert?

C iss mir zu kryptisch.

MFG

von guro (Gast)


Lesenswert?

> Es geht weniger um packen koennen, als ums wollen. Es ist mir zu blöd.
> Nur weil Kernigham & Ritchie keinen Bitset/Bitclear Befehl hatten, hat C
> immer noch keinen. Jeder Controller kann den. Und ich soll einen
> kryptischen Bandwurm deswegen hinschreiben. Nee.

in c ganz einfach:
a |= 0x40;  // setzt bit 6
b &= ~0x02; // löscht bit 1

jeder mittelmässige c-compiler setzt das direkt in die entsprechenden 
bit-setz/clear befehle um
:-)

von Jürgen C (Gast)


Lesenswert?

Hallo,

ich programmiere AVR mit Bascom.

a.6 = 1    'setzt das Bit 6 der Variablen a
b.1 = 0    'löscht das Bit 1 der Variablen b

Kommt meiner Denkweise näher als die Schreibweise von Guro in C.
Was jetzt Bascom daraus macht muss ich nicht wissen , da meine
Anwendungen bisher nicht Zeitkritisch sind.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

C ist eine echt miese Programmiersprache, aber es ist nun mal die beste 
die es für Controller gibt.

von Pffft (Gast)


Lesenswert?

Es gibt 2 Ansätze bits zu setzen

a |= 0x40;  // setzt bit 6
a |= 1 << 6;  // setzt bit 6

Wobei der zweite Weg eine Namensgebung erlaubt.

a |= 1 << TxEn;  // setzt bit 6

Wobei man natuerlich wissen muss, dass TxEn am PortA klebt.

Viel einfacher, auch aus dokumentierender Sicht ist doch

TxEn[@PortA,6]:bit;

TxEn:=1;  TxEn:=0;

Ganze Generationen von C Programmiern werden verarscht mit komplizierter 
Schreibweise weil irgendwelche Komitees von alten Sesselklebern, von 
denen natuerlich keiner mehr programmiert, keine Lust haben das zu 
aendern. Das haette man schon vor 20 Jahren aendern koennen.

P.

von Pffft (Gast)


Lesenswert?

Die Güte einer Programmiersprache kann man übrigens auch daran messen, 
wielange es in 2,4,6 Jahren dauert eine Aenderung zu machen.

P.

von Oliver (Gast)


Lesenswert?

Für ich las Hobby-MikrocontrollerBastler C. Sollte es irgendwann mal für 
Hobbyisten bezahlbare Mikros mit richtig viel SRAM geben, wäre C++ das 
Mittel meiner Wahl, aber bis dahin halt C. Aktuelle 
Pascal-Implementierungen kenne ich nicht, die, die ich kennengelernt 
habe, waren zur hardwarenahen Programmierung ungeeignet.

Ich habe während meiner Studienzeit einiges im Bereich NC-Steurungen 
programmiert. In Pascal, C, C++, und immer wieder Assembler. Erste 
Programmiererfahrungen gabs zur Schulzeit in Basic. Mit allen Spachen 
kann man problemlos völlig strukturlose, schwer zu lesende und gar nicht 
zu wartende Programme schreiben. Saubere Programmstrukturen, definierte 
Schnittstellen, wiederverwendbare Module bekommt man auch mit allen hin, 
allerdings erfordert das mit Assembler höchste Disziplin, und mit Basic 
geht es schlicht und einfach gar nicht. Vielleicht ja mit Visual Basic 
auf dem PC, das kenne ich nicht.

Ich erfasse ein paar Daten an meiner Heizung mit einer C-Control, und 
jedes mal, wenn ich da wieder Basic anwerfen muß, bekomme ich fast 
Schreikrämpfe. Für 20-zeilige Miniprogramme, quick and dirty, ist das 
prima, für mehr aber nicht.


Meine Meinung
Oliver

von Michael U. (Gast)


Lesenswert?

Hallo,

für meine Projekte war bisher Assembler die erst Wahl.
Voreingenommen, weil auch schon Z80, 6800, 6510 Assembler. ;)

Man kann auch in Basic saubere Strukturen programmieren, allerdings: ASM 
zwingt dazu mehr oder weniger schnell, wenn man seinen eigenen Kram in 4 
Wochen noch verstehen will, C zwingt auf Grund seiner Struktur dazu, bei 
Basic muß man es ganz von alleine machen, weil es eben auch völlig ohne 
geht (Spaghetti-Code eben).

Ich muß auch in Basic nicht zwingen dutzende GOTO verwenden, nur weil es 
geht.

Für meine Projekte habe ich bisher mit C meist das Problem, daß mir die 
komplexen Rechenergeschichten durch Bibliotheken bisher nicht wirklich 
fehlten.
Bit-Schubsereien sind mir da in ASM lieber.
Ich bin auch kein Freund von Universal-Bibliotheken, eher von 
Teilebaukästen. UART-Init mit den nötigen Berechnungsformeln für die 
Registerwerte kann ich in ASM genauso schnell kopieren, SendByte und 
ReceiveByte auch.
Routinen, die Register nach ASCI wandeln, auch für 16Bit-Werte liegen 
irgendwo rum usw.
Meine LCD-"Bibliothek" besteht genau aus LCD_Init, LCD_Write_Line, 
LCD_Clear_Line. Ich schreibe bis jetzt immer eine komplette Zeile, das 
hat noch nie wirklich gestört. Sollte es eine Ausnahme geben, baue ich 
mir die eben und setze sie wieder ein, wenn nötig.
Wozu soll ich aber diese Funktionen immer mit einbauen, nur weil ich sie 
in einem von hundert Fällen mal brauche?

Alles persöhliche Meinung von mir... ;)

Gruß aus Berlin
Michael



von Peter D. (peda)


Lesenswert?

Michael U. wrote:


> C zwingt auf Grund seiner Struktur dazu, bei
> Basic muß man es ganz von alleine machen, weil es eben auch völlig ohne
> geht (Spaghetti-Code eben).

Auch in C kann man Spaghetti Code schreiben, einfach main(){... und los.
Aber C macht es einem leicht, in Funktionen zu schreiben, Basic dagegen 
macht Spaghetticode leicht.

Und das ist der Hauptunterschied, niemand kann 1.000 Zeilen Spaghetti 
verstehen, 10.000 Zeilen in Funktionen unterteilt dagegen schon.

Man sieht das sehr deutlich, wenn hier Bacom Quelltext gepostet wird, 
sind die Antworten rar. Dauert eben erheblich länger da durchzusteigen.

Auch, wenn man von Assembler aufsteigen will, ist C viel schöner, da man 
dort ja die ganzen indirekten Pointerzugriffe machen kann, wie unter 
Assembler.


> Für meine Projekte habe ich bisher mit C meist das Problem, daß mir die
> komplexen Rechenergeschichten durch Bibliotheken bisher nicht wirklich
> fehlten.

Unter C liegen alle Bibliotheken in der Regel als Quelltext vor und man 
kann sie anschauen, wie sie funktionieren oder auch modifizieren, wenn 
man einen Bug entdeckt.

Unter Bascom hat man aber nur Legosteinchen in die man nicht reinsehen 
kann.
Gerade bei größeren Programmen krachts dann gewaltig, weil man eben 
nicht die Seiteneffekte der Legosteinchen erkennen kann.


> Bit-Schubsereien sind mir da in ASM lieber.

Ist ne reine Gewöhnungsssache, die 1<<Bit Operatoren hinzuschreiben, 
nach einem Tag C proggen merkste das garnicht mehr.


Bezüglich ASM mit Hochsprache mixen ist meine Meinung, unbedingt sein 
lassen.
Es zerstört total die Portabilität und bringt rein garnichts. Was sind 
1000 eingesparte Zyklen je Sekunde (0,005%).


Peter

von Joe (Gast)


Lesenswert?

> C und wenn nötig assembler implementieren. grade bei zeitkritischen funktionen.

Dieses Argument kommt immer wieder und ich möchte gerne mal ein Beispiel 
sehen, aus meiner Sicht blödsinn.

> C gibt es für --jeden-- Microcontroller. Bei jeder anderen Sprache kannst Du 
Glück, aber auch Pech haben.

So ist es, das war auch für mich der Grund. Immer wieder einen neuen 
Assembler, nach dem 2en hatte ich die Faxen dicke.
Allerdings muß ich sagen das ich 15 Jahre lang Assembler programmiert 
habe und es zu weilen noch verwende.

> bin für C zu blöd, und mache deshalb Assembler...8051

> Ich gehöre zu denen, denen das Leben zu kurz fuer C ist.

Kann ich nachvollziehen. Die die C beherrschen verweisen auf K&R, 
genauso gut könnte man Laurel & Hardy empfehlen.
Ich kenne kein schlechteres C Buch, aber so ist es. Hat man den Einstieg 
gefunden so ist der K&R wieder zu gebrauchen.

Man muß davon ausgehen das Fachbücher von Leuten geschrieben werden die 
wissen wie es geht und genau hier liegt das Problem ;-))

> C iss mir zu kryptisch.
Das kann es sein, muß es aber nicht. Es liegt an dir.

> an alle denen C zu schwer ist oder sie "zu blöd sind" kann ich nur sagen
das wenn sie mit assembler zurecht kommen C ein leichtes für sie sein
sollte.

Siehe Kommentar "blöd". Im Prinzip stimme ich hier voll zu aber häufig 
scheint eben nur der Einstieg das Problem zu sein, ging mir auch so.
Hat man den Einstieg so wird man in C eine Eleganz entdecken die 
Assembler weit vorraus ist.

> Nur weil Kernigham & Ritchie keinen Bitset/Bitclear Befehl hatten, hat C immer 
noch keinen.

Na ja, beschäftige dich mit C für MC's und du wirst sehen das die 
Aussage falsch ist.

> C ist eine echt miese Programmiersprache, aber es ist nun mal die beste die es 
für Controller gibt.

Der gefällt mir.

Fazit: Wer MC's im profeesionellen Umfeld programmieren will kommt an C 
nicht vorbei. Wenn es Hobby ist dann ist es eh wurscht.

von Peter D. (peda)


Lesenswert?

Joe wrote:
>> C und wenn nötig assembler implementieren. grade bei zeitkritischen funktionen.
>
> Dieses Argument kommt immer wieder und ich möchte gerne mal ein Beispiel
> sehen, aus meiner Sicht blödsinn.

Ja aber voll und ganz meine Meinung !!!

Es ärgert mich zwar, daß AVR-GCC in jedem Interrupthandler 3* völlig 
umsonst pusht und popt (*), aber so richtig stören tuts trotzdem nicht.


Peter

(*)
Wenn einfach als Zero R2 und als SREG-save R3 definiert würden, wären 2* 
"PUSH R0" und 1* "PUSH R1" erspart geblieben.

von Dirk (Gast)


Lesenswert?

Ich benutze hauptsächlich als Prossesor AVR Mega Serie (Preis/Leistung)
daher finde ich Bascom und FastAVR in Verbindung mit Assembler mit
Assembler Routienen am Besten.

Dir Programmiersprache C auch zu Kryptisch.

MfG

von Peter D. (peda)


Lesenswert?

Joe wrote:

> Siehe Kommentar "blöd". Im Prinzip stimme ich hier voll zu aber häufig
> scheint eben nur der Einstieg das Problem zu sein, ging mir auch so.
> Hat man den Einstieg so wird man in C eine Eleganz entdecken die
> Assembler weit vorraus ist.


Ich hab jahrelang Assembler gemacht.
Ein Kollege hatte etwa 10.000 Zeilen C aufm 8051 geschrieben und die 
Firma verlassen.
Ich mußte dann in diesem Programm Erweiterungen einbauen.
Ich weiß zwar immer noch nicht, was jede der 10.000 Zeilen genau macht, 
aber die Änderungen laufen einwandfrei und seitdem mache ich auch alles 
andere in C.
Ich kann nur sagen, daß ich diesem Kollegen sehr dankbar dafür bin.


Peter

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Ich programmiere in Assembler, hab damit angefangen und auch damit 
weiter gemacht. Zwischendurch hab ich auch mal in C programmiert, 
gefällt mir aber irgendwie nicht so richtig. Bis jetzt habe ich aber 
auch noch nichts kompliziertes auf nem µC gerechnet. Ich denke wenn man 
Floatingpoint Zahlen durcheinander teilen muss wird das mit Assembler 
langsam unangenehm ;) Bisher brauchte ich das aber auch noch nciht und 
ich denke auch, dass man auf so einem kleinen µC sehr selten bis nie FP 
braucht ;)

von Joe (Gast)


Lesenswert?

Hauke,

habe FP sowohl in Assembler als auch in C verwendet, im Prinzip beides 
kein Problem. Aber heute schreibe ich keine Matheroutinen mehr in 
Assembler. Mein letztes Projekt dieser Art liegt 2 Jahre zurück und in 
ASM war es eine Qual.

> Zwischendurch hab ich auch mal in C programmiert, gefällt mir aber irgendwie 
nicht so richtig.

Mich würde das Irgendwie mal interessieren. Wo genau ist denn das 
Problem ?

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Ist schwer zu erklären. Bis man erst mal alle Compiler etc am laufen hat 
und andere Rätsel von C generell gelöst hat (Makefiles waren mir am 
anfang ein riesen Rätsel) ist erst schon mal ne Zeit vergangen. Bei C 
ist es irgendwie so, wenn man drin ist, ist alles ganz einfach, aber 
wenn man versucht einzusteigen versteht man nur Bahnhof. Bei den AVRs 
ist das ja noch relativ human mit dem AVR-Studio und eingebundenem C. 
Wobei ich dort auch schon probleme hatte, ich wollte was Simulieren, auf 
dem µC funktionierte es prima, aber in der Simulation blieb er ohne 
erkennbaren grund hängen (hab ihn eine Nacht laufen lassen). Aber für 
die ARM7 Reihe hab ich das ganze noch nicht zum laufen bekommen (was 
nicht heißen soll, dass ich vorhabe die in Assembler zu programmieren).

Alles in allem hab ich bis jetzt noch nicht dringend C gebraucht und bin 
deswegen auch schon an den kleinen Hürden hängen geblieben.

von Flexverbinder mit Wackelkontakt (Gast)


Lesenswert?

> Bis man erst mal alle Compiler etc am laufen hat

Das ist allerdings nur eine Frage des OS sowie des Compilers. Wenn 
beides stimmt, reduziert sich alles auf anklicken einer setup.exe, und 
alles rennt. Und ein guter Compiler nimmt einem außerdem das 
Makefilegeraffel komplett ab.

von Joe (Gast)


Lesenswert?

Na ja, makefile ist auch keine "schwarze Kunst" ;-))

>Bei C ist es irgendwie so, wenn man drin ist, ist alles ganz einfach, aber wenn 
man versucht einzusteigen versteht man nur Bahnhof.

Das bestätigt aber das was ich weiter oben ausgeführt habe. Also, Hände 
weg von K&R ;-))

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

c, c++, asm
und basecom (gezwungerner maßen),...

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ordentlich geschriebene C-Programme sind sehr gut auf andere 
Compiler/Prozessoren portierbar (z.B. die Entprell-, RC5- und 
DCF7-Routinen von Peter). Wenn die Hardware nicht 100% abstrahiert ist 
muss man halt ein paar kleine Änderungen vornehmen, aber das ist immer 
noch besser als alles neu schreiben zu müssen.

von Ale (Gast)


Lesenswert?

Real men only program in ASM :lol:

C ist viel einfacher/schnellen zu programmieren als asm, und viel 
einfacher zu debuggen.

"Use Interfaces" sind viel einfacher auf C als auf ASM, aber mit asm du 
kannst mehr Kraft für deines Geld bekommen.

Aber wie immer, wer wird dein Quellcode sehen ?, nur du ?, egal. Am 
Arbeitsplatz ?, besser wenn es gut dokumentiert ist, für alle.

von guro (Gast)


Lesenswert?

> Für ich las Hobby-MikrocontrollerBastler C. Sollte es irgendwann mal für
> Hobbyisten bezahlbare Mikros mit richtig viel SRAM geben, wäre C++ das
> Mittel meiner Wahl...

c++ ist zwar die eierlegende wollmilchsau unter den programmiersprachen, 
aber  wenn man es so verwendet, wie's die c++ fans machen (konsequenter 
einsatz der ganzen oo-features, templates, laufzeitpolymorphie usw.), 
dann zwingst du damit den dicksten controller in die knie...
einer maschine, die ausreichend performant mittelgrosse c++ anwendungen 
ausführen kann, kannst du auch gleich eine java-vm spendieren ;-)
selbst abgespecktes embedded-c++ konnte sich bis heute nicht 
durchsetzen...

von S. W. (Gast)


Lesenswert?

Andreas Schwarz wrote:
> Ordentlich geschriebene C-Programme sind sehr gut auf andere
> Compiler/Prozessoren portierbar (z.B. die Entprell-, RC5- und
> DCF7-Routinen von Peter).

"Ordentliche" C-Programme sind meist nicht µC-optimiert.
Interrupt-Routinen für den AVR werden wohl nicht dieselben wie beim PIC 
oder MSP430 sein. Mag sein, dass man ein c=a+b; portieren kann, aber 
wenn es um Timeraufgaben, Senden über UART oder CRC32-Check mi Hilfe der 
eingebauten Hardware, kurz, wenn es um die interne Hardware geht, ist 
C-Portierung einfach am Ende.

Desweiteren verstehen einige C-Compiler für µC Bitmanipulation, welche 
sich überhaupt nicht portieren lassen, da sie nicht einmal ANSI-C sind. 
Dafür erzeugen sie sehr kompakten Code. Man braucht nur den aufgeblähten 
Code eines GCC mit dem eines Codevision AVR zu vergleichen.

Steven
betacom@my-japan.de

von guro (Gast)


Lesenswert?

> Man braucht nur den aufgeblähten Code eines GCC mit dem eines Codevision
> AVR zu vergleichen.

ich verstehe auch nicht, warum GCC so einen guten ruf hat. nur weil er 
umsonst ist? eigentlich kann er den kommerziellen compilern nicht das 
wasser reichen. ich habe noch keinen GCC erlebt, der schlanken, 
schnellen code erzeugen kann...

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Steven Wetzel wrote:
> Andreas Schwarz wrote:
>> Ordentlich geschriebene C-Programme sind sehr gut auf andere
>> Compiler/Prozessoren portierbar (z.B. die Entprell-, RC5- und
>> DCF7-Routinen von Peter).
>
> "Ordentliche" C-Programme sind meist nicht µC-optimiert.
> Interrupt-Routinen für den AVR werden wohl nicht dieselben wie beim PIC
> oder MSP430 sein. Mag sein, dass man ein c=a+b; portieren kann, aber
> wenn es um Timeraufgaben, Senden über UART oder CRC32-Check mi Hilfe der
> eingebauten Hardware, kurz, wenn es um die interne Hardware geht, ist
> C-Portierung einfach am Ende.

Solche Dinge muss man natürlich neu schreiben. Aber schau dir die schon 
erwähnten Programme von Peter an (Codesammlung). Da änderst du 1-2 
Zeilen, und schon kannst du die RC5-Dekodierung o.ä. statt auf dem AVR 
auch auf dem ARM verwenden. Anderes Beispiel: du kannst Programmteile 
zum Testen komfortabel auf dem PC ausführen und den selben Code direkt 
für den Controller kompilieren. Mache ich so bei meinem MP3-Player mit 
der ID3-Tag-Auswertung. "make id3test", der Code wird auf dem PC mit 
verschiedenen MP3-Files auf korrekte Funktion überprüft, "make program", 
der selbe Code landet auf dem µC.

> Desweiteren verstehen einige C-Compiler für µC Bitmanipulation, welche
> sich überhaupt nicht portieren lassen, da sie nicht einmal ANSI-C sind.
> Dafür erzeugen sie sehr kompakten Code. Man braucht nur den aufgeblähten
> Code eines GCC mit dem eines Codevision AVR zu vergleichen.

Das hat absolut nichts mit der Syntax zu tun, die ist nur Kosmetik. Der 
GCC kann aus "PORTB |= 1<<2" genausogut ein "sbi PORTB, 2" machen wie es 
Codevision (hoffentlich) aus "PORTB.2 = 1" kann.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

guro wrote:
>> Man braucht nur den aufgeblähten Code eines GCC mit dem eines Codevision
>> AVR zu vergleichen.
>
> ich verstehe auch nicht, warum GCC so einen guten ruf hat. nur weil er
> umsonst ist?

Weil er ein sehr gutes Preis/Leistungs-Verhältnis hat.

> eigentlich kann er den kommerziellen compilern nicht das
> wasser reichen. ich habe noch keinen GCC erlebt, der schlanken,
> schnellen code erzeugen kann...

"Schlank" und "schnell" ist relativ. Der vom (AVR-)GCC erzeugte Code ist 
für viele Anwendungen schlank und schnell genug. Und es ist ja nicht so 
dass der Code dreimal so groß wäre wie der von IAR erzeugte.

von A.K. (Gast)


Lesenswert?

> eigentlich kann er den kommerziellen compilern nicht das
> wasser reichen

Ach? Sehe ich anders, jedenfalls was die Qualität des vom Compiler 
erzeugten Codes angeht. Von den Herstellern kommerzieller Compiler 
angestellte Vergleiche sind wie üblich mit Vorsicht zu geniessen.

Die Nachteile liegen eher woanders:

- In der Unterstützung spezieller Features wie getrennten Adressräumen 
für Code/Daten/EEPROM und dergleichen. Damit kommt GCC nicht zurecht, 
kommerzielle Compiler hingegen schon.

- In der Library. Speziell die bei GCC/ARM oft verwendete newlib neigt 
zu einer gewissen "Grundlast". Dass es auch anders geht, beweist 
WinAVR/avr-libc. Und mit dem Compiler hat das sowieso nichts zu tun.

- Manche Anwender schwören auf Compilererweiterungen, mit denen die Bits 
von I/O-Registern angenehmer abgebildet werden können. Aber Vorsicht, 
proprietäre Falle: Umstieg dann unmöglich.

von Joe (Gast)


Lesenswert?

>> So falsch ist die Aussage gar nicht. C für µC ist meistens kein ANSI-C.
>> Und somit erübrigt sich auch die Feststellung, man solle ASM und
>> Hochsprachen der Portierbarkeit nicht mixen. Das ist mit C für µC
>> ohnehin schlecht machbar.

Das Thema Portierbarkeit wird auch oft falsch angegangen. Ich schreibe 
für diverse MC Typen/Hersteller und mit Ausnahme des I/O Handling sowie 
spezifische Funktionen wie Interrupts, Timer... läßt sich alles in kürze 
portieren. Der Arbeitsaufwand liegt bei ca. 20%

In ASM gehts überhaupt nicht, 100%

Was ist vorteilhafter ?

von Günni (Gast)


Lesenswert?

Also, gelernt habe ich inzwischen Assembler, Pascal+Delphi, C und 
Derivate,  VB etc und Clipper. Beim Atmel mag Bascom recht kompfortabel 
sein, aber spätestens beim Umstieg auf andere Prozessoren guckt man in 
die Röhre. Also kommen eigentlich nur Assembler und C in Frage. Ich 
nutze C, weil es (meiner Meinung nach, nicht schlagen) wesentlich 
übersichtlicher und einfacher ist. Assembler ist da so ein bischen 
Urschleim. Bei Controllern ist man eh Recht hardwarenah am arbeiten, im 
PC-Bereich würde ich Assembler gar nicht mehr anfassen. Allerdings halte 
ich es für nicht unwichtig, sich mit Assembler auseinanderzusetzen, 
schon allein weil man dann die Funktionsweise eines Prozessors besser 
kennenlernt.

Ich persönlich bewundere die Assembler-Programmierer. Aber ich bewundere 
auch Boxer und würde mir selber nie für Geld die Fresse polieren lassen 
;-)


Gruß
Günni

von Ralph (Gast)


Lesenswert?

Wer ins Assembler programmieren will, na lass sie machen.

Mann kann diese Leute auch Masochisten nennen..

Allerdings in einem muss ich zustimmen.
Wer auf µC programmiern will ( muss) , kommt ohne Assembler nicht aus.

Nicht zum Programmieren, aber beim Debuggen im System geht es nicht 
ohne.

Wer seinen µC mit den Resourcen so knapp kalkuliert hat, das es auf 
einzelne Takte ankommt, hat etwas grundlegendes falsch gemacht.

Software wird IMMER größer als geplant.



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.