реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Практика отладки программ, интересно узнать как профи отлаживают программы
Аматер
сообщение Apr 14 2010, 09:02
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 3-01-10
Из: Рождественно
Пользователь №: 54 616



Я делал опрос - насколько нужен jtag для отладки. Оказалось многие без него обходятся. Хотелось бы понять какие еще методы можно использовать.

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

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

1. Как специ без jtag эмулируют апаратуру?
Go to the top of the page
 
+Quote Post
Methane
сообщение Apr 14 2010, 09:09
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



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

Ну, во первых, отлаживаемое устройство скорее всего не правильно спроектировано. Обычно можно слепить эмулятор, можно понизить напряжение питания итд.
Во вторых есть два пути. Первый, самый простой, это несколько светодиодов (или просто свободных выводов). Вошли, подняли его вверх, вышли, опустили. Подключив осцилограф, можно посмотреть сколько времени оно проходит в каком-то участке кода.
Ну и самый надежный, это если есть свободный UART. В этом случае можно туда выдавать отладочную информацию.
Go to the top of the page
 
+Quote Post
Аматер
сообщение Apr 14 2010, 09:26
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 3-01-10
Из: Рождественно
Пользователь №: 54 616



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

Так это опять речь идет о выводе данных. Проблема же больше с вводом, и особенно в правильные моменты времени.
А так вместо свотодиодов я последнее время стал логический анализатор использовать. Стоил он всего 300 сотни, но много может.
Вот только устройство зачастую включить все равно нельзя, несмотря на большое количество защит. Все в нем слишком быстро происходит и напряжения - скорости не понизить.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Apr 14 2010, 09:58
Сообщение #4


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Ну и почему бы не использовать JTAG, тем более раз устройство уже поднавороченное.

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


P.s. Из всех случаев, когда я использовал JTAG, наверное только 1 или 2% из них я что-то правил на ходу(память,переменные). В 98-99% наблюдал и стэпал код.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 14 2010, 11:09
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Аматер @ Apr 14 2010, 11:41) *
Так это опять речь идет о выводе данных. Проблема же больше с вводом, и особенно в правильные моменты времени.
Что мешает вводить через тот же UART? И опрашивать этот UART в правильные моменты времени.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Костян
сообщение Apr 14 2010, 11:36
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



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

поддерживаю, на его базе можно наворотить весьма гибкую систему ввода/вывода
Go to the top of the page
 
+Quote Post
Methane
сообщение Apr 14 2010, 11:45
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



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

Уарт не нужно опрашивать. Уарт должен генерить свои прерывания, в прерывании обрабатывать что к нему пришло, и в зависимости от этого, пинать разные части программы.
Go to the top of the page
 
+Quote Post
Аматер
сообщение Apr 14 2010, 12:07
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 3-01-10
Из: Рождественно
Пользователь №: 54 616



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

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

Может я чего то не понимаю и можно сделать все небольшим числом функций, но как? Я не адресов переменных, ни адресов функций не знаю.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 14 2010, 12:35
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Аматер
сообщение Apr 14 2010, 13:15
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 3-01-10
Из: Рождественно
Пользователь №: 54 616



А как писать программу чтобы не нужен был доступ к переменным?
Может это слишком абстрактно, но можно наверное как то сформулировать советы.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 14 2010, 13:23
Сообщение #11


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Аматер @ Apr 14 2010, 17:30) *
А как писать программу чтобы не нужен был доступ к переменным?

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


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Аматер
сообщение Apr 14 2010, 13:40
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 3-01-10
Из: Рождественно
Пользователь №: 54 616



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

Я так и делал, и еще через другой массив и функции вызывал, у которых сигнатура одинаковая. Только мне это кажется излишне трудоемким способом. А как с компилятора вытащить адреса в утилитку не знаю.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Apr 14 2010, 13:52
Сообщение #13


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



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

ПисАть утилитку с хедерами, общими для обоих проектов. Упаковать все переменные в один структур, обращаться к ним через offsetof()
Go to the top of the page
 
+Quote Post
Аматер
сообщение Apr 14 2010, 13:57
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 3-01-10
Из: Рождественно
Пользователь №: 54 616



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

Так утилитка же для компа. offsetof наверное разные будут.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Apr 14 2010, 14:00
Сообщение #15


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



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

Если использовать stdint.h и соотв. типы, то нет. А иначе - как описать интерфейсы, протоколы и прочее (сам не знаю что ) ? С помощью туманного int ? smile.gif
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 05:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01939 секунд с 7
ELECTRONIX ©2004-2016