|
Пошаговый отладчик пользовательской программы, как это делается? |
|
|
|
Mar 25 2006, 10:41
|
Гуру
     
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493

|
Цитата(zltigo @ Mar 25 2006, 12:38)  Цитата(TMX @ Mar 25 2006, 09:20)  Как это делается вообще?
Читаем последние главы мануала на LPC посвященные поддержке разных способов отладки. А вообще-то этот раздел DSP посвящен. Как это ? Уже DSP ???: :-O
|
|
|
|
|
Mar 25 2006, 15:34
|
Частый гость
 
Группа: Свой
Сообщений: 100
Регистрация: 19-01-05
Из: Москва
Пользователь №: 2 064

|
Цитата(zltigo @ Mar 25 2006, 12:38)  Читаем последние главы мануала на LPC посвященные поддержке разных способов отладки. Ну и читайте на здоровье... Я эти главы прочитал: все эти способы отладки, насколько я понял, требуют внешнего JTAG, см. рис. 40, 43, 44. А это для моей задачи избыточно. Мне достаточно, чтобы только код юзера исполнялся. Т.е. у меня есть возможность вставлять в его код отладочные строки т.п. Просто интересует, как это делается обычно.
|
|
|
|
|
Mar 25 2006, 16:00
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(TMX @ Mar 25 2006, 18:34)  Цитата(zltigo @ Mar 25 2006, 12:38)  Читаем последние главы мануала на LPC посвященные поддержке разных способов отладки.
Ну и читайте на здоровье... Я эти главы прочитал: все эти способы отладки, насколько я понял, требуют внешнего JTAG, см. рис. 40, 43, 44. А это для моей задачи избыточно. Мне достаточно, чтобы только код юзера исполнялся. Т.е. у меня есть возможность вставлять в его код отладочные строки т.п. Просто интересует, как это делается обычно. Когда я столкнулся с подобной проблемой отладки у меня не было JTAG'a, да и времени его делать тоже. Проштудировав документацию я пришел к тому же самому выводу - отладка без внешнего JTAG'a довольно большая проблема, если только не использовать отладочную версию прошивки/программы и т.п. После этого я сделал себе макросы на C, которые в случае компиляции отладочной версии прошивки в критических местах выдают отладочную информацию в UART. Мне этого хватило... PS: Я одного не могу понять: добавить в ядро ARM отладочные регистры, с помощью которых можно было бы программно устанавливать точки останова по нескольким условиям (наподобие того, как это сделано в IA32/IA64) совсем не большая проблема. Почему этого не сделали? Единственное объяснение - узкая специализация ядра на встраиваемые применения, где можно и нужно с точки зрения разработчиков отлаживаться с помощью JTAG'a и ему подобных средств внутрисистемной отладки.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Mar 25 2006, 16:48
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(TMX @ Mar 25 2006, 17:34)  Ну и читайте на здоровье... Плохо читали, ибо сложно не понять, что существует аппаратная поддержка BreakPoint, RealMonitor и Angel, реализующийся, например на RS232. Цитата PS: Я одного не могу понять: добавить в ядро ARM отладочные регистры, с помощью которых можно было бы программно устанавливать точки останова по нескольким условиям (наподобие того, как это сделано в IA32/IA64) совсем не большая проблема. Почему этого не сделали? Почему не сделали - сделали: The EmbeddedICE logic contains 16 registers. The ARM7TDMI-S debug architecture is described in detail in "ARM7TDMI-S (rev 4) Technical Reference Manual" (ARM DDI 0234A) published by ARM Limited and is available via Internet at http://www.arm.com.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 25 2006, 17:24
|
Частый гость
 
Группа: Свой
Сообщений: 100
Регистрация: 19-01-05
Из: Москва
Пользователь №: 2 064

|
Цитата(zltigo @ Mar 25 2006, 19:48)  Плохо читали, ибо сложно не понять, что существует аппаратная поддержка BreakPoint, RealMonitor и Angel, реализующийся, например на RS232. Возможно я плохо читал, но я не понял, как получить доступ к регистрам управления из программы. Буду благодарен за подсказку в какой конкретно регистр писать адрес останова? В сущности, куда записывать, чтобы программа вылетела по Prefetch Abort?
|
|
|
|
|
Mar 25 2006, 17:33
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(TMX @ Mar 25 2006, 19:24)  В сущности, куда записывать, чтобы программа вылетела по Prefetch Abort? Забавно, но похоже действительно со сторны AMBA нет доступа :-( Когда несколько месяцев назад начинал прочитал, отметил, что для ETM специально отмечено отсутствие со сторны AMBA, ну а для EmbeddedICE нет. Хотя надо еще покопать....
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 25 2006, 17:37
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(zltigo @ Mar 25 2006, 19:48)  Цитата PS: Я одного не могу понять: добавить в ядро ARM отладочные регистры, с помощью которых можно было бы программно устанавливать точки останова по нескольким условиям (наподобие того, как это сделано в IA32/IA64) совсем не большая проблема. Почему этого не сделали?
Почему не сделали - сделали: The EmbeddedICE logic contains 16 registers. The ARM7TDMI-S debug architecture is described in detail in "ARM7TDMI-S (rev 4) Technical Reference Manual" (ARM DDI 0234A) published by ARM Limited and is available via Internet at http://www.arm.com. Цитата из этого документа: Цитата The ARM7TDMI-S processor EmbeddedICE-RT macrocell module provides integrated on-chip debug support for the ARM7TDMI-S core. EmbeddedICE-RT is programmed serially using the ARM7TDMI-S processor TAP controller. Figure 5-5 illustrates the relationship between the core, EmbeddedICE-RT, and the TAP controller, showing only the signals that are pertinent to EmbeddedICE-RT. Тут ясно написано, что для программирования EmbeddedICE-RT используется TAP. Т.е. из самого отлаживаемого ядра процессора добраться до требуемых регистров EmbeddedICE не получится. Или я чего-то не понимаю?
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Mar 25 2006, 17:41
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(TMX @ Mar 25 2006, 19:03)  Возможно, я не совсем правильно спросил, добавлю: изделие - что-то вроде технологического контроллера. Не думаю , что имеет смысл давать наладчику в руки JTAG и компилятор С. Совсем не понятна функция 'наладчика'. И совсем не понятно зачем ему "компилятор C". JTAG для упрощения себе жизни - да. Ну и на него либо свою специализированную оболочечку через RDI, например, либо простенький отладчик, типа JLink.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 25 2006, 17:50
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(TMX @ Mar 25 2006, 20:24)  В сущности, куда записывать, чтобы программа вылетела по Prefetch Abort? На сколько я понимаю, исключение Prefetch Abort генерируется только в случае, если производитель процессора с ядром ARM использовал сигнал ABORT: Цитата An abort indicates that the current memory access cannot be completed. It is signaled by the external ABORT input. The ARM7TDMI-S checks for the abort exception at the end of memory access cycles. Иными словами, если контроллер памяти не дает сигнала ABORT, то пишите - не пишите, а исключения не получите. Цитата(zltigo @ Mar 25 2006, 20:43)  Цитата(makc @ Mar 25 2006, 19:37)  Тут ясно написано, что для программирования EmbeddedICE-RT используется TAP. Т.е. из самого отлаживаемого ядра процессора добраться до требуемых регистров EmbeddedICE не получится. Или я чего-то не понимаю?
Я уже объяснил, что ввело меня в заблуждение :-( Извиняюсь, пока я тут писал свой ответ, Вы успели ответить раньше.  Цитата(psL @ Mar 25 2006, 20:43)  обычно брекпоинт в мониторных системах представляет собой програмное прерывание - ловушку, по которому программа вываливается в отладчик, т.е. код операции пользовательской программы меняется на програмное прерывание, а сам код запоминается в некоторой структре. Вываливаемся в отладчик->смотрим что нужно->выполняем замещенный код->продолжаем выполнение программы.
Если я правильно понял задачу, в Вашем случае можно перед каждой интерпретируемой командой поставить ловушку, в обработчике которой анализировать признак выполнения по шагам. А что делать если код исполняется из FLASH? Его модифицировать "на лету" не получится. К тому же я слабо себе представлю, как будет работать такая подмена в случае конвейера ядра ARM. Ведь возврат будет происходить не на подмененную инструкцию, а на следующую за ней. Т.е. при подмене обработчик исключения должен будет обработать подмененную команду самостоятельно, а если она работает с памятью по относительному смещению (такое, кстати, бывает довольно часто)?
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|