Fehler beim build im avr studio?

Gast #707914
Lesenswert?

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.
Gast #707925
Lesenswert?

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.
Angehängte Dateien:
#707934
Lesenswert?

> .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.
Gast #707983
Lesenswert?

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
#708049
Lesenswert?

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.

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