__DATE__ ins Flash

Gast #1448934
Lesenswert?

Hallo,

ich würde gerne das Build-Datum an eine entsprechende Stelle im Flash 
schreiben lassen. Dazu hab ich folgendes gemacht (beispielhaft):

#define TEST __attribute__((section(".testaddr")))

uint8_t TEST test[2] =
{
    __DATE__[0], __DATE__[1]
};

Für die Section .testaddr hab ich eine entsprechende Adresse definiert. 
Leider bekommt beim kompilieren:

error: initializer element is not constant

Wie macht man das denn richtig ? Danke.

Hans
Gast #1449143
Lesenswert?

Okay, danke. Aber da _DATE_ ja konstant ist, müsste ich doch daraus 
auch wieder anderen konstante Werte ableiten können, oder ? Im Prinzip 
möchte ich sowas in der Art von

(__DATE__[0] * 10) + __DATE__[1]

als Konstante im Flash ablegen. Geht das irgendwie ? Wenn ja, wie ?

Danke...

Hans
Moderator Persönliche Seite #1449272
Lesenswert?

Nein, man kann (in C) daraus so nichts ableiten, da ein string literal
syntaktisch keine Konstante ist.  (Ein konstantes Array darf man
trotzdem damit initialisieren, weil dies wiederum explizit gestattet
ist.)  Wie gesagt, in C++ geht das, da ist ein string literal wirklich
eine Konstante, die auch beim Indizieren wiederum Konstanten ergibt.

Was in C geht ist sowas:
1
char foo[2] = __DATE__;

Gibt natürlich eine Warnung ;-), aber es funktioniert.  Allerdings
kann ich dem Standard gerade nicht entnehmen, dass das auch wirklich
definiertes Verhalten ist. :-)
Gast #1449392
Lesenswert?

@Jörg: Okay, aber damit bekomme ich dann zum Beispiel
1
(__DATE__[3] * 10) + __DATE__[4]

nicht hin :-( Du schreibst aber:

string literal -> konstantes Array geht in Ordnung, da explizit 
gestattet
kann ich dann aus dem konstanten Array wieder teilen ? Also:
1
char TEST test[] = __DATE__;
2
char TEST test2 = test[0];



@Johann: Oben hatte ich ja geschrieben, dass
1
char TEST test[] = __DATE__;

funktionier, aber folgendes
1
char TEST test2 = __DATE__[0];

nicht. Da wusste ich nicht, dass wenn ich das _DATE_ indizier, kein 
const mehr rauskommt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren