Доброго времени суток!
Использую порт scmRTOS для кортексов. Большое спасибо авторам ОС и порта, люди сделали большую работу и дали воспользоваться ей другим. Респект!
Вот захотелось сделать прибамбас - индикацию бездействия контроллера. Ведь весьма полезная фича при отладке приложения.
Пока идея такова:
1. в одном из процессов запускаем таймер (1) на 1 сек (к примеру).
2. как только попадаем в IdleProcessHook() - запускаем другой таймер (2) и взводим флаг IDLE. Делаем это в критич. секции (?). Если IDLE уже взведён - ничего не трогаем.
3. как только попадаем в ContextSwitchUserHook() - проверяем, взведён ли флаг IDLE. Если да - останавливаем таймер (2) и сбрасываем IDLE.
4. как только таймер (1) досчитывает до порогового значения периода измерения - сопоставляем натикавшее время (1) и (2) таймеров и вычисляем загрузку. Если (2) таймер в нуле - 100% загрузка, если близок по значению к (1) - 0%. Затем сбрасываем оба таймера и всё повторяется сначала.
Вроде для грубого вычисления подойдёт. Что плохо - таймер простоя (2) будет считать время выполнения любых прерываний как бездействие системы. Это внесёт погрешность.
ЗЫ:Если я правильно понял, IdleProcess выполняется также, как и все остальные процессы - то есть продолжает выполняться с того места, откуда был прерван?
|