2013-11-19 2 views
1

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

Я знаю, что не разрешено спать в обработчике прерываний, поэтому мы не можем использовать файлы ввода/вывода или printk в обработчике прерываний.

Итак, в реальной промышленности, как отлаживать и прерывать обработчик ИЛИ что я могу сделать, если я хочу что-то отладить?

+0

Обработчики прерываний обычно очень короткие, иногда даже такие короткие, как установка некоторой глобальной переменной и выход. Вот почему им часто не требуется отладка (код слишком прост, чтобы быть неправ!). Чтобы узнать, действительно ли вызвано прерывание, вы можете проверить переменную, которую он устанавливает извне обработчика. – Shahbaz

+0

Но что, если он длинный. Предположим, у меня есть обработчик прерываний, который делает некоторые вещи, кроме установки переменной, поэтому есть способ отладки. – user2958183

+0

Извините, я не знаю, возможно ли вообще отладить обработчик прерываний. Но я точно скажу вам, что длинный обработчик прерываний не является хорошей идеей по многим причинам. Вот почему они делят работу, которую прерывание необходимо выполнять в двух частях, большая часть которых выполняется вне обработчика прерываний. Быстрый поиск [раскрыт] (http://www.tldp.org/LDP/tlk/dd/interrupts.html), что: _После того, как была определена причина прерывания, драйверу устройства может потребоваться больше работы. Если это так, то в ядре Linux есть механизмы, позволяющие отложить эту работу до конца ._... – Shahbaz

ответ

1

Да! это правильно, мы не можем использовать printk внутри ISR. Поскольку я изучал в RTOS (операционная система реального времени) во время обработки прерываний, он создает журнал сообщений и сохраняет необходимую информацию в файле журнала, который вы можете увидеть позже.

Аналогичная вещь также доступна для последнего ядра. Используя trace_printk, вы можете отлаживать время в критическом месте. Я не использовал это раньше, поэтому нет образца для этого. Вы можете следить за этим link, чтобы узнать больше о trace_printk.

Смежные вопросы