Forum: Mikrocontroller und Digitale Elektronik ATmega644A - Hexfile auf ATMega164A ?


von Peter K. (Gast)


Lesenswert?

Hallo,
sehe ich das richtig, daß sich die ATmegas 644A und 164A nur in der 
Speicherausstattung unterscheiden, sonst aber identisch sind?

Könnte ich also ein Hexfile, welches für den 644A kompiliert wurde, 1:1 
auf den 164A flashen? Das Programm belegt 5KB Flash, 190Byte Sram und 2 
Byte EEprom. Genügend Platz sollte also auch im 164A sein.

Oder gibt es da feine Unterschiede, die im Datenblatt wieder bestmöglich 
versteckt sind?
Hatte da z.B. etwas von einem 4.Timer gelesen, der nur beim größten 
Mitglied der Familie, dem 1284A, verfügbar ist. Das betrifft mich im 
vorliegenden Fall zwar nicht, aber daher die Bedenken, daß es noch 
andere abweichende Details geben könnte.

von Oliver S. (oliverso)


Lesenswert?

Da der Mega644 mehr Sram hat, wird es Schwierigkeiten geben, wenn der 
Stackpointer "manuell" auf das Ende des Srams gesetzt wird.

Oliver

von Detlev T. (detlevt)


Lesenswert?

Mein erster Verdächtiger auf mögliche Unterschiede ist die Tabelle der 
Interruptvektoren.

Abraten muss man von so einem Vorgehen dennoch.

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

Das lässt sich so pauschal nicht sagen, es gibt sicher Gründe weshalb 
ein µC ausgewählt wurde z.b. könnten andere HW komponenten genutzt 
worden sein als der alternative Chip vorhält ...

Ohne den Sourscode abzugleichen kannst du nur im Nebel stochern aber das 
sollte ja kein Problem sein, da du den ja sicher auch hast?

Namaste

von Peter K. (Gast)


Lesenswert?

Nein Nebel habe ich hier nicht, höchstens den magischen Rauch aus dem 
ATmega, wenn doch etwas schief gegangen ist  ;-)
Achso, Du meinst den Quellcode. Ja, den habe ich.

Ich verwende die "universelle CAN-Bibliothek" in meinem Code. Dort habe 
ich jetzt auch den Mega164A bei den unterstützten Controllern 
eingetragen. Dann konnte ich das Ganze auch problemlos compilieren. Die 
SPI-Pins beim 644 und 164 sind ja die gleichen.

Übrigens, das oben erwähnte 1:1 flashen hat nicht funktioniert. Leider 
kenne ich mich mit dem Innenleben des Compilers gar nicht aus. Daher 
kann ich auch nicht sagen, wo die Unterschiede zwischen den erzeugten 
Codes lagen.

von c-hater (Gast)


Lesenswert?

Peter K. schrieb:

> sehe ich das richtig, daß sich die ATmegas 644A und 164A nur in der
> Speicherausstattung unterscheiden, sonst aber identisch sind?

Keine Ahnung, ob die beiden wirklich so weitgehend identisch sind, ich 
hatte keine Lust, die beiden DB Stück für Stück zu vergleichen.

> Könnte ich also ein Hexfile, welches für den 644A kompiliert wurde, 1:1
> auf den 164A flashen?

Flashen kannst du immer alles, was in den Flash reinpaßt, das ist doch 
klar. Ob das geflashte Programm dann aber auch läuft, ist eine ganz 
andere Frage.

> Das Programm belegt 5KB Flash, 190Byte Sram und 2
> Byte EEprom.

Schon das kannst du garnicht wissen, jedenfalls nicht, wenn du wirklich 
nur das Hexfile hast und dieses auch nicht weiter analysiert hast.

> Oder gibt es da feine Unterschiede, die im Datenblatt wieder bestmöglich
> versteckt sind?

Versteckt wird da garnichts. Es ist nur eine Schweinearbeit, jedes 
verschissene Register detailliert zu vergleichen. Ich hatte keine Lust 
dazu und du offensichtlich auch nicht.

Da es aber dein Problem ist, bin ich hier fein raus...

Aber wie schon gesagt: Selbst wenn auch penibelste Vergleiche der 
Register kein Unterschiede aufzeigen, so bleibt doch immer noch dein 
potentielles Unwissen über die tatsächliche Speichernutzung zur 
Laufzeit als Risikofaktor.

von Oliver S. (oliverso)


Lesenswert?

c-hater schrieb:
> Keine Ahnung, ob die beiden wirklich so weitgehend identisch sind, ich
> hatte keine Lust, die beiden DB Stück für Stück zu vergleichen.

Na ja, da es sich dabei nicht um zwei verschiedene, sondern nur um ein 
einziges Datenblatt handelt, ist das doch nicht ganz so schwierig. Das 
selbe gilt für die INterrupt-Vektoren.

Peter K. schrieb:
> compilieren

Oliver S. schrieb:
> Da der Mega644 mehr Sram hat, wird es Schwierigkeiten geben, wenn der
> Stackpointer "manuell" auf das Ende des Srams gesetzt wird.

Ich hätte vielleicht noch dazuschreiben sollen, daß avrgcc mit avrlibc 
den Stackpointer immer "manuell" setzt. Damit geht spätestens das erste 
return auf einem 164er in die Hose, da der SP da ins Nirwana zeigt.

Oliver

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.