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