hei,
habe mir eine struct für String im Flash-Rom angelegt.
Auf die einzelne Strings möchte ich gerne über einen Counter zugreifen,
sodas ich mit Counter Wert 0 die erste Zeile und mit Counter Wert 3 die
vierte Zeile anspreche und nicht für jeden String einzeln mit
String_Label.String_01 bis String_Label.String_04
Wie kann ich dieses machen?
*.c Datei
// hier wichtig ist die Adresse des FLASH
damit kann ich leben obwohl es Profi anders machen würden.
Somit kann ich den String aus Zeile XY auslesen.
mit dem in der Counter in der ersten "[0-X]" die Zeile und mit der
zweiten "[0-31]" das Zeichen adressieren
schönen Tag
Rene H. schrieb:> wie würde es den ein Profi machen?
Er würde bei so einer Frage dazuschreiben, um welchen Prozessor es
überhaupt geht und mit welchem Compiler das ganze umgesetzt werden soll.
Naja, diese Infos bei der Fragestellung sind weniger wichtig.
So wie ich die Frage verstanden habe, es sollen vier Strings möglichst
einfach angesprochen werden.
Da bieten sich meiner Meinung nach, Stringarrays an. Deshalb die Frage
von mir ....
hei,
so ist das, wenn man alt wird!
PIC18F26K22
C18 Compiler
nein, es sind nicht nur vier String, sondern 496.
Zum überlegen habe ich nur vier geschrieben.
schönen Tag
Rene H. schrieb:> So wie ich die Frage verstanden habe, es sollen vier Strings möglichst> einfach angesprochen werden.
Ich hatte es so verstanden, daß er ein Problem damit hat, das so
hinzubekommen, daß die Strings im Flash stehen. Mag sein, daß ich das
missverstanden habe, aber diese Anforderung wurde ja mehrfach besonders
betont.
> Da bieten sich meiner Meinung nach, Stringarrays an.
Zumindest solange die Länge des enthaltenen Texts nicht zu
untesrschiedlich sind. Ansonsten verschenkt man Platz, und irgendwann
wird ein Array aus Zeigern auf die Strings sinnvoller.
Ich sehe, wir haben es wohl beide nicht ganz richtig verstanden.
schnuremaus schrieb:> nein, es sind nicht nur vier String, sondern 496.> Zum überlegen habe ich nur vier geschrieben
Diese Info wäre allerdings wichtig gewesen.
Nun gut....
Beim GCC und Kontrollern mit gemeinsamen Adressraum, für RAM und FLASH
(also keine AVRs) reicht es den String als char* zu definieren, dann
bleibt er im Flash und belegt keinen platz im RAM.
char* myString1 = "Foo Bar"; // Der bleibt im FLASH und ist ReadOnly
char myString2[] = "Hallo Welt"; // Wird vom Startup-Code in den RAM
kopiert.