Atmel AVR Fehlermeldung SPH nicht vorhanden

OP #8097993
Lesenswert?

Ganz nebenbei fällt mir etwas auf: Beim neuerlichen Assemblieren eines älteren Programms, das für den ATiny4313 geschrieben wurde, meldet der "Assembler": "kein SPH vorhanden". "Assembly failed". Obwohl früher das ohne Fehlermeldung durchging. Die include-Datei aus Assembler2 lautet nach wie vor "tn4313def.inc". Das Programm selbst läuft nach Assemblieren, wenn die Zeilen zum Setzen des SPH herausgelöscht worden sind, fehlerfrei. Es sieht so aus, dass die explizite Angabe für SPH einen Fehler darstellt, der aber von den Assembler-Versionen früher (oder später) schlichtweg ignoriert worden ist. Tatsächlich ist die Endadresse 5D. Also 256 Byte SRAM sind verfügbar auch mit Deklaration "nur" SPL. Die neu aufgesetzte Programmierumgebung von Atmel hört auf den Namen Atmel AVR Studio 4.17 666. Bei Anklicken der Installations.exe kommt normalerweise "Ein Administrator hat das Programm geblockt." Es gibt aber Tricks, die Blockierung zu umgehen, so dass auch Windows 11 mitspielt.

ciao
gustav

Moderator Persönliche Seite #8097998
Lesenswert?

1
24. Register Summary
2
Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Page
3
0x3F (0x5F) SREG I T H S V N Z C 9
4
0x3E (0x5E) Reserved – – – – – – – –
5
0x3D (0x5D) SPL SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 12

Ist ja wohl eindeutig, dass er kein SPH hat.

Wenn da versehentlich in einer älteren Version der Include-Datei eins war, lief das natürlich früher durch. Vermutlich passiert trotz "Reserved" einfach nichts, wenn man auf die entsprechende Register-Adresse zugreift.

(Firma: 1984now) #8098027
Lesenswert?

Jörg W. schrieb:

Wenn da versehentlich in einer älteren Version der Include-Datei eins war, lief das natürlich früher durch.

Ja, auch bei dem tn4313def.inc des Studio 4.18 gibt's SPH.

Und ich vermute ganz stark: das ist korrekt so.

Im DB (einem, was die Existenz von SPH abstreitet) steht nämlich, dass SPL zwingend auf eine Adresse >0x60 zu initialisieren wäre. Diese Einschränkung macht aber wenig bis keinen Sinn, wenn es kein SPH gäbe.

Entweder ist SPL mit Wrap-Around implementiert, dann sollte der Initialisierungswert keine Rolle spielen, denn 0x5f z.B. entspräche eben 0x15f realer SRAM-Adresse.

Oder es gibt keinen Wrap-Around, dann ergibt zwar die genannte Einschränkung einen Sinn, aber nur in Kombination mit SPH. Zumindest wäre es dann aber ohne SPH völlig unmöglich, den Stack auf RAMEND zu initialisieren.

Wie auch immer: was nun stimmt, sollte sich mit realer Hardware sehr leicht überprüfen lassen.

Ich hätte sogar noch 2x 4313 rumliegen, aber leider keinen passenden Adapter greifbar, um auf die Schnelle mal so einen Test zu machen. Und zum Löten habe ich heute abend keine Lust mehr.

: Bearbeitet durch User
Moderator Persönliche Seite #8098089
Lesenswert?

Ob S. schrieb:

Im DB (einem, was die Existenz von SPH abstreitet) steht nämlich, dass SPL zwingend auf eine Adresse >0x60 zu initialisieren wäre.

Das steht eh in allen (älteren) AVR-Datenblättern drin.

Beim originalen ATtiny2313-Datenblatt stand sogar noch der Stackpointer generisch als aus zwei Registern bestehend und danach dann der Nachsatz, dass er bei einigen kleineren AVRs nur aus einem besteht.

(Firma: 1984now) #8098096
Lesenswert?

Jörg W. schrieb:

Das steht eh in allen (älteren) AVR-Datenblättern drin.

Ja klar.

Die Frage ist aber nun doch, wie sich das beim 4313 genau verhält. Ist das SPH-Register nicht vorhanden bzw. funktionslos, dann gibt es zwei Varianten, wie SPL zu initialisieren ist, um den Stack auf RAMTOP (nicht RAMEND, wie ich fälschlicherweise schrieb) zu setzen. Nämlich 0xff oder 0x5f. Was davon ist korrekt? Die dritte Variante wäre halt, dass sich der Stack überhaupt nicht auf RAMTOP initialisieren läßt. Und das ist kaum vorstellbar.

Beim originalen ATtiny2313-Datenblatt stand sogar noch der Stackpointer generisch als aus zwei Registern bestehend und danach dann der Nachsatz, dass er bei einigen kleineren AVRs nur aus einem besteht.

Das mag sein. In den alten Includes der 4er-Studios ist allerdings das Register beim 2313 und beim 2313A nicht enthalten (weil natürlich auch nicht nötig), beim 4313 aber sehr wohl.

Ich vermute ganz stark, dass die ganze Verwirrung durch das beschissene gemeinsame DB für 2313A/4313 ausgelöst wurde. Da taucht der 4313 bei der Beschreibungs des Stacks nicht explizit auf. Alles andere (insbesondere auch neuere Includes) sind wohl Folgefehler dieses beschissenen DB.

Beweisen kann ich das derzeit nicht, aber so bald ich mal ein wenig Zeit habe, um ein paar Drähte anzulöten, werde ich die Auflösung des Rätsels nachliefern. Nicht, dass das heute für mich noch wichtig wäre, aber da ich nun schonmal zufällig zwei von den Teilen noch rumliegen habe...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren