ralphi: C/C++ Befehl time(NULL) falscher Wert?

Beitrag lesen

Hi all,
Danke erst mal an Alle:
Also der Befehl radio.write() erwartet void* als Daten.

Wenn ich jetzt:

time_t stamp2 = time(NULL);

    uint8_t stamp[4];
    stamp[0] = (stamp2 >> 0)& 0xFF;
    stamp[1] = (stamp2 >> 8)& 0xFF;
    stamp[2] = (stamp2 >> 16)& 0xFF;
    stamp[3] = (stamp2 >> 24)& 0xFF;

Dann passen die Bytes :-)

//Allerdings:
    cout << "stamp: " << (unsigned long) *stamp << endl; // nur das erste Byte
    cout << "stamp: " << (unsigned int) stamp << endl; // nur Adresse
//Jetzt bekomm ich:
    radio.write( &stamp, 4); //sizeof(stamp)) ; // Also Adresse von stamp
    // nix gscheids

Kann aber auch ein Fehler im µC-Prog sein!?

Bei:

uint8_t stamp[4];
*(unsigned long*)stamp = time(NULL);
cout << "stamp: " << *(unsigned long*)stamp << endl;

warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]

So richtig, wie ich an den Speicherbereich bei Linux ran muss, weiß ich noch nicht?
Beim µC hab ich:

uint8_t data[32];
//..
// füll es
//..
// VCC
    data[x] = 0x01; x++;
    data[x] = analogValue & 0xFF; x++;
    data[x] = (analogValue >> 8) & 0xFF; x++;
//.. usw
// SENSDEREI
    radio.powerUp(); 
    radio.write( data, sizeof(data) );
    radio.powerDown();

das klappt ohne Probleme!?

Viele Grüße aus LA
ralphi

--
"Nicht alles was einfach ist, ist genial, aber alles was genial ist, ist einfach" - Albert E.