__DATE__ ins Flash

Gast #1448934
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 #1449005
Hallo,

und warum tut das ? Wenn ich nun

char FLASH_FOR_APPLICATION test2 = __DATE__[0];

mache tuts wieder nicht, error: initializer element is not constant

Gruss
Hans
Gast #1449143
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
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. :-)
Persönliche Seite #1449306
Bei mir geht's so
1
const char DATE1[] __attribute__((section (".foo"))) = __DATE__;
2
// oder 
3
const char DATE2[] PROGMEM = __DATE__;

Für Section .foo muss man natürlich noch ld-Skript etc. anpassen.

Johann
1
.global  DATE1
2
  .section  .foo,"a",@progbits
3
  .type  DATE1, @object
4
  .size  DATE1, 12
5
DATE1:
6
  .string  "Oct 16 2009"
Gast #1449392
@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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.