C xc8 rozkald double na byty

Zuffa Jan ZuffaJ na cgc.sk
Úterý Květen 16 10:33:33 CEST 2017


No riesenie je

// double x = _NR;

Koli zadefinovaniu pre eeprom je tam zbytocne


j.

From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Miroslav Draxal
Sent: Tuesday, May 16, 2017 10:01 AM
To: 'HW-news'
Subject: RE: C xc8 rozkald double na byty

Ono je problém to, že jsem nikde oficielně nenašel, jak to vlastně zapsat. A docela mě to zaráží, protože zapsat do eeprom nějakou double konstantu mi přijde, že není zase až tak exotické.
Pokud použiju v xc8 to
double x = _NR;
Tak to vyhodí varování, že x není použito. Dá se to lokálně zakázat.

From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Jaroslav Buchta
Sent: Tuesday, May 16, 2017 8:19 AM
To: HW-news
Subject: Re: C xc8 rozkald double na byty

No ono to bute takove to reseni, ktere muze nekdy fungovat ale mne se z toho trosku jezi chlupy. Vyborna vec je mit pak potrebu prenest takoveto zdrojaky na jinou platformu.

Dne 16.05.2017 v 8:00 Zuffa Jan napsal(a):
divne, skusil som vo visual studiu a tam to bez explicitneho pretypovania
na int skoci na chybe illegal, left operand has type 'double

j.

From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Miroslav Draxal
Sent: Monday, May 15, 2017 9:26 PM
To: 'HW-news'
Subject: RE: C xc8 rozkald double na byty

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





_______________________________________________

HW-list mailing list  -  sponsored by www.HW.cz<http://www.HW.cz>

Hw-list na list.hw.cz<mailto:Hw-list na list.hw.cz>

http://list.hw.cz/mailman/listinfo/hw-list


------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20170516/cc714366/attachment.html>


Další informace o konferenci Hw-list