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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> отладка at91R40008, простенькая программа
Серокой
сообщение Nov 25 2004, 21:16
Сообщение #1


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

Группа: Свой
Сообщений: 126
Регистрация: 25-11-04
Из: Подольск
Пользователь №: 1 224



Добрый день. Совсем замучился я, что-то я не догоняю. Прошу помощи.
Задача стоит совсем простая: на не прошедшем remap AT91R40008 запустить программу. Отладка идёт с помощью собранных под ARM gnotools, сама платка подключена через Wiggler к insight.
Текст программы такой:
Код
int main(void)
{
int a, b, c;
a = 8;
b = 7;

c=a+b;

while (1)
    {
    c=c+1;
    }
return (c);
}


Компилируется без оптимизации, в итоге листинг выглядит так:
Код
00300000 <main>:
 300000:    e1a0c00d  mov    ip, sp
 300004:    e92dd800  stmdb    sp!, {fp, ip, lr, pc}
 300008:    e24cb004  sub    fp, ip, #4; 0x4
 30000c:    e24dd00c  sub    sp, sp, #12; 0xc
 300010:    e3a03008  mov    r3, #8; 0x8
 300014:    e50b3010  str    r3, [fp, -#16]
 300018:    e3a03007  mov    r3, #7; 0x7
 30001c:    e50b3014  str    r3, [fp, -#20]
 300020:    e51b2010  ldr    r2, [fp, -#16]
 300024:    e51b3014  ldr    r3, [fp, -#20]
 300028:    e0823003  add    r3, r2, r3
 30002c:    e50b3018  str    r3, [fp, -#24]
 300030:    e51b3018  ldr    r3, [fp, -#24]
 300034:    e2833001  add    r3, r3, #1; 0x1
 300038:    e50b3018  str    r3, [fp, -#24]
 30003c:    eafffffb  b    300030 <main+0x30>

Проверяю работу пошагово по GDB. Первая инструкция выполняется без нареканий, видно, как SP переместился в 12 регистр. После попытки выполения второй инструкции всё рухает со страшным грохотом. Wiggler кричит, что его заставляют читать с какого-то адреса, и по этой причине у него случается Bus Error. Адрес этот содержится в 11 регистре, он же fp в списке блочного сохранения. Мне непонятно, кто его заставляет читать оттуда, ведь происходит просто "засовывание" данных в стек? И, кстати, стек-поинтер тоже не проинициализирован - в регистрах этих, которые программа сторит, мусор по включению питания...
Просьба такая: подскажите, как с этим бороться и каким образом инициализируется стек?
Go to the top of the page
 
+Quote Post
jojo
сообщение Nov 26 2004, 12:19
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827



В комплекте с Кейлом ARM есть примерчики для 40008. В стартапе.асм все инициализируется. Затем сишный код выполняется.

www.keil.com
Go to the top of the page
 
+Quote Post
Серокой
сообщение Nov 26 2004, 12:27
Сообщение #3


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

Группа: Свой
Сообщений: 126
Регистрация: 25-11-04
Из: Подольск
Пользователь №: 1 224



Спасибо. А у вас нет этого примера? На почту выслать. У меня нет Кейла, а качать из-за одного примера накладно... sad.gif
Go to the top of the page
 
+Quote Post
Серокой
сообщение Nov 26 2004, 14:06
Сообщение #4


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

Группа: Свой
Сообщений: 126
Регистрация: 25-11-04
Из: Подольск
Пользователь №: 1 224



jojo, спасибо за подсказку, я нашёл пример стартапа на собственно сайте Атмела! smile.gif
Буду крутить дальше...

http://atmel.com/dyn/resources/prod_documents/DOC2644.PDF
Go to the top of the page
 
+Quote Post
jojo
сообщение Nov 26 2004, 16:27
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827



Это хорошо. Поскольку вашей почты у меня нет smile.gif

Примеры приделаны к этому сообщению. надеюсь.
Прикрепленные файлы
Прикрепленный файл  Gnu.zip ( 162.17 килобайт ) Кол-во скачиваний: 57
 
Go to the top of the page
 
+Quote Post
Серокой
сообщение Nov 26 2004, 18:43
Сообщение #6


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

Группа: Свой
Сообщений: 126
Регистрация: 25-11-04
Из: Подольск
Пользователь №: 1 224



Это да, мыло недоступно так просто на таком движке. Забыл. smile.gif
Скачал, спасибо! smile.gif
Go to the top of the page
 
+Quote Post
Серокой
сообщение Feb 7 2005, 09:03
Сообщение #7


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

Группа: Свой
Сообщений: 126
Регистрация: 25-11-04
Из: Подольск
Пользователь №: 1 224



Кстати, вообще, возможна отладка по JTAG программы, откомпилированной для загрузки из flash, но в неё не прошитой?
Go to the top of the page
 
+Quote Post
jojo
сообщение Feb 7 2005, 10:42
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827



Для отладки программа и данные должны быть в памяти. Будь то ОЗУ или ПЗУ. Иначе откуда будут выборки делаться программным автоматом?

Как я понимаю, надо процесс погрузки каким-то образом выполнить.
Go to the top of the page
 
+Quote Post
Серокой
сообщение Feb 7 2005, 11:38
Сообщение #9


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

Группа: Свой
Сообщений: 126
Регистрация: 25-11-04
Из: Подольск
Пользователь №: 1 224



То есть надо иметь два скрипта линковки - для отладки, чтоб всё в память складывать, и для конечной прошивки - во флеш? Одну программу отладить не получится. Верно я понимаю?
Go to the top of the page
 
+Quote Post
jojo
сообщение Feb 7 2005, 13:37
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827



>То есть надо иметь два скрипта линковки - для отладки, чтоб всё в память складывать, и для конечной прошивки - во флеш?

Это если не хочется при отладке ПЗУ перешивать.

Я не пробовал отлаживать из ПЗУ через GDB и Wiggler с использованием символьной информации, только из ОЗУ. Там да, действительно, надо иметь два скрипта для линкера.

При использовании CrossWorks и Keil для символьной отладки достаточно, чтобы по нужным адресам был код программы. Шьем flash - и из нее же выполняем код и символьно отлаживаемся.
Go to the top of the page
 
+Quote Post
Серокой
сообщение Feb 7 2005, 16:10
Сообщение #11


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

Группа: Свой
Сообщений: 126
Регистрация: 25-11-04
Из: Подольск
Пользователь №: 1 224



Спасибо!
Я использую в качестве оболочки eclipse, а отлаживаю в insight. Но в общем принципы-то абсолютно те же...
Go to the top of the page
 
+Quote Post
Серокой
сообщение Feb 12 2005, 18:31
Сообщение #12


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

Группа: Свой
Сообщений: 126
Регистрация: 25-11-04
Из: Подольск
Пользователь №: 1 224



Ну вот, отлаживаю я по выходным, когда время есть, поэтому вопросы медленно скапливаются...
Собираю файл я "дёрнутым" из кейловского примера "Hello" скриптом линковки для RAM, и там указано следующее:
Код
MEMORY
{
 CODE (rx) : ORIGIN = 0x00010000, LENGTH = 0x00020000
 DATA (rw) : ORIGIN = 0x00030000, LENGTH = 0x00010000
}


Но когда я загружаю получившуюся прогрмамму insight'ом, получается, что он её кладёт непонятно куда, но только не в память, посколько процессор-то ещё не ремэпленный. :-/
Что делать, как отлаживать программу, стартующую на "голом" процессоре? sad.gif
Если я правлю ld-шник, то получается ещё хуже, но уже после ремепа...
Или можно insigh'ту указать, куда класть программу и с какого адреса стартовать?
Go to the top of the page
 
+Quote Post
v_shamaev
сообщение Feb 12 2005, 20:46
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 304
Регистрация: 5-07-04
Из: г. Москва
Пользователь №: 259



Цитата(Серокой @ Feb 12 2005, 21:31)
Но когда я загружаю получившуюся прогрмамму insight'ом, получается, что он её кладёт непонятно куда, но только не в память, посколько процессор-то ещё не ремэпленный. :-/
Что делать, как отлаживать программу, стартующую на "голом" процессоре? sad.gif
Если я правлю ld-шник, то получается ещё хуже, но уже после ремепа...
Или можно insigh'ту указать, куда класть программу и с какого адреса стартовать?
*


Обычно старт программы в ARM-е происходит след. путем: назначаются вектора прерываний, загружаются регистры EBI, и сразу remap. Insight сам по себе делать
это не умеет, а занимается этим обычно интерфейсная программа, связывающая GDB
с процессором - если это резидентный монитор (RedBoot, например) - то он. А в случае
с вигглером - та утилита, которая работает с вигглером. Есть команды записи в регистры,
обычно включаются в стартовый скрипт - вы видимо макрегоровским OCDLibRemote пользуетесь - там есть пример стартового скрипта для Insight-а.


--------------------
Водку пьянствовать и безобразия нарушать!!!
Go to the top of the page
 
+Quote Post
Серокой
сообщение Feb 12 2005, 21:34
Сообщение #14


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

Группа: Свой
Сообщений: 126
Регистрация: 25-11-04
Из: Подольск
Пользователь №: 1 224



Благодарю вас!
У меня инициализация векторов, EBI и собственно ремэп включены в программу, задача её просто сложить в память куда надо и выставить счётчик инструкций на это место.
Посмотрю стартовый скрипт, если OCD и это умеет, то воспользуюсь.
Go to the top of the page
 
+Quote Post
v_shamaev
сообщение Feb 12 2005, 21:46
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 304
Регистрация: 5-07-04
Из: г. Москва
Пользователь №: 259



Цитата(Серокой @ Feb 13 2005, 00:34)
У меня инициализация векторов, EBI и собственно ремэп включены в программу, задача её просто сложить в память куда надо и выставить счётчик инструкций на это место.
Посмотрю стартовый скрипт, если OCD и это умеет, то вопользуюсь.
*


Ваш ремэп никуда не денется, но он после старта программы произойдет, не забывайте,
что отладочный режим не = рабочему, в последнем старт программы происходит по 0 адресу, куда по сбросу назначается флеш, а у вас программа в отладочном режиме и не во флеше. Поэтому и требуется небольшое количество специальных ухищрений. А команды для OCD выдает Insight из стартового скрипта, посмотрите файл .gdbinit, или для винды
будет gdb.init (или наподобие), команды, начинающиеся словом monitor - как раз для OCD,
попробуте в Insight-е включить консоль GDB и дать команду "help monitor" - должен ответить (OCD).


--------------------
Водку пьянствовать и безобразия нарушать!!!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 13th August 2025 - 16:39
Рейтинг@Mail.ru


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