Электроника и радиотехника => Цифровая техника => Тема начата: Shaman от 07 Окт., 2020, 21:51
Название: Отладчик avr-gdb и эмулятор simulavr
Отправлено: Shaman от 07 Окт., 2020, 21:51
У меня Linux головного мозга. Поэтому когда я решил сделать свой космический модуль (https://anklab.ru/forum/index.php?topic=45.0) то стал использовать средства разработки по эти ОС, тем паче их в достатке. Но при отладке возникла проблема, следующего характера: на макетке я могу увидеть только финальный этап работы программы, а если до него даже не дошло то как определить где затык?
Для форточек существует среда разработки, где это все реализованно, но ... Вобчем я приступил к поиску и нашел (https://www.nongnu.org/simulavr/).
Это эмулятор микроконтроллеров серии AVR.
Алгоритм работы следующий: 1. Запускаем сам эмулятор командой.
где: -g запустить эмулятор как сервер куда будет подключаться отладчик, -p порт сервера, -d atmega328 выбор эмулируемого контроллера, -F частота работы контроллера в герцах.
2. Комилируем прошивку с флагом -ggdb чтобы в ней сохранилась отладочная информация.
3. Запускаем отладчик выбрав файл прошивки. Здесь листинг прошивки для понимания
[свернуть]
4. Подключаемся к серверу.
5. Загружаем прошивку.
6. Создаём точку останова командой break Где в качестве аргумента можно указать как в моём случае имя функции, так и непосредственно строку программы. Посмотреть какие есть точки останова можно командой info breakpoint Удалить delete N/ где N порядковый номер точки останова.
7. В avr-gdb есть 3 основных команды для просмотра значений переменной или области памяти. x - команда проверяет память, начиная с определенного адреса. Пример
где (4) кол-во байт памяти которые необходимо прочитать, (t) вид отображения двоичный, (&buffer) начальный адрес памяти откуда производиться чтение. Может быть указан как напрямую, так и ввиде указателя как в примере. Оператор & вычисляет адрес переменной
[свернуть]
print – выводит значение какого-либо выражения (выражение передаётся в качестве параметра); display – добавляет выражение в список выражений, значения которых отображаются каждый раз при остановке программы; Здесь подробнее. Поскольку мне нужно было смотреть как изменяестя буфер экрана после каждой точки отанова я использавал команду display
8. Продолжаем выполнение программы командой continue. Порограмма будет выполнятся до следующей точки останова и по достижени оной в консоль будет выводиться значение буфера экрана команды для пошагового выполнения программы
step – или s пошаговое выполнение программы; next – или n пошаговое выполнение программы, но, в отличие от команды step, не выполняет пошагово вызываемые функции; finish – выполняет программу до выхода из текущей функции; отображает возвращаемое значение,если такое имеется;
[свернуть]
Вот здесь описание других команд и естественно есть справка в самой программе. Мне этого пока достаточно. Интернеты говорят о режиме Emacs GUD, это режим для отладки с помощью avr-gdb в Emacs... по мимо регистров и локальных переменных используемых в программе, он позволяет просматривать участки памяти... и прочие вкусности, но я пока не разбирался.
P.S. Если кому то помог то замечательно, если кто-то подскажет как ещё можно использовать этот софт или даст ссылку на инструкцию по использованию Emacs GUD, буду рад.
P.P.S Насколько я знаю через AVR-Studio можно пошагово исполнять программу в железе интересно это можно реализовать в Linux?
Название: Re: Отладчик avr-gdb и эмулятор simulavr
Отправлено: zenon от 07 Окт., 2020, 22:17
Как нибудь попробую, до emacs так и не дорос, но честно говоря он мне не по душе, сколько раз пытался, но безрезультатно. Так что под линукс для себя понял, только хардкор - только vim. Конечно плюшки в нём настраиваются непривычно, порой долго, но уже свыкся. Из IDE понравилась Platformio, но забросил. BluePill stm32 с ардуиновским бутлоадером запускал с помощью Platformio, в качестве редактора используя vim, где-то на своём сайте (сейчас лежит, сервер сдох) даже про это писал кажется. +++ На данном этапе сижу под оффтопиком, потому как нужен совсем другой софт. ы. В дуалбуте gentoo, последний раз обновлял бедную год назад... :)
Название: Re: Отладчик avr-gdb и эмулятор simulavr
Отправлено: Shaman от 08 Окт., 2020, 18:04
Я так и не смог себя заставить в нём разобраться :) Отталкивает с самого начала, редактор должен редактировать после запуска, а не заставлять запоминать комбинации клавиш для сего действа. Возможно я слишком молод для понимания этой идеологии ;D
Название: Re: Отладчик avr-gdb и эмулятор simulavr
Отправлено: zenon от 08 Окт., 2020, 18:40
Я тоже не ас в vim, эволюция nano -> vim была долгой. Bash -> zsh было быстрее. .vimrc в котором это видно, Ctrl+O, Ctrl+X сохранить, выйти. Но два режима работы vim надо всё-таки понять. Сборку, компиляцию, прошивку, выхлоп ошибок прикручивается не очень сложно.
Название: Re: Отладчик avr-gdb и эмулятор simulavr
Отправлено: Shaman от 08 Окт., 2020, 21:45
Вух. Благодарю. Оставлю на будущее. Пока связки nano и bach мне достаточно. Я в самом начале изучения программирования чего-либо и автомобиль пока не нужен достаточно велосипеда. :) И поскольку писать софт для серверов без Иксов пока не нужно, обхожусь связкой Visual Studio Code и AVR8_Burn-O-Mat для прошивки.
Название: Re: Отладчик avr-gdb и эмулятор simulavr
Отправлено: zenon от 08 Окт., 2020, 22:41
Ну так если с VS знаком, то platformio это надстройка над, те как расширение https://platformio.org/platformio-ide В линуксе оно нативно кажется ставится, уже не помню точно. https://docs.platformio.org/en/latest/core/installation.html Сейчас пытаюсь в Geany всё делать, отладка пока под вопросом... Тыц (https://ph0en1x.net/76-howto-config-geany-linux-for-avr-programming-gcc-asm.html) Там без Makefile, но с ним удобнее, сразу компиляция, сборка, заливка в мк, Shift+F9, F9, F5 например, примеры в соседней ветки выкладывал.