Forum: Compiler & IDEs String in ein Array im Flash uterbringen?


von Viktor (Gast)


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!

von ich (Gast)


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

von Jorge (Gast)


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];

von Viktor (Gast)


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!

von Oliver (Gast)


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

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.