|
Практика отладки программ, интересно узнать как профи отлаживают программы |
|
|
|
Apr 14 2010, 09:09
|

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

|
Цитата(Аматер @ Apr 14 2010, 12:17)  1. Как специ без jtag эмулируют апаратуру? Ну, во первых, отлаживаемое устройство скорее всего не правильно спроектировано. Обычно можно слепить эмулятор, можно понизить напряжение питания итд. Во вторых есть два пути. Первый, самый простой, это несколько светодиодов (или просто свободных выводов). Вошли, подняли его вверх, вышли, опустили. Подключив осцилограф, можно посмотреть сколько времени оно проходит в каком-то участке кода. Ну и самый надежный, это если есть свободный UART. В этом случае можно туда выдавать отладочную информацию.
|
|
|
|
|
Apr 14 2010, 09:26
|

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

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

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

|
Ну и почему бы не использовать JTAG, тем более раз устройство уже поднавороченное.
Ну а вообще, ИМХО если, как и положено, писать вместе с модулями и тесты к ним, то все входные данные куда надо подкинет тест и тогда вывода в консоль будет более чем достаточно. Да, а вообще тест рекомендуют реализовывать ещё до того, как перешли к реализации модуля(сразу после проектирования). По мнению специалистов, это позволяет делать более правильные тесты, а не заточенные под конкретную реализацию и избегающие "острых моментов".
P.s. Из всех случаев, когда я использовал JTAG, наверное только 1 или 2% из них я что-то правил на ходу(память,переменные). В 98-99% наблюдал и стэпал код.
--------------------
The truth is out there...
|
|
|
|
|
Apr 14 2010, 12:07
|

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

|
Цитата(Сергей Борщ @ Apr 14 2010, 15:24)  Что мешает вводить через тот же UART? И опрашивать этот UART в правильные моменты времени. Через UART у меня настроечная утилита работает через которую в процессе производсва устанавливаются 200 параметров. Можно конечно и второй UART задействовать для отладки, но это еще куча программного кода. Для отладки желательно иметь доступ к любой переменной, и вызовом функций управлять. Такую систему я только в CoDeSys видел. Но она очень наворочена и у них свой компилятор. Может я чего то не понимаю и можно сделать все небольшим числом функций, но как? Я не адресов переменных, ни адресов функций не знаю.
|
|
|
|
|
Apr 14 2010, 12:35
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Apr 14 2010, 13:40
|

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

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

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

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