www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programm startet bei 0x0400 statt 0x0000


Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin!

Ich habe ein kleines Problem.

Nachdem ich den Code in den ATmega644P geschrieben habe scheint er ab 
Adresse 0x0400 zu stehen.

Da ich gerade mit dem AVR anfange (viele rieten mir dazu, dies nicht zu 
tun) und spezielle Anforderungen habe, arbeite ich mit eigenen 
Umgebungen und muss so den Fehler erst mal bei mir suchen. Bisher bin 
ich aber nicht fündig geworden. Vielleicht kommt dies ja wem bekannt 
vor.

Derzeit kompiliere ich noch von Hand ...

Folgendes Programm läuft - würde es nicht bei 0x0400 starten, würde es 
nicht laufen, bzw. PortA würde still stehen.
Ich habe auch schon mit den Bootsize-Fuses gespielt - keine Änderung.
Und bevor jetzt wieder wer mit dem Stack kommt: der wird hier nicht 
benötigt. Dieses Programm ist nur dazu da, dieses Problem einzukreisen.

Dies ist der komplette Code, der ab Adresse 0x0000 geschrieben werden 
sollte (so kann man es auch aus dem HexFile entnehmen):

0xEF0F  // LDI  R16, #0xFF
0x8901  // OUT  0x01, R16  // DDRA mit 0xFF laden
0xE000  // LDI  R16, #0
0x2E20  // MOV  R2, R16    // Reset Zaehler
0xE011  // LDI  R17, #1
0x94F8  // CLI      // IRQs ausschalten - man weiß ja nie, was passiert

// Sprung hier her (=0x0406)
// dies ist ein 24-Bit-Zähler, dessen MSB auf PortA ausgegeben wird
0x0E31  // ADD  R3, R17    // ++
0x1E20  // ADC  R2, R16    // Nur Übertrag
0x1E10  // ADC  R1, R16    // Nur Übertrag
0xB812  // OUT  0x02, R1  // -> PORTA

0x940C  // JMP  0x0406    // Sollte eigentlich 0x0006 sein, wenn er bei 
0x0000 starten würde
0x0406


Vielleicht hat ja jemand eine Idee, wo ich suchen könnte.


Gruß

Jobst

Autor: R. Freitag (rfr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bootsector?
Gruss
Robert

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Derzeit kompiliere ich noch von Hand ...

wie geht das denn? Und warum macht man das?

Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ist damit etwas anderes gemeint, als die BOOTSZ0 und BOOTSZ1 ?
Wenn ja, wo finde ich Infos dazu?
(Im Datanblatt des ATmega164/324/644P jedenfalls nicht)

Gruß

Jobst

@Ich: Ich mache es. Punkt.

Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe den Fehler. Ist ein hausgemachtes Problem gewesen. :-(
Man sollte ein Register nicht überschreiben, wenn man den Inhalt noch 
benötigt ...

Ein eigener Controller auf dem Board ist dafür zuständig, den ATmega zu 
flashen. In der bewährten Routine hat sich bei Adaption auf ATmega ein 
kleiner Fehler eingeschlichen :-P

Da suche ich schon eine Weile und nachdem ich um Hilfe bitte, finde ich 
den Bug - sowas ...


Gruß

Jobst

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.