mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik langer String im Flash


Autor: Steven () (ovular) Benutzerseite
Datum:

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

Autor: Der Micha (steinadler)
Datum:

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

Autor: Steven () (ovular) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ldi ZL, low(text*2)
ldi zH, high(text*2)

ja

Autor: Der Micha (steinadler)
Datum:

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

Autor: Steven () (ovular) Benutzerseite
Datum:
Angehängte Dateien:

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

Autor: Der Micha (steinadler)
Datum:

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

Autor: Steven () (ovular) Benutzerseite
Datum:
Angehängte Dateien:

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

Autor: Steven () (ovular) Benutzerseite
Datum:

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

Autor: Der Micha (steinadler)
Datum:

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

Autor: Steven () (ovular) Benutzerseite
Datum:

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

Autor: Peter (Gast)
Datum:

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

Autor: Der Micha (steinadler)
Datum:

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

Autor: Steven () (ovular) Benutzerseite
Datum:

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

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreib mal spaßenshalber nicht lpm.. z+

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

Autor: Steven () (ovular) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau das gleiche Problem!

noch ne Idee?

Autor: Der Micha (steinadler)
Datum:

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

Autor: Der Micha (steinadler)
Datum:

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

Autor: Steven () (ovular) Benutzerseite
Datum:
Angehängte Dateien:

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

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
änder mal das BRGE nach BRSH.

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

Autor: Steven () (ovular) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ha super, Danke!!!
Es funktioniert...

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

Danke nochmal!

Gruß Steven

Autor: Der Micha (steinadler)
Datum:

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

Das ist eine ganz übersichtliche Auflistung find ich.

Autor: Steven () (ovular) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vieleicht find ich das nächste mal den Fehler selbst...

Danke für das ISet!

Gruß Steven

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.