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