www.mikrocontroller.net

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


Autor: Bernhard (Gast)
Datum:

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

Autor: Troll Blaubär (blaubeer)
Datum:

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

Autor: Nullpainter (Gast)
Datum:

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

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.