www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Seltsames Assembler-Kommando in Bootloader


Autor: Scheintod (Gast)
Datum:

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

Autor: Scheintod (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anstelle von '.data' heisst es unter 'Erstens' natürlich '.word'

Autor: Andi (Gast)
Datum:

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

Autor: Scheintod (Gast)
Datum:

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

Autor: Andi (Gast)
Datum:

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

Autor: Manfred (Gast)
Datum:

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

Autor: Andi (Gast)
Datum:

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

Autor: Scheintod (Gast)
Datum:

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

Autor: Andi K. (Gast)
Datum:

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

Autor: Jürgen (Gast)
Datum:

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

Autor: Manfred (Gast)
Datum:

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

Autor: Scheintod (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jürgen,

@instruction-set: Meines ist das hier:
http://www.atmel.com/dyn/resources/prod_documents/...

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....
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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Jürgen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Scheintod:

Da hast Du in der Tat die falsche Version des Datasheets.
In meinem steht das drin.
Habs mal angehangen.

Autor: Scheintod (Gast)
Datum:

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

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.