2015-04-24 5 views
1

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

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

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

variable = time();//time before disabling 

disable_interrupts(); 

perform_function();//business logic 

enable_interrupts(); 

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

tot_time = variable2 - variable; 

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

+0

Часы должны продолжать галочку, даже если прерывания отключены ?! Перерасход часов не будет зацепиться, поскольку они также обрабатываются прерываниями. Надеюсь, что ваша «бизнес-логика» не займет слишком много времени. Поскольку отключение прерываний может иметь нежелательный эффект во многих частях вашей системы. – RaphMclee

+0

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

ответ

1

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

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