Forum: Mikrocontroller und Digitale Elektronik Assembler vs. C


von Weide (Gast)


Lesenswert?

Hallo,

gerade las ich im einem Beitrag, wer in Assembler programmiert, "bricht 
sich einen ab". Das war sicherlich ironisch gemeint, aber ich frage mich 
seit längerem, was mehr Sinn macht. Ich programmiere seit etwa 10 Jahren 
Mikrokontroller in Assembler. Vor kurzem dachte ich mir, ich müßte mich 
mal wieder auf die "Höhe der Zeit" begeben und begann, mich mal an C 
heranzumachen, was ich aber nach kurzer Zeit wieder aufgab.

Ich sehe bei Mikrokontrollern irgendwie keinen Sinn in 
Hochsprachenprogrammierung. Viele Operationen sind Bitoperationen, hier 
läßt sich schon mal keinesfalls irgendetwas einsparen/vereinfachen. Auch 
muß man gerade bei diesen Operationen auch in einer Hochsprache nach wie 
vor sehr genaue Kenntnisse der Hardwarestruktur haben - hier ist somit 
auch nichts gewonnen.

Des weiteren haben sich bei mir - natürlich bedingt durch meine 
"Assemblerkarriere" - viele Routinen angesammelt, die man ohne weiteres 
für diverse Anwendungszecke verwenden kann. Ich denke da z.B. an 32-Bit 
Rechenoperationen. Selbst eine Portierung von den Anfangs von mir 
verwendeten MCS51-Systemen auf ATMEL war kein Problem, da das Prinzip ja 
gleich bleibt. Hier sehe ich durch die Verwendung einer Hochsprache mit 
entsprechenden fertigen Operationen auch keinen Sinn.

Ich denke, es ist gängige Praxis, Hochsprache mit Assembler zu 
vermischen. Nur ... weiß ich, welcher Register meine 
Hochsprachenroutinen verwenden? Weiß ich, ob es da durch Einbindung 
eigener Assemblerroutinen zu Kollisionen kommt?

Des weiteren macht es meiner Meinung einfach Spaß (ja wirklich), in 
Assembler beispielsweise den Code zu optimieren, totale Kontrolle über 
alles zu haben. Durch Assembler kennt man den Kontroller in- und 
auswendig (weil man's muss) - dadurch bieten sich einem ganz andere 
Möglichkeiten.

Ich denke, das Argument, einen Hochsprachencode könne einfach auf andere 
Hardware portiert werden, zieht bei einem Mikrokontroller sicherlich 
nicht, da hier zum einen ganz andere Umgebungsbedingungen herrschen und 
zum anderen gerade bei Bitoperationen ein anderer Kontroller einen 
gänzlich geänderten Code bedingt.

Tja, mein Standpunkt dürfte wohl klar sein; mich würden mal Eure 
Meinungen dazu interessieren.

Gruß und schönes Wochenende

Weide

von Jonas (Gast)


Lesenswert?

nun, ich habe beim avr auch in assembler angefangen. nun mache ich das 
meiste in c.

der generierte code ist kaum länger (abgesehen von den preludes für 
funktionen), dafür ist das programm wesentlich kürzer, schneller 
geschrieben und besser zu lesen...

von Retro (Gast)


Lesenswert?

Also ich halte rein garnichts von Assembler. Ich programmiere auf dem PC 
in Objectiv-Pascal, C/C++. Von dahher hab ich bei den Microcontrollern 
auch gleich mit C angefangen. Assembler geht mir einfach auf die 
Nervern. Ich persönlich hab dann keinen Durchblick mehr, ich muss mich 
vielzusehr daran vertiefen und arbeite mir trotzdem nen Wolf...

Grade bei den größeren Controllern (Ich arbeite zZ. mit nem M16/62, 
256kB Flash) kann man ohne Probleme auf C zurückgreifen. 
Matheoperationen sind kein Problem, Gleitkommawerte oder auch einfache 
Bytes, ganz egal!
Mit dem NC30-C-Compiler ist der Quellcodes hervorragend optimiert, er 
läuft fast genauso schnell als wenn jemand ihn per Hand in ASM 
geschrieben hat (mehrmals ausprobiert).

Die Hochsprachen wurden mit Sicherheit nicht umsonst für Microcontroller 
umgesetzt. ASM macht zuviel Aufwand!

von Michael (Gast)


Lesenswert?

Ich glaube auch daß Hochsprachen ihre große Berechtigung haben. Ich 
selbst programmiere aus Bequemlichkeit mit Basic, jetzt mit BASCOM auf 
ATMega103 und zwar weil ich nicht unendlich viel zeit habe.
 Dazu kommt noch daß die Dokumentation viel einfacher ist was vor allem 
bei großen Programmen eine große Hilfe ist.
Ich habe großen Respekt vor denen die Assembler fluessig schreiben, aber 
ich kenne niemanden der, nachdem er eine Hochsprache gut beherrscht, 
noch zu Assembler greift es sei denn er hat etwas sehr zeitkritisches zu 
machen und es geht nicht anders.

Michael

von Peter (Gast)


Lesenswert?

Also derjenige, der das o.a. geschrieben hat, war ich. Ok, ich gebe ja 
zu, es war etwas ironisch gemeint und jeder kann schliesslich in der 
Sprache programmieren, in der er gerne möchte. Nur mal so als Hinweis, 
ich habe früher viel in Assembler programmiert, darunter sogar 
Studienarbeiten, die als Ersatz für Klausuren in Mikroprozessortechnik 
anerkannt und mit sehr gut bewertet wurden, also bitte keine Vorwürfe 
bezüglich meiner eventuellen Erfahrung darin. Bei anderen MCs, wie z.B. 
den PICs von Microchip würde ich mir es noch überlegen in Assembler zu 
programmieren, weil der einen schönen und überschaubaren Befehlssatz 
hat. Aber wenn ich solche Dinge sehe:

BCLR 1001 0100 1sss 1000
CLC  1001 0100 1000 1000
CLH  1001 0100 1101 1000
CLI  1001 0100 1111 1000
CLN  1001 0100 1010 1000
CLS  1001 0100 1100 1000
CLT  1001 0100 1110 1000
CLV  1001 0100 1011 1000
CLZ  1001 0100 1001 1000

kann ich nur denjenigen bedauern, der diese Assemblersprache lernt. Von 
den o.a. Opcodes ist nämlich nur ein einziger echt, die anderen kann man 
sich sparen wenn man die Position der Bits im Statusregister kennt. 
Atmel hat nämlich hier mit jeder Menge unnötiger Pseudo-Opcodes die 
angeblichen Fähigkeiten ihrer "Kinder" künstlich aufgebauscht, die 
Anzahl der tatsächlichen, also real im Prozessor umgesetzten Opcodes ist 
nämlich wesentlich geringer als angegeben. Und so einen Quatsch mach ich 
nicht mit!

Also Leute, lernt fleissig weiter diese tollen Opcodes, mit jedem neuen 
MC werden es ja mehr ;-)

So, das war mein Senf zu dem Thema MCs und Programmiersprachen. 
Ausserdem gibt Atmel ja selbst an, dass ihre MCs für die 
Programmiersprache C optimiert seien, das lädt ja geradezu ein, sich das 
Leben leicht zu machen.

Gruss,

Peter

von Jonas (Gast)


Lesenswert?

das sehe ich anders! durch die "einführung" dieser opcodes wird der code 
besser lesbar, quasi selbstdokumentierend.

oder was meinst du, warums bei avr-gcc ein makro für set_timer() (oder 
so ähnlich) gibt, wenn man das auch mit sbi() machen kann...

von Peter (Gast)


Lesenswert?

@Jonas

Nun ja, wenn Du solche Sachen wie:

SBC = subtract with carry
SBCI = subtract immediate with carry
SBI = set bit in i/o register
SBIC = skip if bit in i/o register is cleared
SBIS = skip if bit in i/o register is set
SBIW = subtract immediate from word

usw.
gut lesbar und selbsterklärend findest, nur zu!
Aber dann kann ich mir nur sehr schwer vorstellen, dass du ausser den 
AVRs schon mal etwas anderes in Assembler programmiert hast. Es gibt 
nämlich Prozessoren, die wirklich gute und selbsterklärende Opcodes 
haben, den Asseblersatz der AVR zähle ich jedoch ganz gewiss nicht dazu!

Aber wie heisst es so schön, jedem Tierchen sein Pläsierchen! g

Gruss,

Peter

von Jonas (Gast)


Lesenswert?

g
hab vorher schoma Z80 asm geschrieben. die opcodes da gefallen mir 
besser, hast recht... aber das mit den "aus einem opcode mach 8" find 
ich net so schlimm... dann schon eher die sonderbaren abkürzungen. die 
ham mich auch schon öfters durcheinander gebracht (weswegen ich jetzt 
meistens c programmiere).

von Uwe* (Gast)


Lesenswert?

Hi!
Ich meine wer das Maximum aus einem Kontroller rausholen will muss in 
ASM schreiben. Wer natürlich meint es unbedingt in Hochsprachen 
schreiben zu müssen kann das natürlich machen. (schneller geschrieben 
ist es ganz sicher)Nur bei der Frage ob ich wegen 3 Byte (die in den 
kleineren nicht reinpassen) einen grösseren Kontroller nehmen muss 
scheiden sich die Geister, wenn's dann noch ein Massenprod. werden soll 
zählt jeder Euro.
Mit dem Syntax habe ich bei ordentlicher Schreibweise und Doku.auch kein 
Probl.
Das ganze gillt natürlich nur bei Kontrollern,
PC-Programme sollte man schon in Hochsprachen schreiben, sonst wird es 
unübersichtlich.
Gruss Uwe

PS.: warum geht denn das "Alt Gr+M" nicht(myC)?????
und warum muss mein Name denn 4 Zeichen haben???

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.