Аппаратные точки останова и программные точки останова во встроенных системах - PullRequest
2 голосов
/ 11 апреля 2019

Насколько я понимаю, вставка программных точек останова предполагает замену следующей команды в коде, которая должна быть выполнена, инструкцией программного прерывания, которая приведет к остановке ЦП при достижении этой инструкции.

Аппаратные точки останова включают в себя помещение адреса следующей инструкции после точки останова, которая должна быть выполнена, в регистр, и когда адреса совпадают, с помощью аппаратного компаратора, это затем приводит к остановке ЦП (Исправьте меня, если я неправильно).

Что меня смущает, так это то, что мы используем аппаратные точки останова только при использовании аппаратного отладчика для отладки платы, например, через JTAG? Или JTAG может также использовать программные точки останова?

Используется ли GDB только с программными точками останова, или же его можно использовать также вместе с JTAG? Извините, если вопрос немного широкий.

Ответы [ 2 ]

3 голосов
/ 11 апреля 2019

" поправьте меня, если я ошибаюсь "

Точка останова устанавливается на инструкции, а не после нее - прерывание происходит до инструкции выполняется, а не после - в противном случае установка точки останова для прыжка, вызова или перехода инструкция потерпит неудачу.

" мы используем аппаратные точки останова только при использовании аппаратного отладчика для отладки платы, например, через JTAG? "

JTAG - это простой интерфейс связи с отладкой на кристалле (и используется для других целей, таких как внутрисхемная память, программирование ПЛИС и, например, сканирование границ).

Хотя это может варьироваться в зависимости от архитектуры на ARM Cortex-M, например, вы можете получить доступ к регистрам отладки на кристалле из целевого кода и установить аппаратные точки останова. Yoiu также может устанавливать программные точки останова в вашем коде, используя инструкцию BKPT (в отличие от SWI, как вы предлагаете).

Или JTAG может также использовать программные точки останова?

Как я уже сказал, JTAG - это просто интерфейс связи с отладкой на кристалле, однако с помощью отладки на кристалле можно напрямую установить любое содержимое RAM , поэтому подключенный отладчик JTAG программное обеспечение , работающее на хосте разработки, может временно изменить код в ОЗУ для установки программной точки останова (путем замены целевой команды на BKPT, затем при достижении точки останова, возвращаясь к исходной инструкции, чтобы ее можно было выполнить. точки останова не так просты для кода, выполняемого из ПЗУ, хотя некоторые отладчики поддерживают неограниченные точки останова ПЗУ (по цене) - производители такого оборудования не обязательно публикуют методы, которые они используют для этого.

До того, как JTAG и встроенная отладка стали широко доступны для компонентов evebnlow, использовались такие технологии, как In-Circuit Emulation и ROM emulators. Это были, как правило, дорогие и сложные решения.

Используется ли GDB только с программными точками останова, или он может использоваться также вместе с JTAG?

GDB может использоваться несколькими способами. Для этого требуется «отладочная заглушка» - программный уровень, отображающий программное обеспечение отладчика на доступное оборудование, характер которого будет зависеть от интерфейса отладки и используемого целевого устройства. Например, при использовании порта UART или Ethernet заглушка фактически является кодом, выполняющимся на самой цели (например, в Linux gdbserver). В этом случае он менее надежен, поскольку ошибки программного обеспечения могут помешать фактическому запуску драйвера порта отладки, особенно в целях, не имеющих защиты MMU. Более простые устройства JTAG взаимодействуют с GDB через заглушку, работающую на хосте разработки, например, обычно используемое программное обеспечение OpenOCD. Более дорогое оборудование отладки JTAG может запускать заглушку на самом оборудовании JTAG - например, на bad2000 от Abatron. В любом случае заглушка отладки сможет использовать аппаратные и программные точки останова в зависимости от целевых возможностей.

0 голосов
/ 26 апреля 2019

Определение точки останова

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

Аппаратные и программные точки останова

В чем разница между аппаратной и программной точками останова?Ну, очевидный ответ: «Аппаратная точка останова реализована в оборудовании» и «Программная точка останова реализована в программном обеспечении».Но что именно это означает, и каковы его последствия?Почему я бы выбрал одно над другим?

Аппаратные точки останова

Аппаратная точка останова действительно реализуется с помощью специальной логики, встроенной в устройство.Вы можете рассматривать аппаратную точку останова как набор программируемых компараторов, которые подключены к шине адреса программы.Эти компараторы запрограммированы с определенным значением адреса.Когда код выполняется, и все биты в адресе на шине адреса программы совпадают с битами, запрограммированными в компараторах, логика аппаратной точки останова генерирует сигнал для ЦПУ для остановки.Преимущество использования аппаратной точки останова состоит в том, что она может использоваться в любом типе памяти.Это может иметь больше смысла после обсуждения программных точек останова.Когда мы обсудим программные точки останова, мы обнаружим, что они могут использоваться только в энергозависимой памяти.Аппаратные точки останова могут использоваться независимо от того, находится ли выполняемый код в ОЗУ или ПЗУ, поскольку для логики аппаратных точек останова нет никакой разницы.Это просто сопоставление адреса в PAB и остановка процессора, когда он его находит.Недостаток HWBP заключается в том, что они реализованы аппаратно, и их число ограничено.Количество доступных HWBP отличается от архитектуры к архитектуре, но в большинстве случаев доступно только 2-8.Самый простой способ выяснить, сколько у устройства - это подключиться к нему в CCS и продолжать настраивать HWBP, пока не появится сообщение об ошибке, что ни одно из них не доступно.

Программные точки останова

Как уже упоминалось, программная точка останова реализована в программном обеспечении.Но как это сделать?На самом деле есть 2 разных реализации.Некоторые устройства резервируют указанный бит в своем определении кода операции, который указывает точку останова программного обеспечения.Например, в одной архитектуре семейства C6000 все инструкции имеют длину 32 бита, а бит 28 зарезервирован для указания программной точки останова, поэтому все инструкции в этом наборе команд имеют бит 28 в качестве нуля.В этом случае, когда программная точка останова установлена ​​в CCS, она фактически изменит код операции инструкции в этом месте и установит бит 28 в 1. Логика эмуляции затем отслеживает код операции программы для каждого случая, когда бит 28 равен 1, иостанавливает процессор, когда это происходит.Обратите внимание, что это дело меньшинства.Большинство архитектур так не делают.Причина в том, что это ограничивает гибкость набора команд.Кроме того, он не работает для архитектур с инструкциями переменной длины, поэтому он также ограничивает плотность кода.Более популярный способ реализации программной точки останова также намного сложнее.В этом случае есть определенный код операции точки останова.Как правило, код операции является 8-битным.Всякий раз, когда устанавливается точка останова, первые 8 битов инструкции в этом месте удаляются и заменяются этим 8-битным кодом операции точки останова.Исходные 8-битовые инструкции затем сохраняются в таблице точек останова.Всякий раз, когда встречается точка останова, CPU останавливается, и CCS заменяет код операции точки останова исходными 8-битными инструкциями.Когда выполнение перезапускается, CCS должен сделать немного хитрости, потому что инструкция в реальном конвейере ЦП не верна.У него все еще есть код операции точки останова.Таким образом, CCS сбрасывает конвейер ЦП и затем повторно извлекает команды, ожидающие в них, в их исходное состояние, при этом следующая выполняемая функция - та, где была установлена ​​точка останова.В то же время CCS повторно загружает инструкцию в этом месте с кодом операции точки останова, чтобы в следующий раз, когда этот код был обнаружен, он снова остановился.Преимущество SWBP заключается в том, что их существует неограниченное количество, поэтому вы можете разместить их в любом количестве мест.Недостатком является то, что вы не можете поместить их в энергонезависимую память, такую ​​как ROM / FLASH и т. Д., Потому что CCS не может записать код операции в местоположение.

http://processors.wiki.ti.com/index.php/How_Do_Breakpoints_Work

...