C51 コアのマイクロコントローラを使用しています。500 ミリ秒ごとに呼び出す必要がある、かなり時間のかかる大規模なサブルーチンがあります。RTOS は使用されていません。
私が今やっている方法は、10ミリ秒の既存のタイマー割り込みがあることです。メイン プログラム ループで真であることがチェックされる 50 回の割り込みごとにフラグを設定します。Flag が true の場合、サブルーチンが呼び出されます。問題は、プログラム ループがフラグを処理するまでに、すでに 500 ミリ秒を超えており、特定のコード パスの場合は 515 ミリ秒を超えることさえあります。所要時間は正確に予測できません。
明らかに、実行に時間がかかるため、タイマー割り込み内からサブルーチンを呼び出すことはできません。サブルーチンは、さまざまな条件に応じて 50ms から 89ms かかります。
サブルーチンが毎回正確に 500ms で呼び出されるようにする方法はありますか?