В общем случае кросс-отладчик состоит из 2 основных модулей: менеджера на инструментальной платформе и агента отладки на целевой стороне. Менеджер служит для обеспечения пользовательского интерфейса, то есть для приема команд, их обработки и посылки на целевую сторону, а также для приема, обработки и выдачи информации от агента, который осуществляет непосредственную работу с отлаживаемой системой. Возможности агента отладки зависят от особенностей архитектуры системы, а именно:
• имеет ли система встроенные средства отладки (в этом случае агенту достаточно осуществлять вызов соответствующих функций и пересылать результаты менеджеру);
• какие она предоставляет возможности по созданию обработчиков (для контроля за происходящими событиями агенту может потребоваться собственный обработчик);
• вызовы каких функций дозволено делать агенту.
Кроме того, агент отладки должен поддерживать возможность приема и передачи информации от псевдо-агентов, встроенных в код отлаживаемых программ. Агент отладки может состоять из нескольких модулей, например, один осуществляет сбор данных, другой производит фильтрацию, третий осуществляет пересылку данных менеджеру.
py037 Простые средства отладки программ
Общая структура активного кросс-отладчика приведена на рис. 2.
Рис. 2. Активный кросс-отладчик
Рассмотрим протокол «менеджер-агент» на примере отладчика VxGDB (Wind River Systems, целевая система — VxWorks). Этот протокол базируется на RPC (Remote Procedure Call). Запросы менеджера можно классифицировать следующим образом:
1. Запросы работы с модулями
Сюда относятся запрос на загрузку модуля, запрос на получении информации о загрузочном файле и запрос на получение информации о символе.
2. Запросы работы с задачами
Это запросы на запуск, остановку и удаление задачи, на присоединение и отсоединение от запущенной задачи, на установку и удаление точки прерывания, на продолжение выполнения остановленной задачи.
Агент отладки эмулирует функцию ptrace и передает ей соответствующие запросы на чтение и запись.
2.2. Отладочные действия
Существует набор базовых действий, позволяющих пользователю осуществлять контроль за выполнением отлаживаемой задачи. Эти действия можно классифицировать следующим образом:
• предварительные действия отладчика;
• прерывание выполнения задачи;
• продолжение/изменение выполнения задачи.
1) Предварительные действия отладчика
• загрузка модуля на целевой стороне;
• запуск нужной задачи;
• если задача была запущена средствами системы, то присоединение к ней (в этом случае выполнение задачи останавливается и становится возможным производить отладочные действия);
• переключение между задачами.
Отладчик также выполняет и обратные действия, то есть отсоединение от задачи, прекращение ее выполнения и выгрузка соответствующего модуля.
2) Прерывание выполнения задачи
Как правило, выполнение задачи может быть прервано в результате того, что произошло одно из следующих событий:
Лекция 17 Отладка программ
• Достигнута точка прерывания.
Точки прерывания бывают двух видов: программные и аппаратные. Установка программной точки прерывания состоит в том, что запоминается инструкция, расположенная по тому адресу, где будет находиться точка прерывания, затем по этому адресу прописывается так называемая «break»-инструкция, после обработки которой процессором генерируется некоторое исключение (trap exception). Обработчик этого исключения сохраняет регистры задачи, меняет инструкцию точки прерывания на настоящий код и передает управление менеджеру. Недостаток программных точек прерывания в том, что соответствующий адрес должен находиться в той области памяти, куда разрешена запись.
Аппаратная точка прерывания не требует модификации памяти, так как ее адрес хранится в специальном регистре (debug register, DR), который просматривается процессором при выполнении очередной инструкции. Если происходят действия, заложенные в контрольный регистр (например, выполнение по заданному адресу или чтение/запись в область, адресуемую значением DR), то процессор генерирует соответствующее прерывание, обработав которое, отладчик получает необходимую информацию.
Отладчик предоставляет пользователю возможность установки точки прерывания на начало некоторой строки исходного текста, на точку входа определенной функции или на конкретный адрес. Помимо этого, отладчик отличает точки прерывания, поставленные им, а также (в многозадачных системах) имеет возможность устанавливать и обрабатывать точки прерывания, специфичные для данного множества задач. Это означает, что если задача не входит в такое отлаживаемое множество, то точка прерывания игнорируется.
Помимо работы с точками прерывания, устанавливаемыми на конкретный адрес, отладчик работает с так называемыми прерываниями доступа (access breakpoints), используемыми для определения момента доступа к некоторой области памяти, и прерываниями наступления событий (event detection), которые срабатывают, когда происходит соответствующее событие.
• Используется режим пошаговой отладки.
Существует много вариантов степени детализации выполнения. В частности, остановка после выполнения строки исходного текста или остановка после выполнения каждой ассемблерной инструкции (с заходом в вызываемые функции или с их пропуском).
Отладчик может использовать этот режим в служебных целях, например, при установленном прерывании выполнения при изменении данных (watchpoint). В этом случае после исполнения очередной инструкции надо проверять значение того выражения, на котором стоит точка прерывания.
• Перехвачена исключительная ситуация.
Если в процессе выполнения отлаживаемой задачи возникла исключительная ситуация (например, деление на 0), то отладчик должен корректно ее обработать и сообщить пользователю.
• Получен сигнал прерывания от пользователя.
Отладчик предоставляет пользователю возможность в любой момент остановить выполнение программы (например, введя соответствующий символ).
При получении сигнала останова отладчик может остановить текущую отлаживаемую задачу, остановить выполнение некоторой группы задач и остановить всю систему. Такой механизм дает возможность применять средства активной отладки без опасения вызвать новые ошибки, связанные со спецификой СРВ, поскольку система или набор задач, которые могут повлиять на отлаживаемую, будут остановлены, и временные соотношения их выполнения нарушены не будут. Подобный подход реализован в отладчике X-ray (Microtec Division, целевая система VRTX).
3) Получение информации
Когда задача остановилась, становится возможным осуществлять сбор различных данных, которые могут помочь при локализации логических ошибок в программе.
• Просмотр содержимого стека.
Эта команда дает возможность увидеть, как задача попала в текущее положение. Каждый кадр стека содержит данные, связанные с вызовом некоторой функции, включая ее аргументы, локальные переменные и адрес точки вызова.
• Просмотр таблицы символов.
Используя отладчик, можно получать доступ к информации о символах (имена переменных, функций и типов), определенных в задаче. Эта информация состоит из имени, типа и адреса соответствующей переменной или функции.
• Просмотр исходных файлов.
Пользователь может выборочно смотреть исходный текст программы, задавая номера строк, имена функций или некоторый адрес.
Отладчик способен получать и пересылать пользователю значение любой переменной или функции, доступной отлаживаемой задаче, а также содержимое регистров, памяти и дизассемблированный код.
Кроме того, у пользователя может возникнуть необходимость осуществить в процессе сеанса отладки вызов некоторой функции. Для поддержки этого существуют различные способы, например, можно передать соответствующий запрос агенту отладки, и тот запустит требуемую функцию либо в контексте отлаживаемой в данный момент задачи, либо в некотором специальном контексте. В GDB (GNU debugger, Free Software Foundation) реализован другой механизм, суть которого заключается в том, что все предварительные действия (установка точки выполнения, и.т.д.) производятся на инструментальной стороне, а агенту передается запрос на выполнение с текущего адреса.
4) Продолжение/изменение выполнения
Особенностью активной отладки является возможность изменения выполнения задачи.
Отладчик имеет возможность изменять значения переменных, содержимое регистров и памяти. Это позволяет корректировать выполнение задачи, проверяя предположения об ошибках в ее коде.
• Продолжение выполнения задачи с любого адреса.
Пользователь может потребовать продолжить выполнение задачи с другого адреса (например, обходя критический участок кода).
• Продолжение выполнения задачи до некоторого адреса.
В этом случае ставится временная точка прерывания на нужный адрес, и задача выполняется, пока этот адрес не будет достигнут. Как и в случае с обычной точкой прерывания, отладчик обеспечивает установку временной точки прерывания на начало строки исходного текста, на конкретный адрес или на точку входа некоторой функции. Однако, помимо этого отладчик может ставить временную точку прерывания на адрес возврата текущей функции, реализуя выполнение задачи вплоть до завершения этой функции.
Механизм установки временной точки прерывания используется и в режиме пошаговой отладки. Тогда точка прерывания ставится на следующую исполняемую инструкцию или (в случае отладки без захода в вызываемые функции) на инструкцию, следующую за вызовом функции.
• Возврат из функции.
Может возникнуть ситуация, когда пользователю понадобится завершить выполнение функции с определенным возвращаемым значением. В этом случае отладчик выполняет следующие действия:
a. Приведение заданного пользователем значения к типу возвращаемого значения этой функции.
b. Восстановление сохраненных регистров.
c. Установка возвращаемого значения в требуемую область памяти/регистр.
d. Установка указателя стека на предыдущий кадр.
e. Установка точки выполнения программы на адрес возврата заданной функции.
f. Уничтожение текущего кадра стека.
Описывая отладочные действия, стоит упомянуть об инструментальной системе ЭСКОРТ ([27]), созданной в Научно-исследовательском институте системных исследований РАН как средство повышения производительности труда профессиональных программистов. Основу ЭСКОРТа составляет интегрированная система редактирования — компиляции — выполнения.
Программы в ЭСКОРТе имеют нетекстовое представление. Более точно, все программные объекты представлены как объекты базы данных. Средствами БД ЭСКОРТа реализовано хранение предыдущих состояний объектов (и, в частности, значений переменных), откатка, «откатка откатки» и т. п., что позволяет дать в руки программисту мощные средства контролируемого выполнения (пошаговое, с контролем значений переменных, обратное и т. д.). Правда, на сегодняшний день, для современных систем реального времени, средства, предлагаемые в рамках ЭСКОРТа, представляются слишком тяжеловесными (хотя и весьма перспективными).
2.3. Пользовательский интерфейс
Помимо получения необходимой информации отладчик должен предоставить ее в удобном для пользователя виде. Для этого служат интерфейсные команды и функции.
Интерфейс отладчика состоит из:
• режима комадной строки;
• команд представления данных.
1) Графический интерфейс
Основное требование, предъявляемое к графическому интерфейсу активного отладчика — одновременная визуализация информации об отлаживаемой задаче (например, окно исходного текста, диалоговое окно, окно отображения данных и сообщений). При отладке группы задач, необходимо отображать полную информацию о каждой из них, как это реализовано в X-ray.
2) Режим командной строки
В режиме командной строки отладчик должен предоставлять пользователю возможность редактировать вводимые команды, а также поддерживать хранение ранее введенных команд в некотором буфере с целью их последующего вызова и модификации.
3) Команды представления данных
Приведем некоторые способы представления и хранения данных, реализация которых в значительной степени упрощает работу пользователя:
Хранение ранее отображенных значений позволяет следить за изменением инспектируемого выражения. Значения могут храниться в некотором буфере или файле.
• Внутренний язык отладчика.
Внутренний язык — средство, дающее возможность пользователю определять собственные функции. Кроме этого отладчик может обладать встроенным интерпретатором какого-нибудь известного языка сценариев. Например, VxGDB обладает встроенным TCL-интерпретатором, позволяющим не только определять новые функции обработки данных, но и (при поддержке с целевой стороны) эмулировать ряд функций VxWorks.
• Поддержка разных форматов представления данных.
Уже упоминавшиеся средства отладки (VxGDB, X-Ray) предоставляют возможность вывода интересующего значения в любом числовом или символьном формате. Кроме того, в них имеется поддержка сложных элементов языка, таких как массивы или структуры.
• Поддержка нескольких языков.
Если программа собрана из модулей, написанных на разных языках программирования, то для ее полноценной отладки необходима поддержка всех этих языков. Кроме того, VxGDB поддерживает синтаксис основных языков программирования (C, fortran) для своего внутреннего языка, обеспечивая автоматическую его смену при выполнении функции, реализованной на языке, отличном от текущего.
• Регулярное отображение данных.
При отладке может потребоваться просмотр некоторых данных (или выполнение команд) при каждой остановке задачи.
GDB в данном случае предоставляет следующие возможности:
a. Команда display. После остановки выполнения задачи (но не в случае, когда она завершилась) производится отображение данных, заданных в качестве аргументов этой команды.
b. Команда commands привязывает к точке прерывания, номер которой задан в качестве аргумента, набор действий, которые нужно реализовать отладчику при достижении этой точки прерывания.
2.4. Интеграция со средствами разработки ПО
Обычно, программный продукт проходит стадии разработки, представленные на рис. 3.
Рис. 3. Стадии разработки ПО
В [24] описан способ, позволяющий уменьшить общее время разработки программного продукта за счет объединения средств тестирования и отладки. Такую возможность предоставляет отладчик Pilot (Kvatro Telecom).
Подобное совмещение обладает следующими преимуществами: сразу выявляются ошибки в тесте; имеется возможность генерировать тесты в процессе отладки; результаты теста сразу обрабатываются и в случае ошибки передаются отладчику, который интерактивно воспроизводит этот тест. Средства поддержки отладки могут закладываться на стадии написания исходного текста и компиляции. Во время написания исходного текста в программный продукт может закладываться псевдо-агент — набор функций, осуществляющих некоторые отладочные действия. Для отладки с использованием исходных текстов приложения, необходимо при компиляции генерировать дополнительную информацию, состоящую из описаний символов программы (переменные, функции, типы) и псевдо-символов, позволяющих отладчику определять адреса строк исходного текста, адреса секций, и т.д.
- Альтернативная медицина
- Астрономия и Космос
- Биология
- Военная история
- Геология и география
- Государство и право
- Деловая литература
- Домашние животные
- Домоводство
- Здоровье
- История
- Компьютеры и Интернет
- Кулинария
- Культурология
- Литературоведение
- Математика
- Медицина
- Научная литература — прочее
- Педагогика
- Политика
- Психология
- Религиоведение
- Сад и огород
- Самосовершенствование
- Сделай сам
- Спорт
- Технические науки
- Транспорт и авиация
- Учебники
- Физика
- Философия
- Хобби и ремесла
- Шпаргалки
- Эзотерика
- Юриспруденция
- Языкознание
Источник: www.tinlib.ru
Методы и средства отладки микропроцессорных систем
После того как разработчиком были распределены функции микропроцессорной системы между аппаратной и программной ее частями, их разработка до определенного момента может проводиться автономно.
Для разработки программного обеспечения в настоящее время используются интегрированные среды разработки, содержащие в своем составе текстовые редакторы, компиляторы, редакторы связей , загрузчики и симу ляторы.
Текстовые редакторы служат для создания текста программы. Как правило, они имеют более ограниченные возможности по сравнению с универсальными программами этого типа и ориентированы на особенности написания программ на используемых языках программирования.
Традиционным языком программирования для МПС, работающих в реальном масштабе времени (а именно к этому классу относится большинство систем управления, сбора и обработки информации на базе однокристальных микроконтроллеров и ЦСП), является Ассемблер . В настоящее время в распоряжение разработчиков практически повсеместно предоставляется также компилятор с языка Си , а иногда Си ++ и даже Паскаля. Как правило, в этом случае используются специальные оптимизирующие компиляторы, но даже они не всегда позволяют написать приемлемую по времени выполнения и объему памяти программу, что вызывает необходимость их доработки на Ассемблере.
Редактор связей собирает единый исполняемый модуль из нескольких объектных программных модулей.
Если программы предыдущих типов используются при любом процессе программирования, то симуляторы являются специфическим программным средством, используемым в процессе проектирования МПС.
Симуляторы предоставляют пользователю возможность выполнить тестирование и отладку разработанного программного обеспечения на программно- логической модели микропроцессора .
Симуляторы позволяют запустить программу и полностью проследить ее исполнение . Загрузив программу в симулятор , пользователь имеет возможность запускать ее в пошаговом или непрерывном режимах, задавать условные или безусловные точки останова, контролировать и свободно модифицировать содержимое ячеек памяти и регистров моделируемого микропроцессора .
Симулятор охватывает сразу несколько процессоров одного семейства. Выбор конкретного типа МП среди моделей семейства обеспечивается соответствующими опциями меню . При этом моделируется работа ЦП, всех портов ввода/вывода, прерываний и другой периферии .
Изначально отладка программ с использованием симуляторов велась на уровне машинных команд в символьных обозначениях регистров.
В состав современных симуляторов входят также отладчики на языках высокого уровня, поскольку в комплект разработчика, как правило, входит и соответствующий компилятор .
Основное достоинство симуляторов заключается в том, что, поскольку они не требуют наличия реальных аппаратных средств, разработка программного обеспечения может идти параллельно с их разработкой.
Главным недостатком этого подхода является то, что, поскольку моделирование осуществляется программным способом, отлаживаемая программа исполняется не в реальном масштабе времени. При этом все сигналы ввода/вывода должны генерироваться специальными подпрограммами, разработанными для имитации периферийных устройств . Однако существует мнение, что хорошо написанный симулятор дает достаточно точное представление о работе программы целевого МП, включая ее временные характеристики.
Изначально симуляторы создавали сами разработчики МП БИС и продавали их по очень низкой цене или даже поставляли бесплатно, для того чтобы потенциальные пользователи могли заранее познакомиться с особенностями новых схем и начать разработку ПО для них до появления на рынке достаточного количества новых БИС. Ныне симуляторы поставляет множество производителей эмуляторов и компиляторов, в то время как традиционные поставщики — производители интегральных схем — предпочитают покидать этот рынок.
Комплексная отладка микропроцессорных систем
Как правило, микропроцессорная система на основе МК или ЦСП — это система реального времени, то есть корректность ее функционирования зависит от времени выполнения отдельных программ и скорости работы аппаратуры. Поэтому система считается отлаженной после того, как рабочие программы правильно функционируют на действительной аппаратуре системы в реальных условиях.
Дополнительным свойством, которым должны обладать средства комплексной отладки по сравнению со средствами автономной отладки, является возможность управления поведением МПС и сбора информации о ее поведении в реальном времени.
Эти средства позволяют вести разработку и отладку, постепенно усложняя аппаратуру и программы. При этом разработка, изготовление и отладка проводятся поэтапно с нарастанием сложности. Новые блоки аппаратуры и программы вводятся в создаваемую систему, присоединяясь к проверенной ее части.
На этапе комплексной отладки микропроцессорной системы используются следующие основные приемы:
- пошаговое отслеживание поведения системы;
- останов функционирования системы при возникновении определенного события;
- чтение и изменение содержимого памяти или регистров системы в момент останова;
- отслеживание поведения системы в реальном времени.
Всем этим условиям в наилучшей степени удовлетворяют полнофункциональные внутрисхемные эмуляторы.
Краткие итоги. В лекции рассмотрены процесс тестирования и отладки микропроцессорных систем, специфика МП БИС и микропроцессорной системы в целом как объекта контроля. Определены особенности контроля и отладки МПС на различных этапах жизненного цикла . Представлены инструментальные средства, используемые как для автономного тестирования и отладки аппаратных и программных частей МПС, так и для их комплексной отладки в условиях реального функционирования.
Источник: intuit.ru
Как производить отладку программ для Arduino: руководство для начинающих
Отладка программы является жизненно важным элементом при ее разработке. Программы для плат Arduino не являются в этом плане исключением. Процедура программирования плат Arduino достаточно проста, чего нельзя сказать о способах отладки программ, доступных для данной платформы. Одна из причин этого заключается в том, что платформа Arduino не располагает специализированными инструментами отладки программ, хотя в новой Arduino IDE pro такой инструмент все же появился.
В данной статье мы рассмотрим собственные (доступные в Arduino IDE) и внешние инструменты отладки программ для плат Arduino.
Также отладку программ для плат Arduino удобно производить в симуляторе UnoArduSim.
Собственные средства отладки в Arduino IDE
В Arduino IDE есть ряд собственных инструментов, которые можно использовать для отладки программ – это компилятор, монитор последовательного порта (Serial Monitor) и последовательный плоттер (построитель графиков в реальном времени по данным из последовательного порта). А в Arduino IDE Pro уже доступен свой собственный отладчик. Давайте рассмотрим эти инструменты более подробно.
Компилятор
Компилятор Arduino IDE можно использовать для проверки предупреждений или ошибок когда мы завершим процесс написания кода. Если компилятор выдает сообщение об ошибке при попытке скомпилировать или загрузить код программы в плату Arduino, проверьте синтаксис, опечатки и другие возможные проблемы в программе.
Использование правильного синтаксиса имеет важное значение для обеспечения компиляции вашего кода программы. При сбое компиляции Arduino IDE отобразит выявленные проблемы в нижней части экрана. Однако сообщения об ошибках, предоставляемые компилятором Arduino IDE, не всегда достаточно информативны и полезны, как этого бы хотелось. Если вы понимаете смысл выдаваемого компилятором сообщения об ошибке, устраните выявленную проблему в коде программы. Если не понимаете – придется использовать другие средства отладки.
Монитор последовательного порта
Если с помощью сообщений компилятора вам не удалось отладить вашу программу, то можно использовать монитор последовательного порта для анализа значений переменных и параметров если вы хотите посмотреть как они меняются в процессе исполнения программы.
Вы можете выводить в окно монитора последовательного порта следующие данные, которые могут пригодиться для отладки программы:
- значения входных контактов (обычно это данные, считываемые с каких либо датчиков);
- значения переменных в программе. По изменению их значений вы можете, например, делать выводы о том, исполняются или нет условные операторы (‘if’) в вашей программе;
- значения выходных контактов (например, значения ШИМ перед подачей их непосредственно на контакт).
Средства отладки в Arduino IDE Pro
Arduino IDE Pro имеет встроенные средства отладки программ, которых нет в обычной Arduino IDE, что делает ее особенно полезной при разработке сложных программ.
К средствам отладки в Arduino IDE Pro относятся:
- отступы в коде (что облегчает визуальное восприятие кода программы);
- складывание блока;
- автоматически закрывающиеся скобки;
- поиск и замена регулярных выражений;
- переключение комментариев.
Другими дополнительными функциями Arduino IDE Pro являются отладка в реальном времени, автозаполнение, адаптивный интерфейс и более быстрое время компиляции.
Внешние инструменты отладки программ для плат Arduino
Если рассмотренные в предыдущем разделе статьи собственные средства отладки платформы Arduino вам не помогли найти ошибки в коде программы, то можно попробовать использовать внешние инструменты отладки программ. Далее мы рассмотрим наиболее популярные из этих инструментов.
Visual Micro
Visual Micro – это плагин для Microsoft Visual Studio, который позволяет разрабатывать кросс-платформенные приложения Arduino. Любой код, написанный на Visual Micro и соответствующий спецификациям Arduino, будет одобрен. Поскольку Visual Micro позволяет изменять общий код и библиотеки, он идеально подходит для случаев, когда написание и отладка кода программа производится несколькими участниками (командой разработчиков). Код с нескольких платформ может быть разработан и интегрирован с программным кодом в процессе компиляции. Visual Micro также обеспечивает отладку GDB и отладку фрагментов кода программы, работающих с последовательными портами связи, технологиями Bluetooth и WiFi.
DebugWire
DebugWire – это протокол, разработанный компаний Atmel и позволяющий производить отладку программ, написанных для микроконтроллеров серий ATTiny (ATTiny 13, 85 и др.) и ATmega (ATmega 32/48/88/168/328), без использования интерфейса JTAG, используя только контакт сброса (Reset pin). Компания Atmel не выкладывает документацию протокола debugWIRE в открытый доступ, однако ряд энтузиастов перепроектировали его большие разделы и смогли создать несколько базовых отладчиков на его основе. Протокол DebugWire обеспечивает полный доступ на чтение и запись ко всей памяти микроконтроллеров AVR, а также полный контроль над процессом выполнения программы. Он поддерживает следующие инструменты отладки программ:
- пошаговое выполнение программы (по одной строчке в коде программы);
- выполнение программы до позиции курсора;
- пошаговый выход;
- прерывание работы программы.
Atmel Studio
Atmel Studio IDE — это бесплатная программа, которая обладает весьма неплохими возможностями отладки программ. Atmel Studio позволяет разрабатывать, компилировать и загружать программу в соответствующий микроконтроллер. IDE Atmel Studio, как и Arduino IDE, использует один и тот же код, поэтому вам не нужно изучать новый язык программирования, чтобы использовать Atmel Studio.
Atmel Studio обладает высокой адаптивностью и поддерживает чертежи .into, а также исходные коды C++. Также она обладает отличными возможностями отладки с помощью debugWIRE или JTAG.
Источник: microkontroller.ru