AVR a dva seriaky
Lukáš Grepl
L.Grepl@sh.cvut.cz
Pátek Prosinec 12 09:59:05 CET 2008
> To je dobra blbost s tym vobec nieco robit. Este raz opakujem, v C sa
> o SW UART pokusaju len diletanti. Ak pisete nejaku hracku na vlastne
> potesenie, no prosim; ale ak to ma byt produkt predavany za peniaze,
> tak to snad bude lepsie urobit poriadne, nie?
Nějak mi není jasné, proč by to nemohlo být v C a zároveň pořádně. Možná
to bude o 10 nebo 20% pomalejší (ve smyslu maximální dosažitelné
rychlosti), ale jinak v tom nevidím větší problém. Jde o to JAK to
člověk napíše a ne v čem.
V C se to dá asi snadněji zprznit, když člověk neví co dělá. Pokud někde
vidím
void delay()
{
int i;
for (i = 0; i < 100; i++)
;
}
tak mi taky vstávají vlasy na hlavě. (Když už pro nic jiného, tak tam
chybí dost podstatné klíčové slovo volatile - takhle napsáno to nemusí
čekat ani instrukci, pokud je překladač dostatečně optimalizující). Ale
když napíšu ten SW UART v C s využitím přerušení, časovačů, SPI nebo
všeho možného co už tu zaznělo, proč by to mělo být apriori diletantské
řešení?
Psal jsem např. nedávno principiálně obdobnou aplikaci - přesné měření
malých frekvencí pro PIC. Je to kompletně v C (důležitá část asi
20řádků), ale využívá to samozřejmě pro primární měření patřičný HW,
takže při 5MIPS to funguje v rozsahu nějakých 0.1Hz (nebo i méně) do
50kHz s časových rozlišením 200ns. Možná by to v ASM měřilo do 70 (a
možná bych to psal dvakrát tak dlouho), ale proč, když potřeba bylo
řekněme 10 a řešení v C plně vyhovuje?
Lukáš Grepl
Další informace o konferenci Hw-list