String in ein Array im Flash uterbringen?

Gast #512188
Lesenswert?
• ▲
▼
Hi,

ich versuche hier gerade in eie Programmablaufsteuerung, die als Array 
im Flash abgelegt ist, einen Kommentar einzufügen. Bin bis jetzt aber 
nicht gerade erfolgreich.
const uint8_t pgmProgrammablauf[] PROGMEM =
{
  0x4,    0x0,    0x80,   0x20,   0x0,    0x2,    0x0,    0x0,
  //Kommentar
  "Hallo Welt",
  0x4,    0xf,    0x80,   0x20,   0x0,    0x2,    0x0,    0x0,
};
Kann mir jemand sagen ob es überhaupt möglich ist einen String in ein 
Array dieser Art einzufügen, oder gibt es eine andere Lösung für dieses 
Problem?
z.B.
String einzeln erzeugen und einen Zeiger in das oben dargestellte Array 
einfügen.???

Bin für jeden Vorschlag dankbar!
Gast #512201
Lesenswert?
• ▲
▼
//---------------------------------------------------------------------- 
-------------------
  //Texte aus dem Flash Speicher auslesen 2
void Textausgabe(void)
{
  unsigned char myByte = 1;
  unsigned char i = 0;
  while(1)
  {
    myByte = pgm_read_byte(&Text1[i]);
    if('\0' == myByte){return;}
    PORTB = i+1;    //nur zum testen
    PORTD = myByte; //nur zum testen
    i++;
  }
}
//---------------------------------------------------------------------- 
-------------------
//---------------------------------------------------------------------- 
--------------------
  // Diese Texte werden im Flash gespeichert und von dort gelesen.
  unsigned char Text1[] PROGMEM = "text1";
  unsigned char Text2[] PROGMEM = "ELECTRONIC";
  const prog_char Text3[]  = "text3";



//---------------------------------------------------------------------- 
-------------------

so in etwa habe ich es gelöst.
es muß aber auch noch andere lösungen geben

var mybite enthält dann immer einen buchstaben vom text
Gast #512210
Lesenswert?
• ▲
▼
const  char pgmProgrammablauf[] PROGMEM =
{
  0x4,    0x0,    0x80,   0x20,   0x0,    0x2,    0x0,    0x0,
  //Kommentar
  'H','a','l','l','o',' ','W','e','l','t',
  0x4,    0xf,    0x80,   0x20,   0x0,    0x2,    0x0,    0x0,
};


uint8 befehl=(uint8 )pgmProgrammablauf[i];
Gast #512245
Lesenswert?
• ▲
▼
Hi,

Die Lösung von Jorge habe ich auch schon getestet, aber da ich in dem 
Array sehr viele Schritte des Programmablaufs mit den dazugehörigen, 
auch etwas längeren, Kommentaren abspeichern will währe diese Lösung zu 
Umständlich.
Da ich die Strings schon in das Array der Programmablaufsteuerung 
einfügen muss, damit ich die Zugehörigkeit des Strings zu dem jeweiligen 
Programmschritt erkennen kann, kann ich die Lösung von "ich" leider auch 
nicht anwenden.

Gibt es denn eine Möglichkeit den Zeiger auf einen String in das oben 
Gezeigte Array einzufügen?

Danke für die Tips!
Gast #512407
Lesenswert?
• ▲
▼
Zwei unterschiedliche Datenytpen in einem Array geht nur über ein 
typedef. So ganz ins unreine gedacht etwa so:
1
typedef struct 
2
{
3
   uint8_t uint;
4
   PGM_P Kommentar;
5
} uint_mit_Kommentar;
6

7
char Kommentar_zu_Programmschritt_17[] PROGMEM = "Hallo Welt";
8

9
const uint_mit_Kommentar pgmProgrammablauf[] PROGMEM =
10
{
11
  {0x4, NULL},    {0x0, NULL} , {17,  Kommentar_zu_Programmschritt_17}
12
};

ohne Gewähr
Oliver

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.