C xc8 rozkald double na byty

Miroslav Mraz mrazik na volny.cz
Pátek Květen 12 13:24:15 CEST 2017


Protože nevidím souvislost mezi nutností mít konstantu jako define a 
ukládáním do EEPROM, zkusil bych nějaký ten union:

typedef unsigned char BYTE;
typedef double        REAL;

void print (const BYTE * bp, const unsigned len) {
   unsigned n;
   for (n=0; n<len; n++) printf ("<%02X>", bp[n]);
   putchar ('\n');
}

typedef union rb_u {
   const REAL r;
   const BYTE b[sizeof (REAL)];
} rbu_t;
void test (void) {
   const rbu_t rb = {.r=560.0};
   print (rb.b, sizeof (rb));
}

Ale netuším, jak by to fungovalo na nějakém PICu, vyhýbám se jim jako 
čert kříži a když tak vidím různé dotazy ohledně této architektury, asi 
u toho zůstanu.

Mrazík

Dne 12.5.2017 v 12:18 Miroslav Draxal napsal(a):
> Dá se nastavit přesnost  3 (dokonce) nebo 4 byty v XC8 linker/Memory model
>
> Potřebuju to dostat do define, protože to pak ukládám do eeprom v době
> vývoje.
>
> #define byt1       0x44
> #define byt2       0x0C
> #define byt3       0x00
> #define byt4       0x00 // což je prezentace 0x440C0000 což je 560.0
>
> __EEPROM_DATA(byt1, byt2, byt3, byt4, 0, 0,0, 0);
>


Další informace o konferenci Hw-list