Ich würde gerne in mein Firmware-Projekt so etwas wie eine Build-Nummer oder Versionsabfrage einbauen. Gib es ein feature, das automatisch bei jeder neu-Kompilierung die Build-nummer um eins erhöht und bei jeder Komplett-Neuerstellung ausserdem die Versionsnummer ?
M.W. nicht. So etwas regle ich normalerweise mit einer paar Skriptzeilen im Makefile. Außerdem gibt es natürlich noch _DATE_
Meines Wissens gibt es sowas wie eine Versionsnummer nur mit einem Versionverwaltunsgsystem wie rcs, cvs, oder subversion. Da wird im source code ein id-string hinterlegt, der beim ein- und auschecken verändert wird. Sowas könnte man auch per script nachbauen.
Die Build-Nummer passe ich manual an. Daran kann man sich rasch gewöhnen es auch konsequent zu machen. Zudem verwende ich aber noch TIME_ und _DAT als Timestamp für den entsprechenden Build:
1 | prog_char VERSION[] = "01.02.33"; |
2 | prog_char AUTOR[] = "Peter"; |
3 | prog_char BUILT[] = __DATE__ ", " __TIME__; |
4 | |
5 | |
6 | static void BOOT_check(int status) |
7 | {
|
8 | //----------------------------------------------------------------------
|
9 | printf_I("\n\n"); // two new lines |
10 | //----------------------------------------------------------------------
|
11 | if (status & (1<<BORF)) // Brown-Out Reset |
12 | {
|
13 | printf_I("Brown-Out Reset\n"); |
14 | }
|
15 | else if (status & (1<<PORF)) // Power-On Reset |
16 | {
|
17 | printf_I("Power-On Reset\n"); |
18 | }
|
19 | else if (status & (1<<JTRF)) // JTAG Reset |
20 | {
|
21 | printf_I("JTAG Reset\n"); |
22 | }
|
23 | else if (status & (1<<EXTRF)) // External Reset |
24 | {
|
25 | printf_I("External Reset\n"); |
26 | }
|
27 | else if (status & (1<<WDRF)) // Watchdog Reset |
28 | {
|
29 | printf_I("Watchdog Reset\n"); |
30 | }
|
31 | else
|
32 | {
|
33 | printf_I("SW Restart\n"); // jump, call or run into reset |
34 | }
|
35 | printf_I("----------------------------------------\n"); |
36 | printf_I("| Beispiel - Testprogram |\n"); |
37 | printf_I("----------------------------------------\n"); |
38 | printf_I("Version: V-");printf_P(VERSION);printf_I("\n"); |
39 | printf_I("Built: ");printf_P(BUILT);printf_I("\n"); |
40 | printf_I("Autor: ");printf_P(AUTOR);printf_I("\n"); |
Gerade die manuelle Änderung wollte ich umgehen. Time & Date könnte immerhin eine ganz gute Unterscheidung bieten ...
Code::Blocks hat eine solche Funktion die automatisch beim speichern/kompilieren eine Build-Nummer inkrementieren kann - da ich aber inzwischen zu (AVR) Eclipse gewechselt habe, werden solche Aufgaben bei Bedarf von Hand erledigt. mfG Markus
Bernhard schrieb: > Meines Wissens gibt es sowas wie eine Versionsnummer nur mit einem > Versionverwaltunsgsystem wie rcs, cvs, oder subversion. Da wird im > source code ein id-string hinterlegt, der beim ein- und auschecken > verändert wird. Der ändert seinen Wert aber nur bei einem Commit dieser Datei, d.h. um hier so eine Build-Nummer zu bekommen, müßtest du bei jedem Compiliervorgang die Datei verändern und dann commiten.
Nicolas Nickisch schrieb: > Gib es ein feature, das automatisch bei jeder neu-Kompilierung die > Build-nummer um eins erhöht und bei jeder Komplett-Neuerstellung > ausserdem die Versionsnummer ? Willst du das wirklich, bei jeder einzelnen Kompilierung eine Nummer erhöhen? Nummerieren musst du nur, was du irgendwo verwahrst oder was du nach außen gibst. 99 % der Kompilate erzeugst du nur für deinen eigenen Schreibtisch, die werden auch nirgendwo archiviert, stimmts? Also wozu die alle zählen?
Rolf Magnus schrieb: > Bernhard schrieb: >> Meines Wissens gibt es sowas wie eine Versionsnummer nur mit einem >> Versionverwaltunsgsystem wie rcs, cvs, oder subversion. Da wird im >> source code ein id-string hinterlegt, der beim ein- und auschecken >> verändert wird. > > Der ändert seinen Wert aber nur bei einem Commit dieser Datei, d.h. um > hier so eine Build-Nummer zu bekommen, müßtest du bei jedem > Compiliervorgang die Datei verändern und dann commiten. Das ist ein sinnvoller Ansatz. Was wertvoll genug ist, um im SCCS zu landen, ist auch wertvoll genug für eine Buildnummer. So könnte man es machen. Nicht jeder Zwischenstand, bei dem man nur die Debugausgaben geändert hat, muss eine eigene Buildnummer haben.
tuppes schrieb: > 99 % der Kompilate erzeugst du nur für deinen eigenen Schreibtisch, die > werden auch nirgendwo archiviert, stimmts? Also wozu die alle zählen? Ack. Eine Build-Nummer ist nur dann sinnvoll, wenn später der exakte für den Build verwendete Sourcecode reproduzierbar ist, ergo alles was in ein VCS eingecheckt wurde. Eine bei jedem make hochgezählte Nummer ist wertlos, da das erstens nicht reproduzierbar ist, und zweitens wird das inkonsistent, sobald es mehr als eine Arbeitskopie gibt. Letzteres lässt sich i.d.R. spätestens dann nicht mehr vermeiden, wenn man mit mehreren Leuten an dem Projekt arbeitet, aber selbst alleine schränkt man sich mit nur einer Working Copy IMO sehr ein. Allerdings sollte man irgendwie über den Build-Prozess dafür sorgen, dass wirklich nur ein aus einem komplett eingecheckten Source gebautes Image eine "Buildnummer" bekommt. Bei lokal geänderten Sourcen, z.B. zwecks Debugging, sollte das Feld dann z.B. mit "DEV" oder ähnlichem gefüllt werden, damit eindeutig erkennbar ist, dass es sich um einen "Bastel-Build" handelt. Andreas
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.