mikrocontroller.net

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


Autor: Viktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jorge (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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];

Autor: Viktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwei unterschiedliche Datenytpen in einem Array geht nur über ein 
typedef. So ganz ins unreine gedacht etwa so:
typedef struct 
{
   uint8_t uint;
   PGM_P Kommentar;
} uint_mit_Kommentar;

char Kommentar_zu_Programmschritt_17[] PROGMEM = "Hallo Welt";

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

ohne Gewähr
Oliver

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.