String und struct

Gast #4376985
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
Gast #4377037
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
Gast #4377150
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 ....
#4377206
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.
#4377259
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.