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. 27<br />

Der Pfad, an <strong>de</strong>m sich die Hea<strong>de</strong>r-Datei befin<strong>de</strong>t, kann natürlich weggelassen wer<strong>de</strong>n, wenn sie sich<br />

im gleichen Verzeichnis wie die Assemblerdatei befin<strong>de</strong>t. An<strong>de</strong>rnfalls ist <strong>de</strong>r Pfad entsprechend <strong>de</strong>n<br />

eigenen Verhältnissen anzupassen.<br />

Das Auflisten <strong>de</strong>r Datei beim Übersetzen kann nervig sein, weil solche Hea<strong>de</strong>r-Dateien sehr lang<br />

sind, beim Auflisten <strong>de</strong>s übersetzten Co<strong>de</strong>s (entstehen<strong>de</strong> .lst-Datei) entsprechend lange Listen von<br />

meist uninteressanten (weil trivialen) Informationen produzieren. Das Abschalten vor <strong>de</strong>m Einlesen<br />

<strong>de</strong>r Hea<strong>de</strong>r-Datei spart je<strong>de</strong> Menge Papier beim Ausdrucken <strong>de</strong>r List-Datei. Es lohnt sich aber,<br />

einen kurzen Blick in die Inclu<strong>de</strong>-Datei zu werfen. Zu Beginn <strong>de</strong>r Datei wird mit<br />

.DEVICE AT90S8515 ; Festlegung <strong>de</strong>s Ziel<strong>de</strong>vices<br />

<strong>de</strong>r Zielchip <strong>de</strong>finiert. Das wie<strong>de</strong>rum bewirkt, dass Instruktionen, die auf <strong>de</strong>m Zielchip nicht <strong>de</strong>finiert<br />

sind, vom Assembler mit einer Fehlermeldung zurückgewiesen wer<strong>de</strong>n. Die Device-Anweisung<br />

an <strong>de</strong>n Assembler braucht also beim Einlesen <strong>de</strong>r Hea<strong>de</strong>r-Datei nicht noch einmal in <strong>de</strong>n<br />

Quellco<strong>de</strong> eingegeben wer<strong>de</strong>n (ergäbe eine Fehlermeldung).<br />

Hier sind z.B. auch die Register XH, XL, YH, YL, ZH und ZL <strong>de</strong>finiert, die beim byteweisen Zugriff<br />

auf die Doppelregister X, Y und Z benötigt wer<strong>de</strong>n. Ferner sind darin alle Port-Speicherstellen<br />

<strong>de</strong>finiert, z. B. erfolgt hier die Übersetzung von PORTB in hex 18. Schließlich sind hier auch alle<br />

Port-Bits mit <strong>de</strong>njenigen Namen registriert, die im Datenblatt <strong>de</strong>s jeweiligen Chips verwen<strong>de</strong>t wer<strong>de</strong>n.<br />

So wird hier z.B. das Portbit 3 beim Einlesen von Port B als PINB3 übersetzt, exakt so wie es<br />

auch im Datenblatt heißt.<br />

Mit an<strong>de</strong>ren Worten: vergisst man die Einbindung <strong>de</strong>r Inclu<strong>de</strong>-Datei <strong>de</strong>s Chips zu Beginn <strong>de</strong>s Programmes,<br />

dann hagelt es Fehlermeldungen, weil <strong>de</strong>r Assembler nur Bahnhof versteht. Die resultieren<strong>de</strong>n<br />

Fehlermeldungen sind nicht immer sehr aussagekräftig, weil fehlen<strong>de</strong> Labels und Konstanten<br />

von manchem ATMEL-Assembler nicht mit einer Fehlermeldung quittiert wer<strong>de</strong>n. Statt<strong>de</strong>ssen<br />

nimmt <strong>de</strong>r Assembler einfach an, die fehlen<strong>de</strong> Konstante sei Null und übersetzt einfach weiter. Man<br />

kann sich leicht vorstellen, welches Chaos dabei herauskommt. Der arglose Programmierer <strong>de</strong>nkt:<br />

alles in Ordnung. In Wirklichkeit wird ein ziemlicher Käse im Chip ausgeführt.<br />

In <strong>de</strong>n Kopf <strong>de</strong>s Programmes gehören insbeson<strong>de</strong>re auch die Register-Definitionen, also z.B.<br />

.DEF mpr = R16 ; Das Register R16 mit einem Namen belegen<br />

Das hat <strong>de</strong>n Vorteil, dass man eine vollständige Liste <strong>de</strong>r Register erhält und sofort sehen kann, welche<br />

Register verwen<strong>de</strong>t wer<strong>de</strong>n und welche noch frei sind. Das Umbenennen vermei<strong>de</strong>t nicht nur<br />

Verwendungskonflikte, die Namen sind auch aussagekräftiger.<br />

Ferner gehört in <strong>de</strong>n Kopf die Definition von Konstanten, die <strong>de</strong>n gesamten Programmablauf beeinflussen<br />

können. So eine Konstante wäre z.B. die Oszillatorfrequenz <strong>de</strong>s Chips, wenn im Programm<br />

später die serielle Schnittstelle verwen<strong>de</strong>t wer<strong>de</strong>n soll. Mit<br />

.EQU fq = 4000000 ; Quarzfrequenz festlegen<br />

zu Beginn <strong>de</strong>r Assemblerdatei sieht man sofort, für welchen Takt das Programm geschrieben ist.<br />

Beim Umschreiben auf eine an<strong>de</strong>re Frequenz muss nur diese Zahl geän<strong>de</strong>rt wer<strong>de</strong>n und man<br />

braucht nicht <strong>de</strong>n gesamten Quelltext nach <strong>de</strong>m Auftauchen von 4000000 zu durchsuchen.<br />

5.3 Angaben zum Programmbeginn<br />

Nach <strong>de</strong>m Kopf sollte <strong>de</strong>r Programmco<strong>de</strong> beginnen. Am Beginn je<strong>de</strong>s Co<strong>de</strong>s stehen die Reset- und<br />

Interrupt-Vektoren (später dazu mehr). Da diese relative Sprünge enthalten müssen, folgen darauf<br />

am besten die Interrupt-Service-Routinen. Danach ist ein guter Platz für abgeschlossene Unterpro-

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!