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???
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.