Forum: Mikrocontroller und Digitale Elektronik __DATE__ in Bootloader


von Peter O. (Gast)


Lesenswert?

Hallo Forum,

ich möchte gerne die GCC Defines für das Kompilierdatum auch im 
Bootloader benutzen, bin mir aber nicht sicher, ob ich es korrekt 
umgesetzt habe.
1
#include <avr/io.h>
2
#include <avr/pgmspace.h>
3
4
//gcc builtin defines:
5
static const char PROGMEM CompileDateP[12] = __DATE__;
6
static const char PROGMEM CompileTimeP[9]  = __TIME__;
7
static const char PROGMEM CompilerVerP[6]  = __VERSION__;
8
9
//In der Main vor der Endlosschleife einmalig:
10
unint8_t str[31];
11
unint8_t i;
12
13
//Read compile date and time
14
  str[ 0]='R';
15
  str[ 1]='C';
16
  str[ 2]='D';
17
  str[ 3]='T';
18
  str[ 4]=' ';
19
  for(i=0;i<=11;i++) {
20
    str[5+i] = pgm_read_byte_far(&CompileDateP[i]);
21
    //str[5+i] = '1';
22
  }
23
  str[16]=' ';
24
  for(i=0;i<=8;i++) {
25
    str[17+i] = pgm_read_byte_far(&CompileTimeP[i]);
26
    //str[17+i] = '2';
27
  }
28
  str[25]=' ';
29
  for(i=0;i<=5;i++) {
30
    str[26+i] = pgm_read_byte_far(&CompilerVerP[i]);
31
    //str[26+i] = '3';
32
  }
33
34
  ua_sendbuf((unint8_t*)str,31);

Prinzipiell erhalte ich die Ausgage, die ich erwarte.

Beim pgm_read_byte_far() bekomme ich allerding noch jeweils eine 
Warnung:
1
warning: cast from pointer to integer of different size

Wie bekomme ich die weg?
Und meine eigentliche Frage ist, ob ich das so machen kann, oder ob ich 
da evtl. Probleme mit meinem eigentlichen Programm bekommen kann?
Liegt z.B. CompileDateP wirklich im Flash des Bootloaderbereichs?

von Peter O. (Gast)


Lesenswert?

Noch als Zusatzinfo:
Ich nutze einen AT90CAN128 mit den Fuses:
LFUSE = 0x5f
HFUSE = 0xD8
EFUSE = 0xFB

von (prx) A. K. (prx)


Lesenswert?

Nur so nebenbei: Man kann sich das Leben auch mit dem Gesamtstring
1
   ... [] = "RCDT " __DATE__ " " __TIME__ " " __VERSION__;
erleichtern. Auch wenns nicht gleich ins Auge sticht, ist das doch nur 
EIN String.

von bal (Gast)


Lesenswert?

PROGMEM ist eine obsolete Krücke und noch dazu fehleranfällig.

von Fläsch Rom (Gast)


Lesenswert?

bal schrieb:
> PROGMEM ist eine obsolete Krücke und noch dazu fehleranfällig.

Und was soll man stattdessen verwenden?

von Peter O. (Gast)


Lesenswert?

A. K. schrieb:
> Nur so nebenbei: Man kann sich das Leben auch mit dem Gesamtstring   ...
> [] = "RCDT " _DATE_ " " _TIME_ " " _VERSION_;
> erleichtern. Auch wenns nicht gleich ins Auge sticht, ist das doch nur
> EIN String.

Stimmt, das reicht hier im Prinzip völlig aus.
Danke für den Tipp.

von bal (Gast)


Lesenswert?

Fläsch Rom schrieb:
> bal schrieb:
>> PROGMEM ist eine obsolete Krücke und noch dazu fehleranfällig.
>
> Und was soll man stattdessen verwenden?

__flash, und dem Compiler die Drecksarbeit machen lassen.
Der Code wird auch hübscher.

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
Noch kein Account? Hier anmelden.