Op 12 augustus 2019 16:53:15 schreef flipflop:
[...]
Dom?
Sorry, kon het niet laten.
Het is ook niet waar. Het is zeker niet dom. Maar wel erg afhankelijk van je toepassing en de omgeving waar het in draait. Of het z'n plek heeft in een Arduino...? Ik weet het niet. Maar voor de hobby mag alles, toch? En het is leerzaam, maar dan zou ik het gewoon zelf vanaf scratch implementeren.
In strakke real-time toepassingen is het een heel erg gebruikelijke manier van werken. Een kleine nuance: meestal wordt er in de main-loop wel op een timer gewacht, maar is dat dan hetzij de interrupt-vlag die wordt gelezen, hetzij een volledige counter waarde. Een echte interrupt wordt niet afgevuurd*.
In toepassingen die om deze methode vragen kost het je ook niet veel tijd, als je bedenkt dat je dusdanig deterministisch bezig bent dat je, als je programmatuur "af is" gewoon kunt uitrekenen hoe lang je main-loop worst-case zal duren. Als dat 9ms is, dan kun je aan het eind van elke loop wachten tot (ik zeg maar wat) 9,5ms en dan weer doorgaan. Je hebt nog een extra fail-safe: als je de timer ooit op 10ms betrapt, dan weet je zeker dat er iets fout is gegaan (althans: niet zoals jij had bedacht toen je de software schreef). Dat geeft je een watchdog, en afhankelijk van je toepassing kun je in een noodprogramma gaan, of resetten, of een error-lijn hoog maken, etc.
(* Deze watchdog wordt dan juist wél weer vaak als interrupt geïmplementeerd.)
Wij hebben deze methode meer dan eens in luchtvaarttoepassingen gebruikt.