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


von Jobst M. (jobstens-de)


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

von R. F. (rfr)


Lesenswert?

Bootsector?
Gruss
Robert

von Ich (Gast)


Lesenswert?

>Derzeit kompiliere ich noch von Hand ...

wie geht das denn? Und warum macht man das?

von Jobst M. (jobstens-de)


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.

von Jobst M. (jobstens-de)


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

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.