Я согласен с ответом Дэна - вот некоторые дополнения / улучшения:
(1) Вычисления на основе окон. , поскольку, по умолчанию, по-видимому, не имеет периодичности, вам нужно будет рассчитать его время выполнения с точки зрения процента, потраченного на эту задачу за какое-то окно (скажем, 1000 мс). Вам нужно будет определить статическую переменную, используемую для накопления щелчков по таймеру. По истечении срока действия вашего окна (т. Е. Пройдено 1000 мс) вы можете рассчитать время, проведенное по умолчанию, по сравнению с 1000 мс, что будет процентом, потраченным по умолчанию. Когда я читаю ваше описание, кажется, что состояние «По умолчанию» в основном является состоянием бездействия, что означает, что этот процент примерно равен вашему доступному микроиспользованию.
(2) один ролловер в час. . Если вы можете использовать 32-битный счетчик и захватывать метки времени usec, вы можете сделать это чуть более чем за 1 час до того, как произойдет любое опрокидывание. Если вы используете это для домашнего проекта, у вас есть возможность игнорировать ролловеры. Это будет способствовать единственному искаженному окну в 1000 мсек, и все. Если, с другой стороны, вы собираетесь контролировать максимальную загрузку и установить неисправность или диагностику из-за этого ... тогда вы хотите рассмотреть это.
(3) Перекос ISR. Определение того, нужно ли вам обрабатывать время, потраченное на ISR, иначе, чем время, потраченное на другую задачу, зависит от того, как ваша ОСРВ обрабатывает переключение контекста. Как упоминает Дэн, большинство ОСРВ имеют своего рода обратный вызов или ловушку, которые срабатывают при переключении задач. Некоторые RTOS имеют отдельный хук только для ISR. Я не совсем уверен, что мотивация для этого, кроме общей теории, что пользователи с меньшей вероятностью будут заботиться о времени, проведенном (надеюсь) с короткими ISR, чем о самих пользовательских задачах. В любом случае, посмотрите, как ваша ОСРВ справляется с этим переключением, и переходите оттуда.
Если вы не справитесь с этим правильно, время, проведенное в ISR, будет относиться к любой задаче, выполнявшейся в момент запуска ISR. Если вы оказались в режиме «По умолчанию», то ваша задача по умолчанию была «поглощать» время ISR. Если у вас не работает много ISR, я бы полностью проигнорировал это.
Удачи! Я сделал это с семейством PowerPC 551X, и это было для серийного автомобильного ПО, поэтому оно должно было быть идеальным! Вам должно быть намного проще :)