Forum: Mikrocontroller und Digitale Elektronik Fehler beim build im avr studio?


von BK (Gast)


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.

von Johannes M. (johnny-m)


Lesenswert?

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.

von BK (Gast)


Angehängte Dateien:

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.

von Johannes M. (johnny-m)


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.

von Spess53 (Gast)


Lesenswert?

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

von BK (Gast)


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

von BK (Gast)


Lesenswert?

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 ?????

von BK (Gast)


Lesenswert?

Es kommt halt ne 0 als anfangszustand aber bei betätigung der taster 
passiert nichts.

von Johannes M. (johnny-m)


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.

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
Noch kein Account? Hier anmelden.