Modernejsie nahrady za watchdogy
Pavel Hudeček
edizon na seznam.cz
Čtvrtek Červen 15 14:50:08 CEST 2023
Tak čas nějakého výpočtu může být třeba řádově delší než reakční doba
něčeho, co ovládá jiný výpočet. V tom bych problém neviděl. Mě se běžně
v MCU děje víc věcí najednou, pravidelně i nepravidelně.
Jedno z řešení je, že např. obecná čekací funkce po skoro každém
milisekundovém přerušení koukne na nějakou sadu proměnných, když jsou
všechny true, nastaví je na false a resetne watchdog. A různé části
programu zas postumně nahodí true.
Další level je, že se pro nějaký extra dlouhý proces, který se kupodivu
musí pouštět v hlavní smyčce, udělá čítací proměnná, třeba
slowProcess1WD, ta se každou sekundu inkrementuje, nahodí se patřičné
true, že jako OK, ale až slowProcess1WD dosáhne WDLIMIT_slowProcess1WD,
s nastavováním true se přestane. No a na konci toho dlouhého procesu se
slowProcess1WD vynuluje.
A samozřejmě existuje nekonečně mnoho lepších či horších možností a
zejména možností vhodnějších/nevhodnějších pro jiné okolnosti.
PH
Dne 15.06.2023 v 12:04 Miroslav Mraz napsal(a):
> A není to tak trochu oxymóron ? Čas výpočtu přece nemůže být z
> principu delší než je očekávaná rychlost reakce a tedy ani než timeout
> WDT. Vlastně mě ani nenapadá nic, co by se muselo počítat (i na běžném
> 8-bitu) déle než je reakční doba člověka.
> Tedy pokud nechcete třeba kalkulačku s přesností stovky desetinných
> míst na AVR, tam si asi můžete na logaritmus počkat dost dlouho, ale
> zase tam je WDT dost zbytečný.
> Chtělo by to nějaký příklad z praxe. Předpokládám, že např. inverzi
> matice 100x100 v MCU dělá málokdo. Už kvůli tomu, že se mu tam nevejde.
>
> Mrazík
>
> On 15. 06. 23 11:08, Jan Waclawek wrote:
>> ...
>> Druhy problem, pouzitia WDT ci uz internych v mcu alebo externych, je
>> pri pisani programu v C. Niektore matematicke rutiny su velke co sa
>> tyka kodu a trvaju dlhy cas, takze casto sa stane, ze interval na
>> refresh WDT sa prekroci a mcu sa zresetuje. ...
Další informace o konferenci Hw-list