Hallo Community, ich habe unteres Programm entwickelt/zusammenkopiert für einen AtMega8. Beim assemblieren kommt aber folgender Fehler: Error: Overlapping Code-segments : Start = 0x000E, End = 0x000E, Length = 0x0001 Start = 0x0000, End = 0x001C, Length = 0x001D Please check your .ORG directives ! Das Problem liegt eindeutig in Zeile 7. (".org 0x000E") Ich habe auch schon 0x000E durch 0x00E, 0x00e, 0x000e oder durch ADCCaddr ersetzt. Ergebnislos - immer dieselbe Fehlermeldung. Kann mir jemand helfen? Das Interrupt-Kapitel im AVR-Tut habe ich mir schon durchgelesen. .include "m8def.inc" .def zero = r18 .def count = r16 .def temp1 = r17 .org 0x000E rjmp increment .org 0x0000 rjmp main ; Reset Handler ; main: ldi temp1, HIGH(RAMEND) out SPH, temp1 ldi temp1, LOW(RAMEND) out SPL, temp1 ldi temp1, $FF out DDRD, temp1 ldi temp1, 0 loop: add ZL, temp1 ; und ausgehend vom Tabellenanfang adc ZH, r18 ; die Adresse des Code Bytes berechnen lpm ; dieses Code Byte in das Register r0 laden out PORTD, r0 ; und an die Anzeige ausgeben rjmp loop increment: inc temp1 ; Codes: ; Die Codetabelle für die Ziffern 0 bis 9 ; sie regelt, welche Segmente für eine bestimmte ; Ziffer eingeschaltet werden müssen ; .db 0b00000000 ; 0: a, b, c, d, e, f .db 0b10000000 ; 1: b, c .db 0b11000000 ; 2: a, b, d, e, g .db 0b11100000 ; 3: a, b, c, d, g .db 0b11110000 ; 4: b, c, f, g .db 0b11111000 ; 5: a, c, d, f, g .db 0b11111100 ; 6: a, c, d, e, f, g .db 0b11111110 ; 7: a, b, c .db 0b01111110 ; 8: a, b, c, d, e, f, g .db 0b00111110 ; 9: a, b, c, d, f, g .db 0b00011110 .db 0b00001110 .db 0b00000110 .db 0b00000010 .db 0b00000001
Überleg mal, auf welchem Adressbereich dein main und der folgende Code liegt und wie das mit dem .org 0x000E zusammenpassen soll. Das haut da mitten rein.
@Michael A. Hm, ich verstehe nicht ganz, was du meinst. Worauf der Interrupt verweist, ist doch zunächst egal, oder nicht?
hoerns schrieb: > Hm, ich verstehe nicht ganz, was du meinst. Worauf der Interrupt > verweist, ist doch zunächst egal, oder nicht? .org 0x0000 rjmp main ; Reset Handler ; main: damit schreibst das mein gleich hinter den reset handler. Du musst platz für die anderen ISR Adresse lassen.
@peter Wenn ich .org 0x000 weglasse, dann verschwindet der Fehler und da ich den Reset nicht zwingend benötige, ist das Problem somit gelöst. Es würde mich trotzdem interessieren, wo jetzt genau der Fehler lag. Kannst du mir das genauer erklären? Muss ich alle Interrupt-Adressen hinterlegen, auch wenn ich sie nicht brauche?
hoerns schrieb: > @peter > Wenn ich .org 0x000 weglasse, dann verschwindet der Fehler klar, aber dann wird das Pogramm nicht sauber laufen > würde mich trotzdem interessieren, wo jetzt genau der Fehler lag. > Kannst du mir das genauer erklären? keine ahung wie ich es noch anders erklären soll > Muss ich alle Interrupt-Adressen > hinterlegen, auch wenn ich sie nicht brauche? nein du musst nur dafür sorgen das das eigentliche Progamm hintern den Vektoren losgeht. also ein .org 0x?? vor das main schreiben, und dort die Adresse eintragen die nach den Vektoren kommt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.