02.05.2013 Aufrufe

beginner_de

beginner_de

beginner_de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Avr-Asm-Tutorial S. 7<br />

programmieren, ausser nach festgelegten Regeln nicht im Programmablauf herum zu springen und<br />

immer Werte als Parameter zu übergeben und Resulate auch so entgegen zu nehmen. Vergessen Sie<br />

einstweilen die meisten dieser Regeln, Assembler braucht auch welche, aber ganz an<strong>de</strong>re, die Sie<br />

sich noch dazu alle selbst aus<strong>de</strong>nken müssen.<br />

Hochsprachenprogrammierer haben noch ein Konzept verinnerlicht, das beim Erlernen von Assembler<br />

nur hin<strong>de</strong>rlich ist: die Trennung in diverse Ebenen, in Hardware, Treiber und an<strong>de</strong>re Interfaces.<br />

In Assembler ist das alles nicht getrennt, eine Trennung macht auch keinen son<strong>de</strong>rlichen Sinn, weil<br />

Sie die Trennung dauernd wie<strong>de</strong>r durchlöchern müssen, um Ihr Problem optimal lösen zu können.<br />

Da viele Hochsprachenregeln in Mikrocontrollern keinen Sinn machen und das alles so puristisch<br />

auch gar nicht geht, erfin<strong>de</strong>t <strong>de</strong>r Hochsprachenprogrammierer gerne allerlei Möglichkeiten, um bei<br />

Bedarf diese Restriktionen zu umgehen. In Assembler stellen sich diese Fragen erst gar nicht. Alles<br />

ist im direkten Zugriff, je<strong>de</strong> Speicherzelle verfügbar, nix ist gegen Zugriff abgeschirmt, alles kann<br />

beliebig verstellt und kaputt gemacht wer<strong>de</strong>n. Die Verantwortung dafür bleibt alleine beim Programmierer,<br />

<strong>de</strong>r seinen Grips anstrengen muss, um drohen<strong>de</strong> Konflikte bei Zugriffen zu vermei<strong>de</strong>n.<br />

Dem fehlen<strong>de</strong>n Schutz steht die totale Freiheit gegenüber. Lösen Sie sich einstweilen von <strong>de</strong>n Fesseln,<br />

Sie wer<strong>de</strong>n sich an<strong>de</strong>re sinnvolle Fesseln angewöhnen, die Sie vor Unheil bewahren.<br />

2.8 Was ist nun genau warum einfacher?<br />

Alles was <strong>de</strong>r Assembler-Programmierer an Worten und Begriffen braucht, steht im Datenblatt <strong>de</strong>s<br />

Prozessors: die Instruktions- und die Porttabelle. Fertig. Mit diesen Begrifflichkeiten kann er alles<br />

erschlagen. Keine an<strong>de</strong>re Dokumentation ist vonnöten. Wie <strong>de</strong>r Timer gestartet wird (ist "Timer.-<br />

Start(8)" nun wirklich leichter zu verstehen als "LDI R16,0x02 und OUT TCCR0,R16"), wie er angehalten<br />

wird (CLR R16 und OUT TCCR0,R16), wie er auf Null gesetzt wird (CLR R16 und OUT<br />

TCNT0,R16), steht nicht in <strong>de</strong>r Dokumentation irgen<strong>de</strong>iner Hochsprache mit irgen<strong>de</strong>iner mehr o<strong>de</strong>r<br />

weniger eingängiger Spezialbegrifflichkeit, son<strong>de</strong>rn im Device Databook allein. Ob <strong>de</strong>r Timer 8-<br />

o<strong>de</strong>r 16-bittig ist, entschei<strong>de</strong>t <strong>de</strong>r Programmierer in Assembler selbst, bei Basic <strong>de</strong>r Compiler und<br />

bei C vielleicht auch <strong>de</strong>r Programmierer, wenn er genügend mutig ist.<br />

Was ist dann an <strong>de</strong>r Hochsprache leichter, wenn man statt "A = A * B" schreiben muss "MUL<br />

R16,R17"? Kaum etwas. Außer A und B sind nicht als Byte <strong>de</strong>finiert. Dann muss <strong>de</strong>r Assemblerprogrammierer<br />

überlegen, weil sein Hardware-MUL nur Bytes multipliziert. Wie man 24-bittige Zahlen<br />

mit 16-bittigen Zahlen mit und ohne Hardware-Multiplikator multipliziert, kann man lernen<br />

(siehe späteres Kapitel) o<strong>de</strong>r aus <strong>de</strong>m Internet abkupfern. Je<strong>de</strong>nfalls kein Grund, in eine Hochsprache<br />

mit ihren Bibliotheken zu flüchten, nur weil man zu faul zum Lernen ist.<br />

Mit Assembler lernt <strong>de</strong>r Programmierer die Hardware kennen, weil er ohne die Ersatzkrücke Compiler<br />

auskommen muss, die ihm zwar alles abnimmt, aber damit auch alles aus <strong>de</strong>r Hand nimmt. Als<br />

Belohnung für seine intensive Beschäftigung mit <strong>de</strong>r Hardware hat er die auch beliebig im Griff<br />

und kann, wenn er will, auch mit einer Baudrate von 45,45 bpm über die serielle Schnittstelle sen<strong>de</strong>n<br />

und empfangen. Eine Geschwindigkeit, die kein Windowsrechner zulässt, weil die Krücke Treiber<br />

halt nun mal nur ganzzahlige Vielfache von 75 kennt, weil frühere Fernschreiber mit einem Getriebe<br />

das auch schon hatten und flugs von 75 auf 300 umgeschaltet wer<strong>de</strong>n konnten.<br />

Wer Assembler kann, hat ein Gefühl dafür, was <strong>de</strong>r Prozessor kann. Wer dann bei komplexen Aufgabenstellungen<br />

zu einer Hochsprache übergeht, hat die Entscheidung rationaler gefällt als wenn er<br />

mangels Können erst gar nix an<strong>de</strong>res kennt und sich mit Work-Arounds für nicht in <strong>de</strong>r Hochsprache<br />

implementierte Features die Nacht um die Ohren schlagen muss. Der Assemblerprogrammierer<br />

hat zwar viel mehr selbst zu machen, weil ihm die ganzen famosen Bibliotheken fehlen, kann aber<br />

über so viel abseitiges Herumgeeiere nur lächeln, weil ihm die ganze Welt <strong>de</strong>s Prozessors unterwürfig<br />

zur Verfügung steht.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!