Определение точки останова
В контексте этой статьи давайте договоримся об унифицированном определении точки останова.Обсуждаемые здесь точки останова - это местоположения программ, где мы хотим, чтобы процессор остановился, чтобы мы могли выполнить какую-то отладку.Могут быть и другие типы точек останова, например, те, которые запускаются при доступе к данным, но в этой статье мы обсудим только программные точки останова, места в коде нашего приложения, где мы хотим останавливаться каждый раз, когда встречается этот код.
Аппаратные и программные точки останова
В чем разница между аппаратной и программной точками останова?Ну, очевидный ответ: «Аппаратная точка останова реализована в оборудовании» и «Программная точка останова реализована в программном обеспечении».Но что именно это означает, и каковы его последствия?Почему я бы выбрал одно над другим?
Аппаратные точки останова
Аппаратная точка останова действительно реализуется с помощью специальной логики, встроенной в устройство.Вы можете рассматривать аппаратную точку останова как набор программируемых компараторов, которые подключены к шине адреса программы.Эти компараторы запрограммированы с определенным значением адреса.Когда код выполняется, и все биты в адресе на шине адреса программы совпадают с битами, запрограммированными в компараторах, логика аппаратной точки останова генерирует сигнал для ЦПУ для остановки.Преимущество использования аппаратной точки останова состоит в том, что она может использоваться в любом типе памяти.Это может иметь больше смысла после обсуждения программных точек останова.Когда мы обсудим программные точки останова, мы обнаружим, что они могут использоваться только в энергозависимой памяти.Аппаратные точки останова могут использоваться независимо от того, находится ли выполняемый код в ОЗУ или ПЗУ, поскольку для логики аппаратных точек останова нет никакой разницы.Это просто сопоставление адреса в 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