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