Hallo zusammen, ich portiere ja gerade die avr231 auf den gcc. Das orginal ist für den IAR. Dabei bin ich im spm-part auf folgendes seltsames Konstrukt gestoßen: --- schnipp --------------------------------------- spmSPM: movw r31:r30, r17:r16 rcall spmWait in r20, SREG cli #ifdef _RAMPZ_ in r21, RAMPZ out RAMPZ, r18 #endif #ifdef _MEMSPM_ sts SPMREG, r22 #else out SPMREG, r22 #endif #ifdef _RAMPZ_ espm #else spm #endif dw 0xFFFF nop #ifdef _RAMPZ_ out RAMPZ, r21 #endif out SREG, r20 ret spmWait: #ifdef _MEMSPM_ lds r23, SPMREG andi r23, (1 << SPMEN) brne spmWait #else in r23, SPMREG sbrc r23, SPMEN rjmp spmWait #endif ret --- schnapp --------------------------------------- 2 Dinge verstehe ich nicht: Erstens und vor allem: "DW 0xFFFF" kann ich für den gcc asm als .data 0xFFFF übersetzen. Das fügt einfach 0xFFFF in den Code ein. Aber was zur Hölle macht es????? 2. Das Kommando 'espm' kennt weder das Instruction-Set Datenblatt, noch mein Compiler. Auch die Doku vom iar-asm weiss nichts dazu. Ein fehler von Atmel oder nur wieder ich, der nicht an der richtigen Stelle Sucht? Besten Dank, Scheintod
Anstelle von '.data' heisst es unter 'Erstens' natürlich '.word'
"2. Das Kommando 'espm' kennt weder das Instruction-Set Datenblatt, noch mein Compiler. Auch die Doku vom iar-asm weiss nichts dazu. Ein fehler von Atmel oder nur wieder ich, der nicht an der richtigen Stelle Sucht?" Du. Such einfach mal hier im Forum, da findest Du das auch...
Andi, suche ich hier im Forum nach "espm", bekomme ich genau 2 Treffer. (Jetzt vermutlich 3). Alle überschrieben mit "Seltsames Assembler-Kommando in Bootloader". Schoene Gruesse, Scheintod
Tja, das solltest Du nochmal üben... Ich jedenfalls finde eine Antwort, die Dir alles erklären würde... P.S.: Es gibt nicht nur das "µC & Elektronik"-Forum hier...
@Scheintod ich hoffe du hast eine Erklärung gefunden denn ich hatte letzte Woche auch die Portierung des AES-Bootloaders auf meine ToDo-Liste gesetzt...schön zu sehen, dass auch andere daran denken...vielleicht lässt du uns ja dann an deinen Ergebnissen teilhaben Grüße
Nehmt es mir nicht übel, aber sowohl die Suche als auch eine Internetsuchmaschine als auch die Atmel-Dokumente erklären das sehr gut. Kein Wunder, daß oft Leute hier Sachen schreiben wie RTFM.
Manfred, klar. Dachte mir ich veröffentliche das ganze dann hier als Patch- + Makefile, nachdem ich nicht weiss, wie es Atmel mit der Lizensierung ihrer ANs handhabt. Andi, schlechten Tag gehabt heute? Ich auch. Mir hat man gerade das Vorderrad meines Fahrrades geklaut. Kein Spass bei der Hitze zu Fuß durch die halbe Stadt zu dackeln. Ich würde mich aber trotzdem freuen, ließest Du mich an Deinen Erkenntnissen teilhaben. Klar, was das espm Kommando machen sollte ist mir auch klar. (spm mit rampz-register.). Nur macht das schon das spm-kommando alleine. Der gcc-as noch dazu kennt es nicht einmal. Die Datenblätter (mega128 complete, can128 complete) melden auch 0 Treffer. Das Forum hier gibt auch nix her (oder ich bin tatsächlich zu blöd, aber mehr als 'Suche' anklicken, alle Bereiche anwählen & espm als Suchbegriff eingeben fällt mir auch nicht dazu ein.) Also wenn Deine Suche hervorragende Links & Doku produziert, würde ich mich über Links dazu freuen. Schoene Gruesse, Scheintod
Das mit dem "ESPM" ist aber wirklich ein Fall für sich. Zum einen findet man nur einen einzigen Eintrag ohne Link einer Erklärung in der Hilfe des aktuellen AVR-Studio (SP3) und zum anderen kennt das AVR-Studio den Befehl nicht als Programmcode und bringt nen Error. Schon sehr seltsam. Habe auch die PDF´s zum Mega128 und Mega2560 mit dem Reader nach ESPM durchsuchen lassen - NICHTS über ESPM. In der Gesamt-Befehlsliste bei Atmel ist es mit Erklärung aufgeführt aber keine Hinweise, für welche Megas der Befehl sein soll. @Scheintod: Bleibt nur übrig, das Du Deinen GCC aktuallisierst. @Alle anderen: Helft ihm doch ein bißchen auf die Sprünge, wozu ist das Forum denn sonst da! MfG Andi
"Das Kommando 'espm' kennt weder das Instruction-Set Datenblatt" Meins schon. "In der Gesamt-Befehlsliste bei Atmel ist es mit Erklärung aufgeführt aber keine Hinweise, für welche Megas der Befehl sein soll." In meiner steht es schon: Für "MCUs with more than 64K bytes data space". Ansonsten,wie wäre es mit: http://www.mikrocontroller.net/forum/read-2-95964.html#96546
[...] nachdem ich nicht weiss, wie es Atmel mit der Lizensierung ihrer ANs handhabt. [...] müsste man jemanden fragen der sich da auskennt - ich überlege gerade wo ich immer was von einem ATMEL-Mitarbeiter gelesen habe...entweder treibt der sich im avrfreaks-forum rum oder das war bei c.a.embedded...ach ja, Ulf hiess der glaub ich ... den könnte man mal anhauen? Grüße P.S. @Scheintod falls man dir bei irgendwas helfen kann, lass es uns/mich wissen
Jürgen, @instruction-set: Meines ist das hier: http://www.atmel.com/dyn/resources/prod_documents/DOC0856.PDF Da finde ich nichts. (Nicht nur um zu zeigen, dass ich nicht komplett verblödet bin. Welches Instruction-Set Datenblatt hast Du?) @http://www.mikrocontroller.net/forum/read-2-95964.html#96546: Ja klar, dass würde ich mir auch unter dem espm kommando vorstellen. Nur macht das schon das spm-kommando alleine. S. z.B. Doku zum mega128. Um sicherzugehen hab ich mir jetzt mal die Doku zum derzeit größten AVR, dem mega2560 runtergeladen. Auch die kennt kein espm sondern nur spm, lpm und elpm. Manfred, Danke für das Angebot. Da wäre noch die Frage nach dem 0xffff :) Und wenn ich eine funktionierende Version habe brauche ich natürlich Leute zum ausprobieren & für Verbesserungsvorschläge. Schoene Gruesse, Scheintod
Nun, da im Mega128 Datenblatt kein ESPM drin steht wird es auch nicht unterstützt und darf daher nicht verwendet werden. Und da es nichtmal im letzten (4.3.2005) original Atmel Assembler drin ist, sach ich mal das gibt es garnicht. Vielleicht ist es ja auch nur ein Macro, welches in irgendeinem Include-File definiert wird. Das .db 0xFFFF + NOP stammt noch aus den Errata-Sheets zu den allerersten Megas mit SPM (z.B. Mega323), da wurde der erste Befehl nach SPM falsch ausgeführt. Bei den heutigen AVRs kannst Du es also weglassen. Peter
@Scheintod: Da hast Du in der Tat die falsche Version des Datasheets. In meinem steht das drin. Habs mal angehangen.
Peter, vielen Dank für die aufschlußreiche Antwort. Damit dürfte ich den Assembler-Teil abschließen können. Schön wenn man auf Erfahrung zurückgreifen kann (die Fehlt mir doch noch.) Jürgen, danke fürs Datenblatt. Tatsächlich ist da das Kommando drinnen. Aber Dein Datenblatt ist von '99. Da ist es auch (noch?) ein eigener Befehl mit eigenem Opcode. Was wohl aus dem Kommando geworden ist? Seltsamerweise in der avr231 als Kommando nur für den mega128 drin, also nicht für die alten. Schoene Gruesse, Scheintod
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.