Forum: Mikrocontroller und Digitale Elektronik langer String im Flash


von Steven (. (ovular) Benutzerseite


Lesenswert?

Hallo zusammen!

Ich möchte in Assembler einen String im Flash abspeichern (ATMega8). Der 
soll aber 'ne länge von ca 200 Zeichen haben.

Ich hab das versucht mit ".db" und das ganze in den Z-Pointer laden, 
aber bei ca. 128 Zeichen hörts auf. Ich schätze mal, dass R31 nicht 
benutzt wird. Kann man das irgendwie aktivieren?


Gruß Steven

von Der M. (steinadler)


Lesenswert?

Steven W. wrote:
> Hallo zusammen!
>
> Ich möchte in Assembler einen String im Flash abspeichern (ATMega8). Der
> soll aber 'ne länge von ca 200 Zeichen haben.
>
> Ich hab das versucht mit ".db" und das ganze in den Z-Pointer laden,
> aber bei ca. 128 Zeichen hörts auf. Ich schätze mal, dass R31 nicht
> benutzt wird. Kann man das irgendwie aktivieren?
>
>
> Gruß Steven

Wie hast du das denn geladen?

So hier?

ldi ZL, low(pointer)
ldi zH, high(pointer)
?

von Steven (. (ovular) Benutzerseite


Lesenswert?

ldi ZL, low(text*2)
ldi zH, high(text*2)

ja

von Der M. (steinadler)


Lesenswert?

Steven W. wrote:
> ldi ZL, low(text*2)
> ldi zH, high(text*2)
>
> ja

Das sollte dann eigentlich funktionieren.

Poste doch mal den ganzen Code!?

Brauchst du das für ne LCD-Ausgabe?
wie liest du das denn aus? mit lpm r, z+? Oder inkementierst du selber?

von Steven (. (ovular) Benutzerseite


Angehängte Dateien:

Lesenswert?

Also ich poste jetzt mal nur ein paar Zeilen, also das was damit zu tun 
hat. Sonst wirds unübersichtlich

Ein LCD ist es keins.Es ist ein Dotmatrix LED-Modul...

von Der M. (steinadler)


Lesenswert?

Hast du da mal Debug drüberlaufen lassen?

Eventl. eine '0' durch einen Zeilenumbruch o. Ä. im string?

Der Sprung zu TextOut1 funktioniert nicht, da TextOut1 nicht vorhanden 
ist.
Und warum lädst du den Pointer schon so zeitig? Nicht, dass dir 
irgendein Befehl davor R30/31 überschreibt.
Du machst "push Stelle". Wo ist das zugehörige POP? Stacküberlauf???
Und wo ist der Rücksprung aus TextOut2?

Gibts auch ne Main-Loop?

von Steven (. (ovular) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hab jetzt Textout mit eingefügt (Habs vergessen...)

nach 127 Zeichen ist zu Ende. Eine Null oder ein Zeilenumbruch hab ich 
nicht im String

Ach Gott!!! ich habe IN geschrieben innerhalb des Strings an dem liegt 
es, denn es wird vom Compiler als Befehl erkannt (blau markiert).
Wie kann ich das umgehen?

Mir fällt gerade ein, dass ich folgendes machen könnte

db. "ein haus i","n Deutschland",0

gibts da noch was anderes?

von Steven (. (ovular) Benutzerseite


Lesenswert?

Fehlalarm!!!

Das mit dem IN geht nicht.

Ich kann nicht Debuggen auf'm ATmega8, oder?

Main Loop gibts ja

pop stelle ist im TextOut1, sorry!

von Der M. (steinadler)


Lesenswert?

Steven W. wrote:
> Fehlalarm!!!
>
> Das mit dem IN geht nicht.
>
> Ich kann nicht Debuggen auf'm ATmega8, oder?
>
> Main Loop gibts ja
>
> pop stelle ist im TextOut1, sorry!

Liegts an dem IN?
Weiß ja nicht, was für nen Assembler du verwendest.
Probier mal
.DB @"Dein String mit IN", 0

bzw. das ganze mal mit einfachen Anführungszeichen.

Debuggen geht höchstens über deine Entwicklungsumgebung.

von Steven (. (ovular) Benutzerseite


Lesenswert?

>Debuggen geht höchstens über deine Entwicklungsumgebung.
Soweit ich weiß, kann mann den ATMega8 nicht debuggen.

Ich probiers mal aus, ich poste dann morgen weiter.

Danke schonmal!

Gruß Steven

von Peter (Gast)


Lesenswert?

> als Befehl erkannt (blau markiert).
also dem compiler ist die Farbe ziemlich egal, das ist bloss eine 
Eigenart der IDE - ich denke der compiler versteht schon was du von ihm 
willst auch wenn es blau ist.

von Der M. (steinadler)


Lesenswert?

Steven W. wrote:
>>Debuggen geht höchstens über deine Entwicklungsumgebung.
> Soweit ich weiß, kann mann den ATMega8 nicht debuggen.
>
> Ich probiers mal aus, ich poste dann morgen weiter.
>
> Danke schonmal!
>
> Gruß Steven

Das ist korrekt.
Ich meinte eher ein offline-Debuggen.
Also ich mach sowas über VMLAB.
Da wird quasi der Controller simuliert.

von Steven (. (ovular) Benutzerseite


Lesenswert?

Morgen allerseits!

@Micha
Simulieren, sags doch gleich...

Laut AVR-Studio werden die 200 Zeichen im Flash komplett abgelegt. 
(Memory Window)

Am "in" liegts definitiv nicht, das wird warscheinlich wirklich nur ne 
Stringerkennung vom AVR-Studio sein.

Mein Problem: Es werden nur 127 Zeichen ausgegeben nach dem 128sten ist 
schluss, obwohl es laut AVR-S. im Flash steht.

Kann man überhaupt mehr als 127 Zeichen (auf einmal) Speichern?
Sollte doch gehen oder?

Gruß Steven

von Der M. (steinadler)


Lesenswert?

Schreib mal spaßenshalber nicht lpm.. z+

sondern nur
lpm reg
und anschließend
adiw r31:r30,1

von Steven (. (ovular) Benutzerseite


Lesenswert?

Genau das gleiche Problem!

noch ne Idee?

von Der M. (steinadler)


Lesenswert?

Steven W. wrote:
> Genau das gleiche Problem!
>
> noch ne Idee?

Was ist denn das?
cp FDigit, A

Was ist FDigit und was ist A? Bzw. wo zeigen die hin.

von Der M. (steinadler)


Lesenswert?

Und wieso beendest du die TextOut-Funktion nach 8 Ausgaben???

Ich habs jetzt mal ohne die Zeilen

;  rcall Aout
;  inc r16
;  cpi r16, 8
;  breq TextOutx

simuliert.

Da werden exakt alle Zeichen ausgegeben.

Also müsstest du in diesen Zeilen mal nach dem Fehler suchen.

von Steven (. (ovular) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich hab jetzt mal den Quellcode auskommentiert und komplett hochgeladen.
Eine kurze Erklährung steht am Ende

Mach ich das nächste mal gleich.

von Der M. (steinadler)


Lesenswert?

änder mal das BRGE nach BRSH.

Das BRGE ist eine Signed-Instruktion - könnte also mit der 128 
zusammenhängen.

von Steven (. (ovular) Benutzerseite


Lesenswert?

Ha super, Danke!!!
Es funktioniert...

Mir ist das noch gar nicht aufgefallen, dass es Signed und Unsigned 
vergleiche gibt...

Danke nochmal!

Gruß Steven

von Der M. (steinadler)


Lesenswert?

Steven W. wrote:
> Ha super, Danke!!!
> Es funktioniert...
>
> Mir ist das noch gar nicht aufgefallen, dass es Signed und Unsigned
> vergleiche gibt...
>
> Danke nochmal!
>
> Gruß Steven

Büdde büdde,

schau mal hier:
http://www.atmel.com/dyn/resources/prod_documents/DOC0856.PDF

Das ist eine ganz übersichtliche Auflistung find ich.

von Steven (. (ovular) Benutzerseite


Lesenswert?

Vieleicht find ich das nächste mal den Fehler selbst...

Danke für das ISet!

Gruß Steven

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.