No, téma dlouhý jako pohádka, ale dám ještě jednu příhodu z praxe.
Dělám embedded věci. Řeklo by se, že je to jenom šmrdlání pinama, sem tam vyčtení hodnoty z ADC, nastavení PWM,..
Občas je potřeba nějaká regulační smyčka, takže PID regulace (proporcionální - integrační - derivační). Tam musím mít představu, co se děje. QPSK modulace a další zase požadují motýlkový algoritmus pro DFT na rozeznání symbolů. Pro hledání signálu v šumu je zase jak dělaný Duhamelův integrál. Statistiku při průměrování vzorků z A/D převodníku a výpočty odchylek, filtr n. řádu u demodulátoru (IIR, FIR), výpočty spolehlivosti zálohování systému atd. snad není potřeba zmiňovat. Snad jenom sem tam nějaká Laplaceova transformace, ale tu jsem letos potřeboval jenom jednou při návrhu zdroje.
Nedávno za mnou přišel kolega. Hledal řešení problému. Měl jednu linku a dva TRXy, který nemohly jet současně a chtěl linku přidělovat rovnoměrně. Jak na to? No podle času, samozřejmě. Chtěl rvát do kruhových bufferů časy za nějaký interval, ale nějak neměl dost RAMky. Jak na to? Moje rada byla tahle:
Xn = A * Q + (1-Q) * Xn - 1; 0 < Q < 1
První, co ho napado, že potřebuje float knihovny. A že tam bude moc násobení apod. Po sdělení, že se to dá dělat stylem (pro q = 1/8)
uint32_t vypocet(uint32_t delta) {
static uint32_t buff = 0;
uint32_t tmp = (buff << 3) - buff + delta;
buff = tmp >> 3;
return buff;
}
pochopil, že je to asi realizovatelný (každý TRX 4B RAM a 4B v zásobníku během výpočtu).
Jenomže pak ho trápil strach, že to vyletí k nekonečnu. Po vysvětlení, že pokud A má omezenou maximální hodnotu, nemůže to nijak překročit a algoritmus se vrací k nule, si to stejně raděj ověřil.
A jak to dopadlo? Jako u někoho, kdo použije vzorec, který mu někdo poradí a nerozumí tomu, co ten vzorec počítá a jak se k tomu výsledku dostane. Nefungovalo mu to. Pokud přidělil linku na dobu několika period, tak počítal čas bokem, do funkce rval nuly a sumu tam plácl po zavěšení. Místo aby tam každou periodu rval 100%, jenom v první a poslední část času, strávenou komunikací.
Takže nechcete-li být v práci za voly, učte se matiku. Jinak si naběhnete i tam, kde to nečekáte.