Jak jsem si nabehnul aneb double v pacalu na AVR
Pavel Kutina
hw na prelude.cz
Pondělí Červenec 21 10:38:49 CEST 2014
Puvodne neapsal, ale to vcelku nevadilo, protoze C v arduinu int64 i uint64 umi, takze jsem to prepsal tam, byla to cesta nejmensiho odporu, byt na to "skoro jako IDE" nadavam.
Hratky s vypocty v 64 bitech v Pascalu si zatim schovam na dlouhe zimni vecery jako cviceni, ted to potrebuju co nejdriv dostat do vzduchu.
Kazdopadne diky vsem za rady.
Pavel Kutina
----- Original Message -----
From: Andrej Jancura
To: HW-news
Sent: Monday, July 21, 2014 9:48 AM
Subject: Re: Jak jsem si nabehnul aneb double v pacalu na AVR
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
------------------------------------------------------------------------------
_______________________________________________
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/87e2fc5e/attachment.html>
Další informace o konferenci Hw-list