Forum: Mikrocontroller und Digitale Elektronik .org Direktive und ATMega32 Verständnisproblem


von Bernhard (Gast)


Lesenswert?

Hallo,

wenn ich .org benutze, um einen rjmp genau da hin zu legen, wo der 
Interrupt hinspringt, wo landet der Rest meines Codes? Wird mein 
gesamter Code soweit nach unten geschoben, dass der eine Befehl an der 
richtigen Stelle liegt? Womit wird der Anfang aufgefüllt, mit 'nop's?

Was wäre, wenn ich zwei .org Direktiven habe, welche aber einige Stellen 
voneinander auseinanderliegen (also z.B. externer Interrupt 
INT0addr=$002 und ADC Interrupt ADCCaddr=$020), was kommt dann in den 
Zwischenraum? Also zwischen $002 und $020? Wird das mit 'nop's 
ausgefüllt?

Danke schonmal...

von Troll B. (blaubeer)


Lesenswert?

Bernhard wrote:
> Hallo,
>
> wenn ich .org benutze, um einen rjmp genau da hin zu legen, wo der
> Interrupt hinspringt, wo landet der Rest meines Codes? Wird mein
> gesamter Code soweit nach unten geschoben, dass der eine Befehl an der
> richtigen Stelle liegt? Womit wird der Anfang aufgefüllt, mit 'nop's?

Der "Anfang" ist dann nicht definiert. Der Assembler erstellt daraus 
eine fragmentierte Hexdatei, bei der nicht definierte Teile ausgelassen 
werden. Was dann in Deinen AVR gebrannt wird, ist Sache Deines 
ISP-Programms, es kommt halt drauf an, was das mit undefinierten 
Adressbereichen macht. Ich vermute mal, die meisten ISP-Programme lassen 
den Flash dann leer, es wird $ffff an den entsprechenden Adressen 
stehen.

Ich selbst vermeide es, Lücken im Code zu haben, es wird aber oft 
empfohlen und ich möchte diesen Empfehlungen nicht widersprechen.

>
> Was wäre, wenn ich zwei .org Direktiven habe, welche aber einige Stellen
> voneinander auseinanderliegen (also z.B. externer Interrupt
> INT0addr=$002 und ADC Interrupt ADCCaddr=$020), was kommt dann in den
> Zwischenraum? Also zwischen $002 und $020? Wird das mit 'nop's
> ausgefüllt?

Nein, die Hexdatei lässt diese Bereiche aus. Sie sind dann nicht 
definiert. Siehe oben.

>
> Danke schonmal...

Bitte.

MfG, Blaubär, der Trollige

von Nullpainter (Gast)


Lesenswert?

Die Org direktive verwendet man nur an Stellen wo man die Uebersicht 
hat, sich selbst um freien Plaetze kuemmert. Die macht man vor Allem am 
Anfang des Speichers. zB fuer Sprunglisten, seien das Interrupttabellen, 
oder Softwareinterrupts. Dasselbe gilt auch fuer das EEPROM. Da kann man 
bestimmte Variablen an feste Adressen legen, sodass unabhaengige Tools 
dasselbe immer an derselben Stelle vorfinden. Das unabhaengige Tool kann 
zb die Applikation sein, die fuer eine gewisse Funktionalitaet in den 
Bootloadercode springt.

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