Есть ли способ найти время, затрачиваемое функцией в критической секции (между отключением и включением прерываний)

У меня есть функция, которая отключает прерывания перед выполнением функции и повторно разрешает прерывания после завершения функции.

Здесь мое требование состоит в том, чтобы найти сколько времени занимает выполнение функции?

Абстрактно это то, что я хочу сделать:

variable = time();//time before disabling

disable_interrupts();

perform_function();//business logic

enable_interrupts();

variable2 =time();//time after disabling the interrupt

tot_time = variable2 - variable;

Есть ли способ найти затраченное время? Я застрял, потому что, если мы отключим прерывания, процессор ничего не будет обрабатывать (часы, прерывания, счетчики).


person Zagabathuni Ramya    schedule 24.04.2015    source источник
comment
Часы должны продолжать идти, даже когда прерывания отключены?! Превышения часов не будут обнаружены, так как они также обрабатываются в прерываниях. Надеюсь, что ваша //бизнес-логика не займет слишком много времени. Поскольку отключение прерываний может иметь нежелательные последствия для многих частей вашей системы.   -  person RaphMclee    schedule 24.04.2015
comment
мое намерение точно так же, как часы должны продолжать тикать, но когда мы отключаем прерывание, есть ли какие-либо часы, которые будут работать ... потому что я подозреваю, что эта функция занимает так много времени ... не могли бы мне помочь   -  person Zagabathuni Ramya    schedule 24.04.2015


Ответы (1)


Если эта функция занимает так много времени, вам, вероятно, следует изменить свой дизайн. И выполнять трудоемкую бизнес-логику, не отключая прерывания.

В любом случае, если вы хотите придерживаться своего текущего дизайна, я попытаюсь предложить решение. Любой регистр часов будет продолжать работать, вы можете выбрать один и проверить его значение в начале и в конце вашего ISR. У вас не будет индикации, если счетчик будет переполнен несколько раз. Вы также можете периодически (если ваша бизнес-логика представляет собой цикл) проверять значение часов и суммировать прошедшее время в переменную. Таким образом, перерасход часов будет включен в расчет.

person RaphMclee    schedule 24.04.2015