В уроке 10, в котором мы научились подключить отладчик к плате с контроллером ESP32, нам не удалось увидеть регистры контроллера (его периферии).
Благодаря подсказке посетителя данного ресурса, мне удалось всё же это сделать. Для этого нам нужен будет файл с расширением svd с адресами регистров, который мы должны подключить к лаунчеру для отладки.
В Espressif IDE снова откроем проект с именем BLINK01 из урока 3 (кстати, я, наконец-то прикрепил к статье исходный код проекта) и зайдём в настройки лаунчера для отладки. Во-первых, сначала исправим ошибку во вкладке Common в строке подключения лог-файла. Закрывающая фигурная скобка была не на месте. Поставим её на место
Файл svd с описанием регистров несложно найти в интернете. Мне попались таких два, один поменьше, другой побольше. Пока сильной разницы я в их содержании не ощутил, те регистры, которые мне нужно было мониторить, присутствуют в них обоих. На всякий случай я внизу страницы выложу архив с обоими.
Поместим файл svd (я поместил оба) в каталог с проектом
Перейдём в конфигурации лаунчера на вкладку SVD Path и подключим один из файлов
Именно этот файл нормально подключается. В нем нет многих регистров, основные есть. Я пробовал его пересобрать с помощью специальной утилиты, только получился он ещё меньше, видимо под новый комплект esp idf сборщик не очень подходит. К сожалению, Espressif нам данного файла не предоставляет. Я добавил кое-какие регистры ещё, в том числе некоторые регистры из периферии IO_MUX.
Сохраним конфигурацию.
Подключим наши платы к ПК, запустим отладку и остановим код вот здесь
Перейдём на вкладку Peripheral (или откроем её, у кого она ещё не открыта) и увидим там наши регистры
Установим галку в группу GPIO, можно сразу в несколько. Выбираем именно нужную для мониторинга периферию. Нас пока интересует именно GPIO
И теперь во вкладке Memory мы увидим все регистры интересующей нас группы с их значениями
Отлично! Запустим код, дождёмся, когда он остановится на том же месте в бесконечном цикле, и увидим изменения в регистре
Возможно, в зависимости от состояния переменной s_led_state, изменения произойдут со второго раза.
И теперь каждый раз после запуска кода и остановки значение регистра будет меняться.
В данный момент мы смотрели состояние вот этого регистра контроллера
Биты данного регистра показывают состояние ножек портов ввода-вывода, настроенных на выход.
Также мы видим изменения в данном поле другого регистра
Подключим также периферию IO_MUX и посмотрим состояние битов, предназначенных для настройки мультиплексора для регистра GPIO2
Сравнивая с регистрами, предназначенными для других портов мы видим, например, что у нас сбросился бит, отвечающий за настройку на вход
Ну, и раз у нас так хорошо всё и быстро получилось, давайте попробуем поработать с отладкой другого проекта — проекта урока 4, в котором мы работали с кнопкой. Подключим данный проект и создадим и настроим подобный прошлому проекту лаунчер для отладки.
Подключим кнопку, прошьём проект и запустим отладку.
Точку останова поставим здесь
Запустим проект на выполнение и, как только код остановится в точке, посмотрим состояние регистров
Мы видим, что у GPIO4, настроенного на вход, бит FUM_IE установлен.
Нажмём кнопку и удерживая её запустим код на выполнение.
Мы получим изменение здесь
и здесь
Вот таким образом мы теперь можем видеть состояние регистров различной периферии контроллера ESP32.
Итак, на данном уроке мы продолжили знакомство с возможностью отладки кода контроллера ESP32 и также нам удалось подключить возможность мониторинга регистров данного контроллера.
Всем спасибо за внимание!
Оригинал статьи находится здесь.
<<Предыдущий урок | Следующий урок>>
Недорогие отладочные платы ESP32 можно купить здесь: Недорогие отладочные платы ESP32
Логический анализатор 16 каналов можно приобрести здесь
Многофункциональный переходник CJMCU FT232H USB к JTAG UART FIFO SPI I2C
Видео в RuTube
Видео в Дзен
Видео в Youtube