mikrocontroller.net

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


Autor: BK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: BK (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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
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.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: BK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: BK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?????

Autor: BK (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.