ASM x C

Petr Kubáč petrkubac@802.cz
Pátek Červenec 24 22:45:30 CEST 2009


> Docela by mě zajímalo, co znamená " casove kriticke casti programu" -
> jako nějaký příklad. Nedokážu si prostě představit něco, co se dá udělat
> v ASM a v C (při správném nastavení překladače, linkeru atd.) ne.

Nedovedu si moderni a slozite procesory ala ARM nebo X86 programovat jinak 
nez ve vyssim jazyku uz kvuli nejasnemu vyznamu co je pro tyto architektury 
vlastne optimalni kod, ale pokusim se priblizit jednu aplikací, kterou si 
moc nedovedu predstavit v C

Mam udelany z AVR na 16 MHZ ultrazvukovy dalkomer, jednim reproduktorem 
piskne a dvema mikrofony posloucha, aby krome vzdalenosti mel jeste azimut 
(podle casove diference leveho a praveho kanalu)

Aby nedochazelo ke zkresleni v analogovem retezci tak se signal z mikrofonu 
digitalizuje primo a to na 4 nasobku pracovni frekvence - to jest 2kanaly x 
40kHz x 4 = 320kHz.

System posloucha 0.1 sec to je 32 000 vzorku, protoze zadne bezne AVR nema 
takovou pamet tak se paralelne s digitllizaci z obou kanalu extrahuji echa a 
to presneji jenom jejich "nabezne hrany"
a spolu s casovou znackou ulozit do bufferu pro dalsi zpracovani

A ted pocitejme - 16 MHz / 320 kHz = 50 taktu na jeden vzorek - dost jsem se 
zapotil i v ASM protoze nejrobustnejsi algoritmus se ukazal byt takovy, 
ktery behem tech 50 taktu spocita dva exponencialni klouzave prumery kazdy s 
jinou casovou konstatnou, ty od sebe odecte a pokud je vysledek vyssi nez 
kriticka hodnota tak si ji spolu s hodnotou timeru ulozi do bufferu

Co vy na to v 50 taktech ?

Zdravi Petr Kubac





Další informace o konferenci Hw-list