Jak jsem si nabehnul aneb double v pacalu na AVR

Andrej Jancura aj.hwlist na gmail.com
Pondělí Červenec 21 09:48:44 CEST 2014


Dobry den,

akurat som sa chcel spytat, ci Vam uz niekto po tych cca. 25 emailoch
rozoberajucich od C vs. Pascal az po free konfiguraciu zivota niekto
poradil ako to v tom C napisat pre tych 64 bitov...  Ak nepohrdnete mojou
inspiraciou, tak tu je :)

Musite si nadefinovat typ uint64 cez typedef tak, ze to budu dva uint32
bezznamienkove integery, high a low part. Jednotlive uint32 musite dalej
rozpisat ako union, ktory je raz uint32 a raz ako uchar8 ci uz pole alebo
strukturu necham na Vas. Potom si musite nadefinovat vlastne operacie +,-,
nasobenie a delenie. Na to potrebujete pracovnu premennu uint16, aby ste
videl pretecenie cez 255, teda 511, co vam undikuje, ze mate pri dalsej
polozke pripocitat 1. No a potom uz idete len byte po byte... Da sa to
urobit aj v C, aj ked vysledny kod asm by bol asi kratsi.

A.



2014-07-21 9:08 GMT+02:00 Pavel Kutina <hw na prelude.cz>:

> Tak to ja bych i rad uz pred puvodnim prispevkem, problem je v tom, ze i v
> datasheetu jsou dve promenne int64, coz v okamziku, kdy mi pouzivany jazyk
> nabizi pouze praci s int32, nepatrne komplikuje zivot.
>
> Ale je pravda, ze konverzi int64 na int32 zvladne podle kolegy weka i
> programatorsky elev (coz ja tedy evidentne nejsem), tak jsem sel cestou
> mensiho odporu. Jen se priznam, ze by mne zajimalo, jak to ten elev udela,
> asi je na mne prilis vedro, ale pocitat s jednim cislem jako s parem
> spodnich a hornich 32 bitu mi pripada kapku napinave, tim spis, kdyz se s
> cislem dal pracuje a neni to jen finalni vysledek.
>
> Pavel Kutina
>
>
> Dne 21.7.2014 8:21, Tomáš Hamouz napsal(a):
>
>  Problém je v tom, že ten example psal nějaký trotl.
>> Napište to přesně podle datasheetu, tam se používají pouze celočiselné
>> typy, dokonce tam máte doporučenou i konkrétní velikost každé
>> proměnné, aby nepřetekla.
>> Na závěr si konverzi na float klidně udělejte.
>>
>> Tomáš
>>
>>
>>  Zdravim,
>>>
>>
>>  tak si musim postezovat:
>>>
>>
>>  Zakoupil jsem sobe ultrapresne tlakove cidlo MEAS MS5611, ze supliku
>>> vyhrabnu Arduino Pro Mini, osazene ATmegou 328P s tim, budu merit tlak a
>>> teplotu a na UART si posilat namerena data.
>>>
>>
>>  Protoze s Arduinem nejsem kamarad (ale ta mrnava desticka s 328P se mi
>>> libi), pripajel jsem na nej ISP konektor, zrusil cely arduinovsky
>>> bootloader a zacal psat v Mikropascalu pro AVR, hex do toho sypu pres
>>> avrdude, dale sama pozitiva a socialni jistoty. Jako voditko jsem mel C
>>> example.
>>>
>>
>>  Vcelku to slo, az do te doby, nez jsem zjistil, ze v examplu je pro pet
>>> promennych v zaverecnych vypoctech pouzita nehezka obludnost:
>>>
>>
>>  double P; // compensated pressure value
>>> double T; // compensated temperature value
>>> double dT; // difference between actual and measured temperature
>>> double OFF; // offset at actual temperature
>>> double SENS; // sensitivity at actual temperature
>>>
>>
>>  A ja jako na potvoru ve svem oblibenem kompilatoru od MikroE mam
>>> nejdelsi datovy typ 32 bitu... Protoze jde o presnost, nejak moc
>>> nepripada v uvahu, ze bych to nekde zkrouhnul a spodni bity zahodil.
>>> Nenapada vas nekoho, jak podobnou zradu ocurat? Urcite by slo promennou
>>> rozhodit na 32bit MSB a LSB, jen nevim, jak bych s tim pak dal pocital.
>>>
>>
>>  Kdyby se nekdo chtel pokochat:
>>> Datasheet MS5611:
>>> http://www.amsys.info/sheets/amsys.en.ms5611_01ba03.pdf
>>> Example code:
>>> http://www.amsys.info/sheets/amsys.en.an520_e.pdf
>>>
>>
>>  Asi nezbyde, nez tam ten arduinovsky loader nacpat zpatky (Arduino
>>> uint64_t umi) a napsat to v tom Wiringu, ale velkou radost z toho nemam,
>>> pripadam si dost jako idiot.
>>>
>>
>>  Pavel Kutina
>>> _______________________________________________
>>> HW-list mailing list  -  sponsored by www.HW.cz
>>> 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
>>
>>  _______________________________________________
> 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/20140721/7f3f2862/attachment.html>


Další informace o konferenci Hw-list