Forum: Mikrocontroller und Digitale Elektronik String und struct


von schnuremaus (Gast)


Lesenswert?

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
1
#pragma romdata flashconfig=0xC000
2
3
const far rom typeString_Label String_Label =
4
{
5
  "Text 01",            
6
  "Text 02",  
7
  "Text 03",          
8
  "Text 04",                 
9
  0                     
10
};
11
12
// auf normalen FLASH zurueckschalten
13
#pragma romdata


*.h Datei
1
typedef struct
2
{
3
  unsigned char String_01[32];
4
  unsigned char String_02[32];
5
  unsigned char String_03[32];
6
  unsigned char String_04[32];
7
} typeString_Label;

Vielen Dank im voraus.
schönen Tag

von Rene H. (Gast)


Lesenswert?

Am einfachsten wäre ein String-Array.

Grüsse,
René

von schnuremaus (Gast)


Lesenswert?

hei,

muß allerdings im Flash liegen. Darf kein RAM verbrauchen!

schönen Tag

von schnuremaus (Gast)


Lesenswert?

hei,

habe folgendes in de *.h Datei eingefügt.
1
  unsigned char TESTXY[4][32];

und folgendes in der *.c Datei
1
  {
2
    "abc",
3
    "sabc",
4
    "dabc",
5
    "fabc"
6
  },

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

von Rene H. (Gast)


Lesenswert?

schnuremaus schrieb:
> damit kann ich leben obwohl es Profi anders machen würden.

Aha, wie würde es den ein Profi machen?

von Rolf M. (rmagnus)


Lesenswert?

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.

: Bearbeitet durch User
von Rene H. (Gast)


Lesenswert?

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 ....

von schnuremaus (Gast)


Lesenswert?

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

von Rolf M. (rmagnus)


Lesenswert?

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.

von Rene H. (Gast)


Lesenswert?

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....

von Christian K. (the_kirsch)


Lesenswert?

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.

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.