C xc8 rozkald double na byty

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Úterý Květen 16 10:11:10 CEST 2017


Ja to schvalne zkusil v MSVS a teda nenapada me, jak to udelat.
Program

     float tmp = 1.0F;
     volatile uint32_t u = *(uint32_t *)&tmp;
     return 0;

stejne vytvori tu promennou tmp i pri zapnute optimalizaci...

     float tmp = 1.0F;
00D51EC4  mov         dword ptr [tmp],3F800000h
     volatile uint32_t u = *(uint32_t *)&tmp;
00D51ECB  mov         eax,dword ptr [tmp]
00D51ECE  mov         dword ptr [tmp],eax

Dne 16.05.2017 v 10:02 Miroslav Draxal napsal(a):
> Re: C xc8 rozkald double na byty
>
> Jak vy se to třeba zapisovalo na jiných platformách - mikrokontrolerech?
>
> Míra
>
> *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 bywww.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
>
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> 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/d11c61c8/attachment-0001.html>


Další informace o konferenci Hw-list