C xc8 rozkald double na byty

Miroslav Draxal evik na volny.cz
Pátek Květen 12 15:07:46 CEST 2017


Tahle otázka se dá položit obecně.
Jak v C uložíte desetinné číslo (pro upřesnění double) do paměti eeprom v
IDE. Ne v kontroleru v době běhu programu ale přímo při překladu, aby se
uložilo do eeprom, která se následně nahraje do kontroleru.

-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Miroslav Mraz
Sent: Friday, May 12, 2017 1:24 PM
To: HW-news
Subject: Re: C xc8 rozkald double na byty

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);
>
_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list