Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Практика отладки программ
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Аматер
Я делал опрос - насколько нужен jtag для отладки. Оказалось многие без него обходятся. Хотелось бы понять какие еще методы можно использовать.

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

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

1. Как специ без jtag эмулируют апаратуру?
Methane
Цитата(Аматер @ Apr 14 2010, 12:17) *
1. Как специ без jtag эмулируют апаратуру?

Ну, во первых, отлаживаемое устройство скорее всего не правильно спроектировано. Обычно можно слепить эмулятор, можно понизить напряжение питания итд.
Во вторых есть два пути. Первый, самый простой, это несколько светодиодов (или просто свободных выводов). Вошли, подняли его вверх, вышли, опустили. Подключив осцилограф, можно посмотреть сколько времени оно проходит в каком-то участке кода.
Ну и самый надежный, это если есть свободный UART. В этом случае можно туда выдавать отладочную информацию.
Аматер
Цитата(Methane @ Apr 14 2010, 13:24) *
Ну, во первых, отлаживаемое устройство скорее всего не правильно спроектировано. Обычно можно слепить эмулятор, можно понизить напряжение питания итд.
Во вторых есть два пути. Первый, самый простой, это несколько светодиодов (или просто свободных выводов). Вошли, подняли его вверх, вышли, опустили. Подключив осцилограф, можно посмотреть сколько времени оно проходит в каком-то участке кода.
Ну и самый надежный, это если есть свободный UART. В этом случае можно туда выдавать отладочную информацию.

Так это опять речь идет о выводе данных. Проблема же больше с вводом, и особенно в правильные моменты времени.
А так вместо свотодиодов я последнее время стал логический анализатор использовать. Стоил он всего 300 сотни, но много может.
Вот только устройство зачастую включить все равно нельзя, несмотря на большое количество защит. Все в нем слишком быстро происходит и напряжения - скорости не понизить.
sigmaN
Ну и почему бы не использовать JTAG, тем более раз устройство уже поднавороченное.

Ну а вообще, ИМХО если, как и положено, писать вместе с модулями и тесты к ним, то все входные данные куда надо подкинет тест и тогда вывода в консоль будет более чем достаточно.
Да, а вообще тест рекомендуют реализовывать ещё до того, как перешли к реализации модуля(сразу после проектирования). По мнению специалистов, это позволяет делать более правильные тесты, а не заточенные под конкретную реализацию и избегающие "острых моментов".


P.s. Из всех случаев, когда я использовал JTAG, наверное только 1 или 2% из них я что-то правил на ходу(память,переменные). В 98-99% наблюдал и стэпал код.
Сергей Борщ
Цитата(Аматер @ Apr 14 2010, 11:41) *
Так это опять речь идет о выводе данных. Проблема же больше с вводом, и особенно в правильные моменты времени.
Что мешает вводить через тот же UART? И опрашивать этот UART в правильные моменты времени.
Костян
Цитата(Сергей Борщ @ Apr 14 2010, 10:24) *
Что мешает вводить через тот же UART? И опрашивать этот UART в правильные моменты времени.

поддерживаю, на его базе можно наворотить весьма гибкую систему ввода/вывода
Methane
Цитата(Сергей Борщ @ Apr 14 2010, 14:24) *
Что мешает вводить через тот же UART? И опрашивать этот UART в правильные моменты времени.

Уарт не нужно опрашивать. Уарт должен генерить свои прерывания, в прерывании обрабатывать что к нему пришло, и в зависимости от этого, пинать разные части программы.
Аматер
Цитата(Сергей Борщ @ Apr 14 2010, 15:24) *
Что мешает вводить через тот же UART? И опрашивать этот UART в правильные моменты времени.

Через UART у меня настроечная утилита работает через которую в процессе производсва устанавливаются 200 параметров. Можно конечно и второй UART задействовать для отладки, но это еще куча программного кода.
Для отладки желательно иметь доступ к любой переменной, и вызовом функций управлять. Такую систему я только в CoDeSys видел. Но она очень наворочена и у них свой компилятор.

Может я чего то не понимаю и можно сделать все небольшим числом функций, но как? Я не адресов переменных, ни адресов функций не знаю.
Сергей Борщ
Цитата(Аматер @ Apr 14 2010, 14:22) *
Для отладки желательно иметь доступ к любой переменной, и вызовом функций управлять.
В этом случае вам нужен полноценный внутрисхемный отладчик и вы хотите изобрести велосипед. Вопрос ветки был более общий - а так ли нужно ли в процессе отладки иметь доступ к любой переменной и управлять вызовом функций.
Аматер
А как писать программу чтобы не нужен был доступ к переменным?
Может это слишком абстрактно, но можно наверное как то сформулировать советы.
MrYuran
Цитата(Аматер @ Apr 14 2010, 17:30) *
А как писать программу чтобы не нужен был доступ к переменным?

забить массив указателей на нужные переменные и обращаться к ним по индексу
Аматер
Цитата(MrYuran @ Apr 14 2010, 16:38) *
забить массив указателей на нужные переменные и обращаться к ним по индексу

Я так и делал, и еще через другой массив и функции вызывал, у которых сигнатура одинаковая. Только мне это кажется излишне трудоемким способом. А как с компилятора вытащить адреса в утилитку не знаю.
_Pasha
Цитата(Аматер @ Apr 14 2010, 16:55) *
А как с компилятора вытащить адреса в утилитку не знаю.

ПисАть утилитку с хедерами, общими для обоих проектов. Упаковать все переменные в один структур, обращаться к ним через offsetof()
Аматер
Цитата(_Pasha @ Apr 14 2010, 18:07) *
ПисАть утилитку с хедерами, общими для обоих проектов. Упаковать все переменные в один структур, обращаться к ним через offsetof()

Так утилитка же для компа. offsetof наверное разные будут.
_Pasha
Цитата(Аматер @ Apr 14 2010, 17:12) *
Так утилитка же для компа. offsetof наверное разные будут.

Если использовать stdint.h и соотв. типы, то нет. А иначе - как описать интерфейсы, протоколы и прочее (сам не знаю что ) ? С помощью туманного int ? smile.gif
XVR
Цитата(Аматер @ Apr 14 2010, 16:22) *
Может я чего то не понимаю и можно сделать все небольшим числом функций, но как? Я не адресов переменных, ни адресов функций не знаю.
Делал нечто такое. В прошику добавляется небольшой отладочный монитор, который умеет читать и писать память через UART. Можно добавить возможность вызывать процедуры по заданному (через UART) адресу.
Адреса для переменных и функций извлекались из map файла линкера после компиляции проекта. На PC была утилита, которая умела эти данные брать и предоставляла некоторое подобие дебагера (ну очень простое)

Проц был PIC16, компилятор HITECH

PS. Для real-time систем это увы не подойдет sad.gif
Аматер
Цитата(XVR @ Apr 15 2010, 13:58) *
Делал нечто такое. В прошику добавляется небольшой отладочный монитор, который умеет читать и писать память через UART. Можно добавить возможность вызывать процедуры по заданному (через UART) адресу.
Адреса для переменных и функций извлекались из map файла линкера после компиляции проекта. На PC была утилита, которая умела эти данные брать и предоставляла некоторое подобие дебагера (ну очень простое)

Проц был PIC16, компилятор HITECH

PS. Для real-time систем это увы не подойдет sad.gif

Xорошая штука, чем не подойдет для real-time ?
AlexandrY
Неужто до сих пор ELF-парсера не портировали? biggrin.gif

Но что -то вы уже кажется искусственные сценарии отладки придумываете.
Я думаю ваши старшие товарищи не за JTAG вас критикуют.
Может вы остановились в своем развитии на JTAG-е?
XVR
Цитата(Аматер @ Apr 15 2010, 16:33) *
Xорошая штука, чем не подойдет для real-time ?
Тем, что с другой стороны (за PC) сидит человек, и пока он наберет команду все успеет нафиг сгореть sad.gif
Более того, даже если с другой стороны будет что то более быстрое (например программа на том же PC), сам по себе UART штука не быстрая
Аматер
Цитата(XVR @ Apr 15 2010, 21:46) *
Тем, что с другой стороны (за PC) сидит человек, и пока он наберет команду все успеет нафиг сгореть sad.gif
Более того, даже если с другой стороны будет что то более быстрое (например программа на том же PC), сам по себе UART штука не быстрая

Собственно у меня такая же ситуация - все сгорает очень быстро. Но поменять значение переменных можно. Или функцию запустить. Чтобы не сгорало я на выходе всегда ставлю ограничители - при неправильном расчете значение ограничивается до допустимых значений. В основном помогает, правда иногда нет crying.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.