Можно ли использовать точки останова в процедурах обслуживания прерываний (ISR)?
Можно ли использовать точки останова в ISR?
- Какая у вас платформа? Теоретически ответ - да; практически -- зависит от платформы (черт возьми!) 28.11.2008
Ответы:
Да — в эмуляторе.
В противном случае нет. Это трудно осуществить, и в любом случае это плохая идея. Предполагается, что ISR (обычно) работают с аппаратным обеспечением, а аппаратное обеспечение может легко вести себя совсем по-другому, если вы оставляете интервал в полсекунды между каждой инструкцией.
Вместо этого настройте какую-нибудь систему регистрации.
ISR также некрасиво "крадут" ЦП у других процессов, поэтому многие операционные системы рекомендуют делать ваши ISR очень короткими и делать только то, что строго необходимо (например, обрабатывать любые срочные оборудование и планирование задачи, которая будет правильно обрабатывать событие). Так что теоретически ISR должны быть настолько простыми, чтобы их не нужно было отлаживать.
Если проблема связана с поведением оборудования, используйте вместо этого какое-либо ведение журнала, как я предложил. Если аппаратное обеспечение действительно не возражает против больших промежутков времени между инструкциями, тогда вы можете просто написать большую часть драйвера в пользовательском пространстве — и вы можете использовать для этого отладчик!
В зависимости от вашей платформы вы можете сделать это, обратившись к порту отладки вашего процессора, обычно используя интерфейс JTAG. Имейте в виду, что вы радикально меняете все, что связано с синхронизацией с помощью этого метода, поэтому сеанс отладки может оказаться бесполезным. Но опять же, таким образом можно поймать много ошибок. Также обратите внимание на отображение памяти на основе MMU, поскольку отладчики JTAG часто не учитывают их.
В Windows с подключенным отладчиком ядра вы действительно можете устанавливать точки останова. в обработчиках прерываний.