C xc8 rozkald double na byty
Miroslav Draxal
evik na volny.cz
Pondělí Květen 15 21:26:12 CEST 2017
Mohu potvrdit, že XC8 ver 1.38
#define CelkovyVykon_kWh_rokDb_EEPROM 596.250
__EEPROM_DATA(0, // byt0 CelkovyVykon_kWh_denDb
0, // byt1
0, // byt3
0, // byt4 CelkovyVykon_kWh_denDb - 4bytová přesnost
CelkovyVykon_kWh_rokDb_EEPROM & 0xff, // byt0
CelkovyVykon_kWh_rokDb
(CelkovyVykon_kWh_rokDb_EEPROM >> 8) &0xff, // byt2
(CelkovyVykon_kWh_rokDb_EEPROM >> 16) &0xff, // byt3
(CelkovyVykon_kWh_rokDb_EEPROM >> 24) &0xff); // byt4
CelkovyVykon_kWh_rokDb 4bytová přesnost
To uloží správně do eeprom jako 596.25
Nic se násobit nemusí.
Míra
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Zuffa Jan
Sent: Monday, May 15, 2017 11:08 AM
To: HW-news
Subject: RE: C xc8 rozkald double na byty
Zdravim,
nezabudnite pred ulozenim vynasobit 10 lebo inak pridete
o cast za desatinnou ciarkou :) neskusal som ale typujem ze kompilator
to interne pretypuje na int.
j.
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Miroslav
Draxal
Sent: Friday, May 12, 2017 5:45 PM
To: 'HW-news'
Subject: RE: C xc8 rozkald double na byty
Teď jsem se dostal k PC, tohle funguje . Díky za nakopnutí panu Zuffovi.
Velice pomohlo.
Je to v podstatě jednoduchý, nějak mě tohle nenapadlo.
Míra
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Zuffa Jan
Sent: Friday, May 12, 2017 1:05 PM
To: HW-news
Subject: RE: C xc8 rozkald double na byty
Zdravim,
skuste takto:
#define _NR 560.0
double x = _NR;
#define byt1 _NR & 0xff
#define byt2 (_NR >> 8) &0xff
#define byt3 (_NR >> 16) &0xff
...
j
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Miroslav
Draxal
Sent: Friday, May 12, 2017 12:18 PM
To: 'HW-news'
Subject: RE: C xc8 rozkald double na byty
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);
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Tomáš Hamouz
Sent: Friday, May 12, 2017 12:09 PM
To: HW-news
Subject: Re: C xc8 rozkald double na byty
Možná se znemožním, ale opravdu má double v xc8 jen 4 byty?
Šlo by to udělat tak že si konstantu definujete opravdu jako konstantní
proměnnou.
const double x = 560.0;
uint8_t byte0 = ((uint8_t*)&x)[0];
uint8_t byte1 = ((uint8_t*)&x)[1];
a tak dál
Tomáš
Dobrý den,
Jde nějak v C ve zdrojáku rozložit číslo ve tvaru double na 4 byty?
Potřeboval bych tvar
Double x = 560.0;
Rozložit do tvaru
#define byt1 0x44
#define byt2 0x0C
#define byt3 0x00
#define byt4 0x00 // což je prezentace 0x440C0000 což je 560.0
560.0 je konstanta, která se mění při každém programování zařízení a pokaždé
to musím přepočítávat do byt1 ~ byt 4. Nějakou automatizaci bych potřeboval,
protože těch konstant je vícero.
Díky za nápady. Míra
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20170515/e695af98/attachment.html>
Další informace o konferenci Hw-list