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

 
 
> Проблемы с отладкой ATSAMS34C
RootSDF
сообщение May 22 2013, 07:08
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 18-11-10
Пользователь №: 61 004



В общем, подключаюсь отладчиком к контроллеру и наблюдаю следующую вещь: камень после старта прыгает по адресу 0x40003С попадая в где-то в первую половину таблицы векторов прерывания, затем выполняя ее как код доходит до функций лежащих сразу за таблицей, после чего благополучно падает в прерывание Hard fault. В таблице векторов прерывания, по крайней мере, адрес обработчика Reset Handler стоит верно. Почему контроллер вместо адреса 0x400118 (Reset handler) берет левый адрес?

В качестве отладчика J-Link, среда Eclipse IDE for C/C++ Developers Version: Juno Service Release 2 Build id: 20130225-0426, компилятор Yagarto binutils: 2.23.1, gcc: 4.7.2, newlib: 1.20.0, gdb: 7.5.1. Отлаживаю через GDB Hardware Debuging.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
RootSDF
сообщение May 22 2013, 12:38
Сообщение #2





Группа: Новичок
Сообщений: 4
Регистрация: 18-11-10
Пользователь №: 61 004



Решить проблему получилось добавлением команды "monitor reset" сразу после загрузки образа ПО командой "load".
Из того что я наблюдал в логах GDB сервера (J-link) и логах в консоли (Eclipse):

1971 load
&"load\n"
load
~"Loading section .text, size 0x3b90 lma 0x400000\n"
Loading section .text, size 0x3b90 lma 0x400000
1971+download,{section=".text",section-size="15248",total-size="481233"}
~"Loading section .relocate, size 0x38 lma 0x403b90\n"
Loading section .relocate, size 0x38 lma 0x403b90
1971+download,{section=".relocate",section-size="56",total-size="481233"}
~"Start address 0x400000, load size 15304\n"
Start address 0x400000, load size 15304
~"Transfer rate: 7472 KB/sec, 7652 bytes/write.\n"
Transfer rate: 7472 KB/sec, 7652 bytes/write.
1971^done

после загрузки ПО регистр pc автоматически загружается значением 0x400000. Что мне и мешало.
Строки ENTRY в скрипте линкера я не нашел.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 22 2013, 12:51
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (RootSDF @ May 22 2013, 15:38) *
Строки ENTRY в скрипте линкера я не нашел.
Возможно в этом и была проблема. Эта строка должна содержать что-то вроде ENTRY(Reset_Handler), где Reset_Handler - имя функции, чей адрес заносится в ячейку 0x00400004



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


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


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