Forum: Mikrocontroller und Digitale Elektronik Speicherzelle auslesen


von Simon (Gast)


Lesenswert?

Hi

kann im laufenden Programm eine Speicherzelle im Flash auslesen ?
Ich benutze einen PIC Controller.

von Niels H. (monarch35)


Lesenswert?

Flash-Speicher auslesen? Wozu? Im Flash liegt die "Firmware", die man in 
der Regel selbst hineingebracht hat....

von Falk B. (falk)


Lesenswert?

@ Niels Hüsken (monarch35)

>Flash-Speicher auslesen? Wozu?

Vielleicht um Tabellen, Strings und ähnliche Konstanten zu lesen?

Der AVR kann das, PIC wahrscheinlich auch.

MFG
Falk

von Niels H. (monarch35)


Lesenswert?

Falk Brunner wrote:

> Vielleicht um Tabellen, Strings und ähnliche Konstanten zu lesen?

Wie ich bereits sagte, in der Regel hat man diese Sachen in einem 
Hexfile vorliegen. Warum sollte man sich die arbeit machen, diese aus 
dem Flashspeicher zu lesen?

von Karl H. (kbuchegg)


Lesenswert?

Niels Hüsken wrote:

> Wie ich bereits sagte, in der Regel hat man diese Sachen in einem
> Hexfile vorliegen.

Man kann sich auch bewusst dämlich anstellen.
Wie soll denn das laufende Programm diese Sachen aus dem
Hexfile, welches üblicherweise nur auf dem Entwicklungsrechner
existiert, auslesen?

> Warum sollte man sich die arbeit machen, diese aus
> dem Flashspeicher zu lesen?

Weil die Tabelle, die das Programm benötigt nun mal im
Flash liegt. Da solche Tabellen sehr oft konstanten Charakter
haben, macht es durchaus auch Sinn sie dort zu belassen und kein
SRAM dafür zu verschwenden.

von tastendrücker (Gast)


Lesenswert?

>Wie ich bereits sagte, in der Regel hat man diese Sachen in einem
>Hexfile vorliegen. Warum sollte man sich die arbeit machen, diese aus
>dem Flashspeicher zu lesen?

Das Hexfile wird doch aber in den Flash-Speicher "gebrannt". Und eine 
evtl. darin enthaltene Tabelle will doch auch wieder gelesen werden.

Aber vielleicht sollte Simon mal schreiben, was genau er eigentlich 
will. Allgemein kann man sagen: Ja, Flash-Speicherzellen können gelesen 
werden, auch mit einem PIC.

von Niels H. (monarch35)


Lesenswert?

Karl heinz Buchegger wrote:

> Weil die Tabelle, die das Programm benötigt nun mal im
> Flash liegt. Da solche Tabellen sehr oft konstanten Charakter
> haben, macht es durchaus auch Sinn sie dort zu belassen und kein
> SRAM dafür zu verschwenden.

ähhmm, ja sorry. Jetzt ist mir klar, was gemeint ist.
Ich dachte, hier geht es darum, von aussen auf den Speicher des uc 
zuzugreifen um das Flash auszulesen....

von Simon (Gast)


Lesenswert?

Hallo

Danke für die vielen Kommentare.
Ein Beispiel wenn ich jetzt unter der Adresse 740
zwei ASCII Zeichen AA abgelegt sind. Dann müßte ich doch irgend wie die 
ASCII Zeichen AA im Programm wieder lesen können oder ?

von Falk B. (falk)


Lesenswert?

@ Simon (Gast)

>zwei ASCII Zeichen AA abgelegt sind. Dann müßte ich doch irgend wie die
>ASCII Zeichen AA im Programm wieder lesen können oder ?

Ja wo bleiben denn die PIC Spezialisten? Und um welchen PIC geht es 
denn? Was sagt das Datenblatt. Kann doch nicht so schwer sein.

MFg
Falk

von Simon (Gast)


Lesenswert?

Es geht um einen PIC16F616.
ich find derzeit keine Möglichkeit im Datenblatt bzw. eine passage zu 
dem thema !?

von Falk B. (falk)


Lesenswert?

@ Simon (Gast)

>Es geht um einen PIC16F616.

Wenn ich das Datenblatt richtig verstehe kann dieser PIC das nicht. Noch 
ein Argument mehr, zum AVR zu wechslen. ;-)

MFG
Falk

von Simon (Gast)


Lesenswert?

Hallo Falk

kannst du mir sagen wo im Datenblatt unter welcher Rubrik die Thematik 
behandelt wird oder wie das Feature normalerweise heißt um den Flash zu 
lesen !?

von Niels H. (monarch35)


Lesenswert?

Schau mal auf Seite 24 des Dokumentes 41288C.pdf (von Microchip). Dort 
wird über das indirekte Adressieren den Speichers über das FSRegister 
erzählt.

Ich glaube, das ist das wonach du suchst. Sonst habe ich allerdings 
0-Plan von PIC...

von tastendrücker (Gast)


Lesenswert?

Das können so dierekt nur die PIC18 (TBLRD/TBLWRT).

Bei PIC12/16 musst du den Umweg über 'DT' zum anlegen von Tabellen gehen 
(siehe MPASM Manual). Vorrausgesetzt du willst Tabellen verwenden. Was 
genau brauchst du denn bzw. was willst du erreichen?

von holger (Gast)


Lesenswert?

Wie wärs mit

org 740d
retlw 'A'
retlw 'A'

Dann halt nur call auf die Speicheradresse 740.
Im W Register steht dann dein ASCII Code.
Oder so ähnlich. Kann nicht wirklich PIC-ASM :(

von tastendrücker (Gast)


Lesenswert?

>Wie wärs mit

>org 740d
>retlw 'A'
>retlw 'A'

Exakt soetwas macht 'DT'

  org 0x0740
  DT 'Hallo',0

ergibt:

  retlw 'H'
  retlw 'a'
  retlw 'l'
  retlw 'l'
  retlw 'o'
  retlw  0   ; String ende Kennung

von Simon (Gast)


Lesenswert?

Hallo tastendrücker

wie genau funktioniert das mit DT , ich benutze im Moment einen C 
Compiler muß mich jetzt erst mal wieder in Assembler einlesen. Ich denke 
ich kann in meinen C Quelltext auch Assembler einbinden.

von tastendrücker (Gast)


Lesenswert?

Es ist am besten, du sagst mal, was du machen willst.

- Text zur Ausgabe auf auf LCD aus dem Flash lesen
- Eine Wertetabelle anlegen
- Einfach nur rumspielen
- Die Forenteilnehmer testen
- ....

Dann kann ich dir evtl. einen Beispielcode geben.

von Reneee (Gast)


Lesenswert?

Hallo tastendrücker

Einen text aus Flash lesen und an ein LCD schicken
beschreibt meine intension eigentlich ganz gut.
Hast etwas in der Art, würde mir sicher weiterhelfen !?

von holger (Gast)


Lesenswert?

@ Reneee == Simon

Du willst eine Seriennummer aus dem Flash lesen ;)

von tastendrücker (Gast)


Lesenswert?

So könntest du den Text 'Hallo Welt' auf einem Display ausgeben (aus 
AN587):

---------------------------------------------------
    movlw   0          ; Zeiger auf 1. Zeichen
dispmsg
    movwf   TEMP1      ; Zeiger sichern

    call    Table      ; n. Zeichen aus Tabelle holen
    andlw   0FFh       ; String Ende?
    btfsc   STATUS,Z   ;
    goto    fertig     ; ja   -> Textausgabe fertig
    call    SEND_CHAR  ; nein -> Zeichen ausgeben
    movf    TEMP1,w    ; Zeiger auf
    addlw   1          ; nächstes zeichen
    goto    dispmsg    ; und weitermachen
fertig:
    :
    :


Table:
    addwf   PCL, F     ; Sprung zum n. Zeichen (n in W-Register)
    DT 'Hallo Welt', 0
---------------------------------------------------


Die Assembler-Direktive 'DT' macht aus

    DT 'Hallo Welt', 0

eine Reihe retlw's:

    retlw 'H'
    retlw 'a'
    retlw 'l'
    retlw 'l'
    retlw 'o'
    retlw ' '
    retlw 'W'
    retlw 'e'
    retlw 'l'
    retlw 't'
    retlw 0

von tastendrücker (Gast)


Lesenswert?

PS: Du must nur darauf achten, dass deine Tabelle keine Page-Grenzen 
überschreitet, weil sonst das

  addwf   PCL, F

sonstwohin springt. Wie das geht, finde mal selbst heraus 
(->Lerneffekt).

von Peter D. (peda)


Lesenswert?

Simon wrote:
> wie genau funktioniert das mit DT , ich benutze im Moment einen C
> Compiler

Dann schau einfach mal ins Manual von Deinem Compiler, wie man konstante 
Daten im Flash definiert.


Peter

von tastendrücker (Gast)


Lesenswert?

Peter Dannegger wrote:

> Dann schau einfach mal ins Manual von Deinem Compiler,

Maual? Wieso, es gibt doch Foren. Das Manual müsste doch erstmal 
ausgepackt werden... ;)

von Simon (Gast)


Lesenswert?

Hallo tastendrücker

na na so ist das nicht bin schon den ganzen Tag am ausprobieren und 
lesen von Datenblättern. :-)

Danke für die Unterstützung!

von Peter D. (peda)


Lesenswert?

Simon wrote:

> na na so ist das nicht bin schon den ganzen Tag am ausprobieren und
> lesen von Datenblättern. :-)

Da kannste lange suchen, die Compilerbeschreibung steht in keinem 
Datenblatt.

Wie die entsprechende Syntax ist, hängt nicht vom Chip ab, sondern vom 
Compiler.

Ich benutze z.B. den 8051 mit Keil C51 Compiler und da heißt das 
Schlüsselwort "code":
1
unsigned char code text[] = "Hallo Welt";
2
printf("%s\n", text );


Peter

von tastendrücker (Gast)


Lesenswert?

Peter Dannegger wrote:

> unsigned char code text[] = "Hallo Welt";
> printf("%s\n", text );


Achja, 'C' gibt's ja auch noch... ;-)

von holger (Gast)


Lesenswert?

>unsigned char code text[] = "Hallo Welt";

Das Array muss er jetzt aber noch an Adresse
740 (oder 0x740 ?) festnageln. Sonst klappt das was
er machen möchte nicht. Wie das geht steht wie immer im
Handbuch des Compilers.

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.