Gast
#663943
Hi kann im laufenden Programm eine Speicherzelle im Flash auslesen ? Ich benutze einen PIC Controller.
|
Anzeige
|
Speicherzelle auslesen
Gast
#663943
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.
Gast
#663991
>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....
Gast
#664030
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
Gast
#664040
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
Gast
#664060
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...
Gast
#664068
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?
Gast
#664071
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 :(
Gast
#664080
>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
Gast
#664085
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.
Gast
#664132
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.
Gast
#664167
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 !?
Gast
#664170
@ Reneee == Simon Du willst eine Seriennummer aus dem Flash lesen ;)
Gast
#664198
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
Gast
#664202
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
Gast
#664213
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... ;)
Gast
#664219
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":
Peter
Gast
#664231
Peter Dannegger wrote: > unsigned char code text[] = "Hallo Welt"; > printf("%s\n", text ); Achja, 'C' gibt's ja auch noch... ;-)
Gast
#664238
>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 schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|