Hallo, bin neuling auf dem mic gebiet. Habe in mein programm eine entprellroutine eingefügt. Nun kommt immer in jeder zeile der routine der fehler: (791): error: Overlap in .cseg: addr=0xc conflicts with 0x0:0x24b Kann mir jemand sagen wie ich das beheben kann?? Gruß und danke.
BK wrote:
> Kann mir jemand sagen wie ich das beheben kann??
Zunächst mal, indem Du Deinen Code zeigst. Allerdings ist vermutlich
(oder besser: sehr wahrscheinlich) eine .org-Direktive Schuld, die eine
Überlappung von Code im Bereich der Interrupt-Vektortabelle verursacht.
Sorry wenn der code seh umständlich ist! Kannst du mir vielleicht sagen wie ich die entprellung für die taster realisieren kann? Soll ein parkhauszähler für EG und OG werden. Das problem ist ohne entprellung springt er sofort in endwert und mit(zumindest bei meinen versuchen) zeigt display nichts an. Wäre nett wenn mir jemand helfen könnte! Gruß und danke.
> .org OVF0addr > in save_sreg, SREG Das ist auf jeden Fall schon mal die Ursache für die Fehlermeldung! Der Assembler fängt mit dem Assemblieren vorne an. Wenn er nicht durch ein .org auf eine andere Idee gebracht wird, schaufelt er die Befehle in der Reihenfolge, wie Du sie programmiert hast, in den Speicher. Also steht an der Adresse 0x0000 am Anfang des Programmspeichers bei Dir
1 | ldi temp1, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse |
Und so weiter... Dann ist der Assembler fast fertig, und plötzlich taucht ein .org auf, das ihm sagt, schreibe die folgenden Befehle ab der angegebenen Adresse. Der Assembler merkt aber: "An der angegebenen Adresse steht schon was"! Also gibt er eine Fehlermeldung aus und bricht ab. Grundsätzlich: Die Interrupt-Vektoren stehen am Anfang des Programmspeichers, und da müssen auch die Sprungbefehle zu den Interrupt-Handlern hin (oder, wenn wie in diesem Fall nur ein einziger Interrupt Handler vorhanden ist, auch direkt der komplette Handler). An die Adresse 0 (Reset-Vektor, also ganz an den Anfang) gehört dann aber ein Sprung an den eigentlichen Programmanfang, wo dann auch die Stack-Initialisierung hinkommt. Um das ganze Programm durchzusehen, hab ich jetzt keine Zeit (und bei der Codewurst ohne jeglichen Kommentar im Hauptteil hätte das auch keinen wirklichen Sinn). Kommentier das mal vernünftig. Aus Assembler-Code kann man noch schlechter was rauslesen als aus Hochsprachen-Code.
Hi Mit '.org OVF0addr' platzierst du den nachfolgenden Code mitten in den vorigen Code. An deiner Stelle würde ich das Programm erst mal sortieren. MfG spess
Nochmal ne frage: Was ist hier dran falsch? ms1: push temp2 push temp3 ldi temp2,LOW(XTAL/4000) ldi temp3,HIGH(XTAL/4000) ms1a: sbiw temp2,1 <-------- sagt immer an dieser brne ms1a stelle invalid reg nop pop temp3 pop temp2 ret THX
Kann sich bitte jemand das Programm mal angucken und mir sagen warum die Auswertung in der simulation geht aber sich nichts auf dem lcd tut ?????
Es kommt halt ne 0 als anfangszustand aber bei betätigung der taster passiert nichts.
Schau Dir bitte mal an, mit welchen Registern der sbiw-Befehl überhaupt funktioniert! Das geht in AVRStudio ganz einfach, Du musst nur den Cursor auf den Befehl setzen und F1 drücken. Abgesehen davon: Ich hatte es oben schon mal geschrieben: es wird sich hier wohl kaum jemand finden, der ein praktisch völlig unkommentiertes Assembler-Programm von der Länge analysieren wird.
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.