C xc8 rozkald double na byty
Jan Waclawek
konfera na efton.sk
Úterý Květen 16 10:56:48 CEST 2017
Ach jaj. To fakt pisem tak nezrozumitelne?
Nie, neexistuje univerzalna prenositelna metoda ako prinutit prekladac
vygenerovat subor reprezentujuci obsah tej pamate. Takze je to vzdy
prekladacovo/platformne-zavisle. A tiez neexistuje "standardna"
reprezentacia cisiel v pamati (najma pri rozsireniach pre pamatove
triedy/named address spaces); ergo takyto subor vygenerovany pre jednu
platformu nebude prenositelny na inu (citaj: nie je zaruka ze je
prenositelny na akukolvek inu, samozrejme *moze* byt prenositelny ak tie
dve platformy maju rovnaku reprezentaciu atd.atd.). Pochopitelne, s
intimnou znalostou internej reprezentacie u platformy A viete takyto subor
vygenerovat na akejkolvek platforme, ale ta intimna znalost je prave
definicia platformovej zavislosti.
Ak naozaj hladate nieco univerzalne pouzitelne, tak asi najlepsie je tu
pamat fyzicky naplnit a potom ju v programatore precitat; ale toto ste asi
nechceli pocut.
>Ono je problém to, µe jsem nikde oficielně nena±el, jak to vlastně zapsat.
Co sa tyka tej v XC8 fungujucej konstrukcie - no tak som si stiahol manual
k XC8, za 5 sekund nasiel makro __EEPROM_DATA a k nemu sa v kap.5.5.5.2
pise:
The __EEPROM_DATA() macro expands into in-line assembly code.
Ergo, ta syntax parametrov - ktora je mimochodom v C priamo chyba, pretoze
C99 6.5.7 explicitne vyzaduje pre obidva operandy operatora >> aby boli
celociselne - je syntaxou inline assembleru ktory sa zda ze je u XC8
priamo konvertovany na jeho asembler. No a potom k tomu je cela kapitola 6.
To fakt je problem si precitat manual?
wek
----- Original Message ---------------
>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.
>
>
>
>
>
>
>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.
>
>
>
>
>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
>
>
>
>
Daląí informace o konferenci Hw-list