У меня есть ISR, который обновляет дисплей с фиксированной частотой. Я хотел бы настроить свою процедуру так, чтобы минимизировать накладные расходы и оставить как можно больше времени процессора открытым для другой обработки, но у меня нет никакого хорошего способа собрать метрики для определения загрузки моего процессора.
Я мог бы посмотреть на сборку и проанализировать рутину, но у меня нет терпения или способности сделать это точно. Я не чувствую, что мне нужны ужасно мелкие результаты, просто простой процент времени процессора, занимаемый isr.
Я мог бы установить высокий пин только тогда, когда isr активен и измерить его снаружи. Это имеет минимум накладных расходов в коде, но я не знаю, чем его измерять. У меня нет осциллографа или чего-то в этом роде. Есть ли простой микросхема или простой способ использовать другой микро для измерения рабочего цикла? Я слышал о специальных чипах частотомера, но есть ли что-нибудь для рабочего цикла?
источник
Установите выходной контакт при входе в ISR и очистите его, прежде чем вернуться из него. Фильтруйте вывод с помощью RC-фильтра. Напряжение на конденсаторе должно дать вам рабочий цикл ISR.
Например, если ваш источник питания составляет 3,3 В, а вы измеряете 33 мВ, то вы проводите 1% времени в ISR.
источник
Самый простой способ сделать это - запустить код в симуляторе и измерить циклы, выполняемые подпрограммой прерывания. Например, симулятор Microchip MPLAB имеет удобную функцию секундомера, которая очень полезна для этой цели.
В противном случае может помочь поднятие булавки в начале прерывания и опускание его в конце. Самый простой способ посмотреть на это с помощью осциллографа. Если вы занимаетесь микроконтроллерами и электроникой, вы все равно должны их получить.
Без прицела вы могли бы просто отфильтровать напряжение на контакте, а затем измерить его с помощью вольтметра. Это напряжение, деленное на напряжение питания процессора, даст вам долю времени, в течение которого вывод высок. Например, если процессор работает с напряжением 3,3 В, а напряжение на выводе с фильтром нижних частот составляет 800 мВ, то на выводе высокое напряжение 800 мВ / 3,3 В = 24% времени.
Поскольку вы, очевидно, используете компилятор, вам нужно несколько снизить значение этого ответа. Компилятор, вероятно, добавляет некоторый код ввода прерывания перед выполнением кода и код завершения прерывания после выполнения кода. Истинное время прерывания будет продолжаться на несколько циклов с каждой стороны импульса. Конечно, если вы заботитесь о времени прерывания, вам не следует использовать компилятор.
источник