Versions Macro

Gast #3539567
Lesenswert?

Hallo Zusammen,

#define VERSION_MAJOR 1
#define VERSION_MINOR 2

#define STRINGIZE2(s) #s
#define STRINGIZE(s) STRINGIZE2(s)
#define VERSION_STRING STRINGIZE(VERSION_MAJOR) "." 
STRINGIZE(VERSION_MINOR)

in VERSION_STRING habe ich jetzt "1.2"

kennt jemand eine Möglichkeit auch "1.002" daraus zu generieren nur mit 
einem macro?


danke
Moderator Persönliche Seite #3539577
Lesenswert?

Mir fiele dazu nur die #if-Anweisung ein:
1
#define VERSION_MAJOR 1
2
#define VERSION_MINOR 2
3
#define STRINGIZE2(s) #s
4
#define STRINGIZE(s) STRINGIZE2(s)
5
#if VERSION_MINOR < 10
6
#  define VERSION_STRING STRINGIZE(VERSION_MAJOR) ".00" STRINGIZE(VERSION_MINOR)
7
#elif VERSION_MINOR < 100
8
# define VERSION_STRING STRINGIZE(VERSION_MAJOR) ".0" STRINGIZE(VERSION_MINOR)
9
#else
10
# define VERSION_STRING STRINGIZE(VERSION_MAJOR) "." STRINGIZE(VERSION_MINOR)
11
#endif
Gast #3539591
Lesenswert?

Der C-Präprozessor ist nicht für sowas gedacht. Du brauchst hier 
Schleifen. Das geht zwar, ist aber ein Krampf.

Setze einfach VERSION_MINOR auf "002" oder generiere die Versionsnummer 
anders. Wenn du C++ verwendest, guck dir mal constexpr an.
#3539625
Lesenswert?

Ich mache das mit ner Batch, die dann auch gleich das Hex entsprechend 
nennt.
1
@echo off
2
set vers_h=01
3
set vers_l=05
4
set name=UVLS600FP
5

6
set fcpu=8e6
7
set mcu=mega328p
8
set main=%name%_V%vers_h%.%vers_l%
9

10
echo --std=gnu99 >opt.z
11
echo -DPROJECT_STRING=\"%name%\" >>opt.z
12
echo -DREVISION_STRING=\"%vers_h%.%vers_l%\" >>opt.z
13
echo -DREV_HI=0x%vers_h% >>opt.z
14
echo -DREV_LO=0x%vers_l% >>opt.z
15
echo -DF_CPU=%fcpu% >>opt.z
16

17
avr-gcc.exe *.c @opt.z -Os -mmcu=at%mcu% -gdwarf-2 -o main.out
18
avr-objcopy.exe -O ihex main.out "%main%.hex"
19
del main.out
20
del opt.z

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