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

 
 
> Пошаговый отладчик пользовательской программы, как это делается?
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
 
Start new topic
Ответов
zltigo
сообщение Mar 25 2006, 16:48
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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:24
Сообщение #3


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

Группа: Свой
Сообщений: 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
makc
сообщение Mar 25 2006, 17:50
Сообщение #4


Гуру
******

Группа: Админы
Сообщений: 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
psL
сообщение Mar 25 2006, 20:10
Сообщение #5


Знающий
****

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



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


Все правильно говорите. Но:
Возможно я не правильно уловил суть вороса - помоему человеку нужна отладка в интерперетаторе, а не эмуляция отладки самого интерпретатора через JTAG, которая, насколько мне известно, невозможна.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- TMX   Пошаговый отладчик пользовательской программы   Mar 25 2006, 07:20
- - zltigo   Цитата(TMX @ Mar 25 2006, 09:20) Как это ...   Mar 25 2006, 09:38
|- - DASM   Цитата(zltigo @ Mar 25 2006, 12:38) Цитат...   Mar 25 2006, 10:41
||- - makc   Цитата(DASM @ Mar 25 2006, 13:41) Как это...   Mar 25 2006, 10:57
|- - TMX   Цитата(zltigo @ Mar 25 2006, 12:38) Читае...   Mar 25 2006, 15:34
|- - makc   Цитата(TMX @ Mar 25 2006, 18:34) Цитата(z...   Mar 25 2006, 16:00
||- - makc   Цитата(psL @ Mar 25 2006, 23:10) Цитата(m...   Mar 25 2006, 21:23
|- - makc   Цитата(zltigo @ Mar 25 2006, 19:48) Цитат...   Mar 25 2006, 17:37
- - TMX   Возможно, я не совсем правильно спросил, добавлю: ...   Mar 25 2006, 17:03
- - zltigo   Цитата(TMX @ Mar 25 2006, 19:24) В сущнос...   Mar 25 2006, 17:33
- - zltigo   Цитата(TMX @ Mar 25 2006, 19:03) Возможно...   Mar 25 2006, 17:41
- - psL   обычно брекпоинт в мониторных системах представляе...   Mar 25 2006, 17:43
- - zltigo   Цитата(makc @ Mar 25 2006, 19:37) Тут ясн...   Mar 25 2006, 17:43
- - zltigo   Цитата(makc @ Mar 25 2006, 19:50) А что д...   Mar 25 2006, 18:12
- - TMX   Большое спасибо всем ответившим, не имел доступа к...   Mar 28 2006, 08:14


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

 


RSS Текстовая версия Сейчас: 29th June 2025 - 14:33
Рейтинг@Mail.ru


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