AVR Assembler: Probleme mit include

Gast #1178559
Lesenswert?

Hallo zusammen,

bin gerade dabei eine Lüftersteuerung zu programmieren.
Jetzt wollte ich Code, den ich evtl. für andere Projekte wiederverwenden 
will, in eine separate ASM-Datei in einem anderen Verzeichniss 
auslagern.

Dabei ist mir jetzt erstmal aufgefallen, dass es wohl nicht möglich ist 
relative Pfadangaben zu machen.
Ist das richtig?

Dann habe ich es mit einer absoluten Pfadangabe versucht, die Datei wird 
gefunden und assembliert. Leider bekomme ich jetzt folgende 
Fehlermeldungen:

error: Overlap in .cseg addr=0x00 conflicts with 0x0:0x2
error: Overlap in .cseg addr=0x01 conflicts with 0x0:0x2

Die erste Fehlerzeile bezieht sich auf folgende Codezeile:
.org 0x0000
  rjmp   init

Die zweite auf:
init:
  ldi   temp, LOW(RAMEND)
  out   SPL, temp
  ...
Also auf die Stackpointer Initialisierung.

Woran könnte das liegen?

Gruß

Mathias
#1178569
Lesenswert?

Vollständigen Code posten!

Ansonsten kann man nur vermuten, dass vor dem .org 0x0000 ein 
.include steht, durch das der zweite gezeigte Teil eingebunden werden 
soll. Und das geht grundsätzlich schief! Assembler-Dateien werden immer 
von oben nach unten abgearbeitet. Wenn da Code steht und dann plötzlich 
ein .org, das auf eine Adresse weist, die kleiner ist, als die aktuelle, 
dann knallt es eben.
#1178572
Lesenswert?

Hallo,

[Glaskugelmode]

Du solltest daran denken, daß der Assembler die include-Files genau dort 
bearbeitet, wo Du sie einfügst.
Wenn Du Code vor dem Beginn des Programms (Reset-Vektor) einfügst, 
ünersetzt der Assembler den auch dort. Ab Adresse 0...

[/Glaskugelmode]

PS: Johannes war schneller bzw. das Forum lahmt extrem!

Gruß aus Berlin
Michael
Gast #1178578
Lesenswert?

Sorry wegen dem fehlenden Code, aber ihr hattet recht, vielen Dank.
Es lag an .include vor .org!

Könnt ihr mir evtl. noch sagen ob es stimmt, dass keine relativen 
Pfadangaben möglich sind?

Vielen Dank

Mathias

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren