Не знаю, много ли людей в мире это делают и надо ли об этом рассказывать… Но я подумал - а вдруг кому-то будет любопытно? Меня же это заинтересовало (хотя на практике это никогда не использовал). Я про интерфейс debugWIRE.
Этот последовательный интерфейс, который работает через однопроводную линию. В микроконтроллерах она обычно совмещена с входом RESET (это означает, что внешний сброс не будет работать, если включен этот режим отладки). Эта линия используется специальной отладочной платой для управления микроконтроллером в ходе отладки.
Да, в большинстве случаев можно обойтись отладчиком среды разработки (эмулятором) или даже вообще без отладки. Но может возникнуть и необходимость отладки “в железе”.
В систему команд микроконтроллера, поддерживающего такую отладку, обычно включена команда, которая может создавать точку останова (в микроконтроллерах AVR это команда break). А отладочная плата, во-первых, должна быть, а во-вторых, должна поддерживать режим отладки через интерфейс debugWIRE. Кроме того, этот режим должна поддерживать программа-отладчик, которую вы используете.
В ходе отладки программист проставляет на экране компьютера в нужных местах отлаживаемой программы точки останова. Затем он запускает эту программу под управлением отладчика. Отладчик автоматически вставляет в отлаживаемую программу команды break в тех местах, где программист поставил точки останова. А команды, которые должны быть записаны в месте вставки команд break, запоминает в своей памяти
Затем отладчик автоматически “прошивает” полученный таким образом текст программы в программную память отлаживаемого микроконтроллера и запускает её в работу. Микроконтроллер выполняет заложенную в него программу до тех пор, пока не встретится команда break. Получив эту команду, микроконтроллер приостанавливает выполнение программы и передает управление отладчику.
И вот здесь уже отладчик начинает управлять микроконтроллером через интерфейс debugWIRE. Этот интерфейс позволяет считать содержимое всех регистров микроконтроллера и других видов памяти. Прочитанная информация отображается на экране компьютера. Затем отладчик ждет команд от оператора.
Под управлением отладчика микроконтроллер может принудительно выполнить любую команду из своей системы команд. Это дает возможность легко воплотить пошаговое выполнение программы, а также выполнение тех команд, которые были заменены на break. Всё управление выполняется посредством интерфейса debugWIRE, который позволяет передавать информацию как от отладчика в микроконтроллер, так и в обратном направлении.
Преимуществом такого способа отладки является то, что в данном случае происходит не имитация микроконтроллера, а используется реальная микросхема. При этом работа в режиме отладки наиболее полно приближается к реальному режиму работы (в режиме реального времени, на реальных скоростях).
Недостаток - частое “перешивание” программной памяти микроконтроллера. Изменять содержимое этой памяти приходится каждый раз при установке новых или снятии старых точек останова. Если учесть, что допустимое количество перезаписи программной памяти составляет 10000 циклов, то при длительном процессе отладки это количество может исчерпаться, и микросхема выйдет из строя. Поэтому использовать такой способ отладки следует только в особо сложных случаях. Ну или когда готовится серийное производство каких-либо устройств, к которым предъявляются жёсткие требования по надёжности. В этом случае одной-двух микросхем для испытаний не жалко.
Регистр DWDR (в микроконтроллерах AVR) обеспечивает канал связи между запущенной программой в микроконтроллере и отладчиком. Этот регистр доступен только через debugWIRE и, следовательно, не может использоваться в качестве регистра общего назначения в обычных операциях.
Как видите, все биты регистра доступны как для чтения, так и для записи. Режим включается через фуз-бит DWEN (в микроконтроллерах AVR). Больше сведений можно найти в документации на соответствующий микроконтроллер. Интерфейс debugWIRE поддерживается, например, микроконтроллером ATtiny2313.
На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить…