Hi kann im laufenden Programm eine Speicherzelle im Flash auslesen ? Ich benutze einen PIC Controller.
Flash-Speicher auslesen? Wozu? Im Flash liegt die "Firmware", die man in der Regel selbst hineingebracht hat....
@ 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
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?
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.
>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.
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....
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 ?
@ 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
Es geht um einen PIC16F616. ich find derzeit keine Möglichkeit im Datenblatt bzw. eine passage zu dem thema !?
@ 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
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 !?
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...
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?
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 :(
>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
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.
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.
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 !?
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
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).
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
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... ;)
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!
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
Peter Dannegger wrote: > unsigned char code text[] = "Hallo Welt"; > printf("%s\n", text ); Achja, 'C' gibt's ja auch noch... ;-)
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.