Найти в Дзене
narod stream

ESP32 Урок 10. Возможность отладки кода

На данном уроке мы попробуем подключить схему для отладки кода. Как мы знаем, ESP32 отлаживается по интерфейсу JTAG, поэтому и плата для отладки должна быть выбрана с поддержкой работы с данным интерфейсом.

Для данных целей было принято решение использовать недорогую плату с чипом FT232H, который наряду с многими интерфейсами поддерживает также преобразование кода, поступившего по USB и в протокол для интерфейса JTAG.

Выглядит данная плата следующим образом

-2

Снизу мы видим назначение контактов. Подключается данная плата для отладки к плате с контроллером ESP32 следующим образом:

-3

Следуя данной таблице, подключим данную плату к нашей DevKit

-4

В подключении, я считаю, сложностей никаких не будет, я постарался ракурс выбрать такой, чтобы было максимально видно, к каким именно ножкам подведены провода. Сложности будут немного позже.

Для начала подключим к ПК только плату с чипом FTDI

-5

В диспетчере устройств мы увидим, что у нас появился новый порт

-6

Чтобы этот порт виделся в отладчиком, нужно установить на него специальный драйвер. Для этого используем специальную программу Usb Driver Tool, которую легко найти. Тем не менее архив с данной программой я приложу внизу статьи. Устанавливать эту программу не нужно, достаточно распаковать архив, открыть каталог с программой и запустить файл UsbDriverTool.exe.

Запустим данный файл и увидим в числе устройств наш FTDI

-7

Жмём на нём правой кнопкой мыши и в контекстном меню выбираем установку драйвера WinUSB для данного порта

-8

Как только драйвер установится, строка приобретёт следующий вид

-9

Также в диспетчере мы увидим, что порт наш исчез из списка устройств

-10

Этого бояться не нужно. Так должно и быть.

Теперь подключим отладочную плату с контроллером ESP32 на борту

-11

Через этот порт будет происходить прошивка, а через порт WinUSB — отладка.

Теперь запустим Espressif IDE, там откроем, например, проект из 3 урока с именем BLINK01, соберём его и зальём собранную прошивку в наш контроллер.

Теперь нам нужно создать и настроить отдельный Launcher для отладки.

Откроем список таких конфигураций вот здесь

-12

Там встанем вот на этот пункт

-13

Создадим новую конфигурацию, нажав эту кнопку

-14

Назовём нашу конфигурацию так, чтобы она была легче узнаваема при выборе

-15

Оставляем здесь всё по умолчанию. Если у кого-то настройки другие, то нужно, чтобы были именно такие.

Переходим на вкладку Debugger

-16

Здесь также всё должно быть так, как на картинке — состав строк, установленные и неустановленные галки.

Обращаем внимание, что в Config Options подключен интерфейс FTDI.

Следующая вкладка — Startup.

Здесь настройки вот такие

-17

Во вкладке Common можно добавить запись в лог-файл

-18

Сохраним конфигурацию и попробуем отладить наш проект, для чего выберем нашу конфигурацию и выберем вариант Debug

-19

Жмём вот эту кнопку и ждём процесса отладки. Не сразу может пойти всё хорошо. Но не стоит думать, что у нас неправильные настройки. Нужно попробовать отключить поочерёдно, а затем подключить платы, потом заново попробовать войти в отладку. Если не помогло, закрыть проект, закрыть среду, запустить среду, открыть проект и попробовать заново.

Если всё-таки мы попали в отладку, то жмём вот эту кнопку для запуска кода на выполнение

-20

Ну а дальше как обычно — точки останова, переходы, просмотр значений переменных, дизассемблирование и т.д. С этим процессом мы знакомы, так как пользовались отладчиком в Eclipse, когда занимались отладкой кода в программах под Windows.

Давайте попробуем в процессе выполнения кода установить вот здесь точку останова

-21

Если всё хорошо, то выполнение кода остановится на данной точке

-22

Теперь можем посмотреть значения переменных, например, переменной s_led_state.

Для этого где-нибудь в коде выделяем её имя и в контекстном меню выбираем следующий пункт

-23

Имя переменной, её тип и значение появятся в этом окне

-24

У вас может быть единичка. Это зависит от того, в какой момент вы остановите код. Нажмём ещё раз кнопку Resume, код отработает следующий цикл и значение переменной должно будет измениться

-25

Данная переменная у нас глобальная. Чтобы видеть значение локальных переменных, надо полностью отключить оптимизацию. Для этого остановим отладку, перейдём в окно проекта, зайдём в конфигуратор (sdkconfig) и в пункте Compiler Options выберем следующее значение в поле Optimization Level

-26

Ясное дело, что после таких изменений нужно будет проект пересобрать и перепрошить, а уж потом продолжать процесс отладки. Внесём данные изменения и объявим в функции app_main файла main.c следующую локальную переменную

В бесконечном цикле проинкрементируем её

Соберём код, прошьём контроллер, зайдём в отладку, добавим точку останова в том же месте заранее, запустим код на выполнение, код остановится на точке. Добавим в окно просмотра нашу переменную и посмотрим её значение

-27

Как видим, значение данной переменной мы вполне можем наблюдать и оно уже равно единице, так как через процесс инкрементирования мы прошли. Понажимаем кнопку Resume несколько раз, каждый раз дожидаясь остановки кода и увидим, что значение нашей переменной будет увеличиваться

-28

Также мы можем посмотреть сгенерированный ассемблерный код

-29

Вот здесь мы отчётливо можем наблюдать процесс инкрементирования

-30

Итак, на данном уроке мы научились пользоваться отладкой, подключив для этого недорогую плату к контроллеру ESP32 по интерфейсу JTAG, что позволит нам в дальнейшем ещё более глубоко мониторить работу нашего кода.

Всем спасибо за внимание!

Оригинал статьи находится здесь.

<<Предыдущий урок | Следующий урок>>

Недорогие отладочные платы ESP32 можно купить здесь: Недорогие отладочные платы ESP32

Логический анализатор 16 каналов можно приобрести здесь

Многофункциональный переходник CJMCU FT232H USB к JTAG UART FIFO SPI I2C

Программы:

Usb Driver Tool

Видео в RuTube

Программирование МК ESP32. Урок 10. Возможность отладки кода

Видео в Дзен

Видео в Youtube