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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Пошаговый отладчик пользовательской программы, как это делается?
TMX
сообщение Mar 25 2006, 07:20
Сообщение #1


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

Группа: Свой
Сообщений: 100
Регистрация: 19-01-05
Из: Москва
Пользователь №: 2 064



Возникла задача разработки транслятора технологического языка программирования. Требуется, чтобы была возможность пошаговой отладки на целевом устройстве.
Как это делается вообще?
Задача выполняется на ARM (LPC или SAM7, скорее первый).
Основная проблема - как заставить ядро ARM выходить в обработку исключения при достижении заданного адреса в пользовательской программе.
Пока решения следующие (в скобках - пятибалльный показатель уверенности в результате):
. Заливать отладочный вариант проги со SWI после каждой макрокоманды(4).
. Вызывать в цикле пользовательские команды в виде отдельных функций по ссылке, с выходом в проверку после каждого вызова(5+).
. Ставить внешний Atmega8, который буде рулить JTAG-ом(2).
. Не сбрасывать флаг прерывания, чтобы проц каждый раз заходил в обработку при исполнении очередной команды(1).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 25 2006, 09:38
Сообщение #2


Гуру
******

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



Цитата(TMX @ Mar 25 2006, 09:20) *
Как это делается вообще?

Читаем последние главы мануала на LPC посвященные поддержке разных способов отладки.
А вообще-то этот раздел DSP посвящен.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 25 2006, 10:41
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(zltigo @ Mar 25 2006, 12:38) *
Цитата(TMX @ Mar 25 2006, 09:20) *

Как это делается вообще?

Читаем последние главы мануала на LPC посвященные поддержке разных способов отладки.
А вообще-то этот раздел DSP посвящен.

Как это ? Уже DSP ???: :-O
Go to the top of the page
 
+Quote Post
makc
сообщение Mar 25 2006, 10:57
Сообщение #4


Гуру
******

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



Цитата(DASM @ Mar 25 2006, 13:41) *
Как это ? Уже DSP ???: :-O


Это я тут подшаманил - перенес тему в раздел ARM, где ей и место. cool.gif


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
TMX
сообщение Mar 25 2006, 15:34
Сообщение #5


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

Группа: Свой
Сообщений: 100
Регистрация: 19-01-05
Из: Москва
Пользователь №: 2 064



Цитата(zltigo @ Mar 25 2006, 12:38) *
Читаем последние главы мануала на LPC посвященные поддержке разных способов отладки.

Ну и читайте на здоровье...
Я эти главы прочитал: все эти способы отладки, насколько я понял, требуют внешнего JTAG, см. рис. 40, 43, 44.
А это для моей задачи избыточно.
Мне достаточно, чтобы только код юзера исполнялся. Т.е. у меня есть возможность вставлять в его код отладочные строки т.п. Просто интересует, как это делается обычно.
Go to the top of the page
 
+Quote Post
makc
сообщение Mar 25 2006, 16:00
Сообщение #6


Гуру
******

Группа: Админы
Сообщений: 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
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 25 2006, 16:48
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
TMX
сообщение Mar 25 2006, 17:03
Сообщение #8


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

Группа: Свой
Сообщений: 100
Регистрация: 19-01-05
Из: Москва
Пользователь №: 2 064



Возможно, я не совсем правильно спросил,
добавлю:
изделие - что-то вроде технологического контроллера. Не думаю , что имеет смысл давать наладчику в руки JTAG и компилятор С.
В F2MC я использовал для похожей задачи специальные прерывания по выборке заданного адреса.
В AVR - не сбрасывал в прерывании флаг.
Здесь я думаю сделать так:
сделаю трехадресный ассемблер, т.е. программа будет в виде таблицы структур - указатель на функцию команды, операнды и между вызовами буду проверять текущий адрес.
Просто хотелось узнать, может еще проще можно сделать...
Go to the top of the page
 
+Quote Post
TMX
сообщение Mar 25 2006, 17:24
Сообщение #9


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

Группа: Свой
Сообщений: 100
Регистрация: 19-01-05
Из: Москва
Пользователь №: 2 064



Цитата(zltigo @ Mar 25 2006, 19:48) *
Плохо читали, ибо сложно не понять, что существует аппаратная поддержка BreakPoint, RealMonitor и Angel, реализующийся, например на RS232.


Возможно я плохо читал, но я не понял, как получить доступ к регистрам управления из программы.
Буду благодарен за подсказку в какой конкретно регистр писать адрес останова?
В сущности, куда записывать, чтобы программа вылетела по Prefetch Abort?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 25 2006, 17:33
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
makc
сообщение Mar 25 2006, 17:37
Сообщение #11


Гуру
******

Группа: Админы
Сообщений: 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
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 25 2006, 17:41
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
psL
сообщение Mar 25 2006, 17:43
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



обычно брекпоинт в мониторных системах представляет собой програмное прерывание - ловушку, по которому программа вываливается в отладчик, т.е. код операции пользовательской программы меняется на програмное прерывание, а сам код запоминается в некоторой структре. Вываливаемся в отладчик->смотрим что нужно->выполняем замещенный код->продолжаем выполнение программы.

Если я правильно понял задачу, в Вашем случае можно перед каждой интерпретируемой командой поставить ловушку, в обработчике которой анализировать признак выполнения по шагам.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 25 2006, 17:43
Сообщение #14


Гуру
******

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



Цитата(makc @ Mar 25 2006, 19:37) *
Тут ясно написано, что для программирования EmbeddedICE-RT используется TAP. Т.е. из самого отлаживаемого ядра процессора добраться до требуемых регистров EmbeddedICE не получится. Или я чего-то не понимаю?

Я уже объяснил, что ввело меня в заблуждение :-(


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
makc
сообщение Mar 25 2006, 17:50
Сообщение #15


Гуру
******

Группа: Админы
Сообщений: 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 не получится. Или я чего-то не понимаю?

Я уже объяснил, что ввело меня в заблуждение :-(



Извиняюсь, пока я тут писал свой ответ, Вы успели ответить раньше. smile.gif


Цитата(psL @ Mar 25 2006, 20:43) *
обычно брекпоинт в мониторных системах представляет собой програмное прерывание - ловушку, по которому программа вываливается в отладчик, т.е. код операции пользовательской программы меняется на програмное прерывание, а сам код запоминается в некоторой структре. Вываливаемся в отладчик->смотрим что нужно->выполняем замещенный код->продолжаем выполнение программы.

Если я правильно понял задачу, в Вашем случае можно перед каждой интерпретируемой командой поставить ловушку, в обработчике которой анализировать признак выполнения по шагам.


А что делать если код исполняется из FLASH? Его модифицировать "на лету" не получится. К тому же я слабо себе представлю, как будет работать такая подмена в случае конвейера ядра ARM. Ведь возврат будет происходить не на подмененную инструкцию, а на следующую за ней. Т.е. при подмене обработчик исключения должен будет обработать подмененную команду самостоятельно, а если она работает с памятью по относительному смещению (такое, кстати, бывает довольно часто)?


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 08:10
Рейтинг@Mail.ru


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