mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Speicherzelle auslesen


Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Autor: Niels Hüsken (monarch35)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

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

Autor: Niels Hüsken (monarch35)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: tastendrücker (Gast)
Datum:

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

Autor: Niels Hüsken (monarch35)
Datum:

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

Autor: Simon (Gast)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

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

Autor: Simon (Gast)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

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

Autor: Simon (Gast)
Datum:

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

Autor: Niels Hüsken (monarch35)
Datum:

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

Autor: tastendrücker (Gast)
Datum:

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

Autor: holger (Gast)
Datum:

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

Autor: tastendrücker (Gast)
Datum:

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

Autor: Simon (Gast)
Datum:

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

Autor: tastendrücker (Gast)
Datum:

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

Autor: Reneee (Gast)
Datum:

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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Reneee == Simon

Du willst eine Seriennummer aus dem Flash lesen ;)

Autor: tastendrücker (Gast)
Datum:

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

Autor: tastendrücker (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: tastendrücker (Gast)
Datum:

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

Autor: Simon (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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":
unsigned char code text[] = "Hallo Welt";
printf("%s\n", text );


Peter

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger wrote:

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


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

Autor: holger (Gast)
Datum:

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

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.