www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler vs. C


Autor: Weide (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jonas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Retro (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jonas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jonas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Uwe* (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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???

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.