Timestamp des Compilers auf den AVR schreiben

Persönliche Seite #5069539
Lesenswert?

Hi,

gibt es evtl. sogar schon ein Byte, welches OOTB bei jedem 
Compiliervorgang erzeugt wird und auf dem Controller landet?

Anderenfalls, wie würde man es am einfachsten anstellen, dass ein 
Timestamp automatisch beim compilieren erzeugt und mit auf den AVR 
geschrieben wird?

Ich möchte am Ende des Tages ein Datumsstempel (egal in welchem Format) 
auf dem angeschlossenen Display ausgeben können, dass mir zusätzlich zur 
händisch gepflegten Versionsnummer (auf einen Blick!; hex-Files zweier 
unbekannter Chips auslesen und mit DIFF vergleichen ist ein Workarround 
aber keine zufriedenstellende Option;-) bestätigt, dass es sich um den 
gleichen Code handelt.

Grüße Oekel

PS: wir reden hier nicht von fälschungssicher. Es geht eher um die 
Bequemlichkeit mittels 1-2 Programmzeilen.
Gast #5070230
Lesenswert?

D a v i d K. schrieb:
> Anderenfalls, wie würde man es am einfachsten anstellen, dass ein
> Timestamp automatisch beim compilieren erzeugt und mit auf den AVR
> geschrieben wird?

Mit einem Timestamp erkennst du nicht, ob der gleiche Code drauf ist. 
Damit siehst du nur, ob er aus dem selben Compilerlauf stammt.

Ein Hash-Wert des Codes wäre zur Unterscheidung evtl. besser geeignet.
Beitrag #5070409 wurde von einem Moderator gelöscht.
Persönliche Seite #5070525
Lesenswert?

Wolfgang schrieb:
> D a v i d K. schrieb:

> Ein Hash-Wert des Codes wäre zur Unterscheidung evtl. besser geeignet.

In der Theorie hast du recht.  In der Praxis compilieren ich ja nur, 
wenn ich auch Änderungen vorgenommen habe. Bzw. ich flashe nur 
Versionen, die ich mir zuvor gesichert habe (alos aus der IDE 
extrahiere).

Daher ist der Anwendungsfall schon abgedeckt.
Persönliche Seite #5070528
Lesenswert?

Carl D. schrieb:
> Warum EEProm? Warum nicht Flash?

Nur damit ich es nun nicht verwechsel: Flash wäre, wenn ich das EEEMEM 
aus der Deklaration streiche?
(Also der ganz normale Speicher?)

In dem Fall lautet meine Antwort: um Flash-Speicher zu sparen.

Ansonsten: nutze ich den Flash noch gar nicht???
Wofür War dieser gleich noch geeignet/optimiert?

Grüße Oekel
Beitrag #5070538 wurde von einem Moderator gelöscht.
#5070856
Lesenswert?

D a v i d K. schrieb:
> Dumpfbacke schrieb:
>> D a v i d K. schrieb:
>
>> Der existiert ganz einfach schon wenn du einen Code compilierst
>> ... wo dieser String definiert ist.
>
> So meinte ich das auch.

Beim AVR muß man eine Stringkonstante schon in Flash zwingen, sonst 
landet sie im RAM.
Vielleicht war das ja auch nur ein Schreibfehler und es war PROGMEN 
statt EEMEM gemeint.
1
char PROGMEM compileTimestamp[] = __DATE__ +"|"+ __TIME__;
Falls dies dann per printf ausgegeben werden soll, muß %S (groß!) als 
Formatzeichen verwendet werden, um den String direkt aus dem Flash zu 
lesen. Entsprechendes gibt es für das EEprom nicht. Oder eben 
printf_P(), wobei der FormatString selbst aus dem Flash kommt und z.B.
1
__DATE__ und __TIME__
 nach obigem Muster enthält.
Gast #5071094
Lesenswert?

D a v i d K. schrieb:
> Wolfgang schrieb:
>> D a v i d K. schrieb:
>
>> Ein Hash-Wert des Codes wäre zur Unterscheidung evtl. besser geeignet.
>
> In der Theorie hast du recht.  In der Praxis compilieren ich ja nur,
> wenn ich auch Änderungen vorgenommen habe. Bzw. ich flashe nur
> Versionen, die ich mir zuvor gesichert habe (alos aus der IDE
> extrahiere).
>
> Daher ist der Anwendungsfall schon abgedeckt.

Und Du -resp. dein buildtool , so es schlau ist- compiliert nur die 
Dateien die geändert wurden.
Änderst Du immer nur die Datei mit der Zeile wo _DATE__ und __TIME_ 
irgendwohin zugewiesen werden?
Auch wenn diese Datei zu einer (natürlich vorcompiliert abgelegten) 
Bibliothek gehört, welche man aus Gründen von Effizienz und 
Qualitätssicherung genau so dazu nur-linken will, wie man sie 
letzten Monat binär auf Herz und Nieren getestet hatte?

In einer kleinen Welt mit Horizont nur auf 8-Bit-Distanz wir deine 
Praxis wohl schon zutreffen.

In einer grösseren Welt, mit gut Architektierten und gut Strukturierten 
Projektorganisation (gerne auch mit mehreren, auf mehreren Standorte 
verteilten, Mitarbeiter) ist darauf zu achten dass die Zeilen welche 
solche Buildspezifische Information in die Buildartefakte einbringen 
sollen tatsächlich auch bei jedem Builddurchlauf compiliert werden.

Meine bevorzugte Variante besteht u.A. darin dass solche Information 
ausserhalb des Quellcodes aufbereitet wird und allen am Build 
beteiligten Werkzeuge (konkret: nicht nur dem Compiler) per 
Kommandozeilenparameter forciert mitgegeben werden.
Alternativ wird solche Information in eine für den Build *zwingend 
notwendige* (Quellcode-)Datei geschrieben, diese aber nicht in der 
Versionsverwaltung vorliegt. Der Buildablauf generiert diese; z.b. durch 
abändern einer Vorlagedatei in der Platzhalter zu ersetzen sind.
#5071109
Lesenswert?

Programmiersprachentheaterintendant schrieb:
>
> In einer kleinen Welt mit Horizont nur auf 8-Bit-Distanz wir deine
> Praxis wohl schon zutreffen.
>
> In einer grösseren Welt, mit gut Architektierten und gut Strukturierten
> Projektorganisation (gerne auch mit mehreren, auf mehreren Standorte
> verteilten, Mitarbeiter) ist darauf zu achten dass die Zeilen welche
> solche Buildspezifische Information in die Buildartefakte einbringen
> sollen tatsächlich auch bei jedem Builddurchlauf compiliert werden.
>
> Meine bevorzugte Variante besteht u.A. darin dass solche Information
> ausserhalb des Quellcodes aufbereitet wird und allen am Build
> beteiligten Werkzeuge (konkret: nicht nur dem Compiler) per
> Kommandozeilenparameter forciert mitgegeben werden.
> Alternativ wird solche Information in eine für den Build *zwingend
> notwendige* (Quellcode-)Datei geschrieben, diese aber nicht in der
> Versionsverwaltung vorliegt. Der Buildablauf generiert diese; z.b. durch
> abändern einer Vorlagedatei in der Platzhalter zu ersetzen sind.

Ich lebe zwar auch von Software (die weltweit verteilt entwickelt wird), 
aber meine μC (AVR) Projekte am Abend kommen mit einem Entwickler und 
2m2 Fläche aus. Eventuell geht es David ähnlich.
Und an gut architiktierten und professionellen Projektorganisationen 
glaubt man nur, wenn man sie nicht kennt.

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