Wie deklariere ich so etwas im Header const char index_html[]



  • Hallo ihr Lieben. Ich brauche mal wieder eure Hilfe
    Entschuldigung für die blöde Überschrift, da ist mir nichts besseres eingefallen

    Wenn man einen Arduino in C programmiert, muss man sich nicht an einen C Standard halten da kann man im Header, es so deklarieren

    const char index_html[] PROGMEM = R"=====(
    <!DOCTYPE html>
    <html>
     <head>
      <title>ESP32-radio</title>
      <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
      <link rel="stylesheet" type="text/css" href="radio.css">
      <link rel="Shortcut Icon" type="image/ico" href="favicon.ico">
     </head>
     <body>
      <ul>
     ..........................
    

    Meine Frage ist wie deklariere ich das richtig (const char index_html[] )in einem Header und cpp File
    Das habe ich zu PROGMEM gefunden
    https://www.arduino.cc/reference/en/language/variables/utilities/progmem/



  • Das ist erstmal eine Definition (mit impliziter Deklaration)
    index_html ist eine Variable. Und die werden nicht im Header definiert, nur dekalriert

    Die Deklaration wäre dann

    extern const char index_html[] PROGMEM;
    //oder
    extern const char PROGMEM index_html[];
    

    PROGMEM ist eine Compilererweiterung, die den Speicherort der Variable festlegt.
    In diesem Fall der Flash-Speicher, damit das RAM nicht unötig verbraucht wird.



  • Danke schön, so weit war ich auch schon nur dummerweise meckert
    der Compiler dann mit

    ..\Internet_Radio.ino:4492:31: error: invalid application of 'sizeof' to incomplete type 'const char []'
    l = sizeof ( index_html ) ;

    else
        {
         p = index_html ;
        l = sizeof ( index_html ) ;
        }
        if ( *p == '\n' )                                   // If page starts with newline:
        {
    


  • Warum musst du eine von dir geschriebene Konstante auf \n am Anfang überprüfen?

    l=strlen(index_html);
    /* oder */
    while (*p)
    


  • Danke für eure Antworten
    Keine Ahnung das ist ein komplexes Projekt für die Arduino IDE und
    ich möchte es für die Eclipse Umgebung verfügbar machen, weil ich den LCD Treiber umschreiben muss und das ist Eclipse die bessere Wahl als die spatanische
    Arduino IDE.



  • ats3788 schrieb:

    Keine Ahnung

    Das sind schlechte Voraussetzungen.



  • Danke für die Antworten
    Ich habe es folgendermaßen gelöst ich habe mir einfach
    eine function

    const uint8_t favicon_ico[] PROGMEM = {
    0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x20, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x02,
    0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00,
    0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x.....................................
    
    int GetLength(void)
    {
    int Result = sizeof(favicon_ico);
    return(Result);
    
    }
    

    Zu Manni66 Für mich ist C ein Vehikel um ans Ziel zu kommen.Bei 5000 Zeilen Programmcode gibt es Zusammenhänge die man nicht sofort verstehen kann, vor allem wenn sie von eienm anderen geschrieben werden.


Anmelden zum Antworten