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
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...
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!
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
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
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...
@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
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).
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???