Forum: Mikrocontroller und Digitale Elektronik [Yagarto GCC] Ganze Datei als const string einbinden


von Fabian H. (hdr)


Lesenswert?

Hallo Forum,
ich habe auf einem STM32F103 ein Webserver implementiert. Nun würde ich 
gerne eine Datei (in diesem Fall die CSS Datei) als const char[] 
einbinden, so dass diese mit in den Flash wandert.
Die Webseite ist nicht so umfangreich, dass ich einen externen Speicher 
nutzen müsste.
Aktuell habe ich die css Datei als const char hinterlegt. Hier ist 
jedoch das Problem, dass ich jede Zeile mit " beginnen und beenden muss, 
damit der Compiler es als String erkennt.

Gibt es eine Möglichkeit eine komplette Datei als const char[] 
einzubinden?!

Vielen dank und viele Grüße

Fabian

von nicht"Gast" (Gast)


Lesenswert?

nicht getestet

const char bla[]="
#include "datei.css"
"

von Timmo H. (masterfx)


Lesenswert?

Semikolon hinter ' " ' nicht vergessen

von S. R. (svenska)


Lesenswert?

Du kannst eine beliebige Datei in eine Object-Datei konvertieren 
(objcopy) und einfach mit in dein Projekt linken; die Adressen gibt es 
dann in Symbolen, die du benutzen kannst. Das kannst du im Makefile auch 
automatisieren.

Die Datei einfach per #include reinziehen könnte Probleme mit dem 
Escaping geben, außerdem macht das dem Compiler mehr Arbeit.

von Sven B. (scummos)


Lesenswert?

nicht"Gast" schrieb:
> nicht getestet
>
> const char bla[]="
> #include "datei.css"
> "

Das geht nicht, die String-Literale umfassen immer nur eine einzelne 
Zeile.
Ich würde versuchen das irgendwie mit deinem Build-System zu lösen.

von Timmo H. (masterfx)


Lesenswert?

Jo habe ich beim testen auch gerade gemerkt. Also externes Tool wie xxd 
oder selbst machen, siehe 
http://stackoverflow.com/questions/410980/include-a-text-file-in-a-c-program-as-a-char
1
#include <stdio.h>
2
3
int main() {
4
    int c;
5
    while((c = fgetc(stdin)) != EOF) {
6
        printf("'\\x%X',", (unsigned)c);
7
    }
8
    printf("'\\0'"); // put terminating zero
9
}

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.