Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Почему не стартует main?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Vladimir_T
Использую Keil и JLink, АРМ STR912. Отладчиком благополучно прохожу по шагам StartUp, а к метке main программа не переходит, генерируется Abort, причем - это на программе более 100 кБ, а программы небольшие прекрасно работают и отлаживаются. В чем может быть дело-то?

В startup:
IMPORT __main
LDR R0, =__main
BX R0

Причем, в R0 находится адрес main (проверил по map-файлу)!
aaarrr
А __main находится в том же регионе, что и startup, или где-то еще?
alexander55
Цитата(Vladimir_T @ Sep 11 2007, 12:48) *
Использую Keil и JLink, АРМ STR912. Отладчиком благополучно прохожу по шагам StartUp, а к метке main программа не переходит, генерируется Abort, причем - это на программе более 100 кБ, а программы небольшие прекрасно работают и отлаживаются. В чем может быть дело-то?

В startup:
IMPORT __main
LDR R0, =__main
BX R0

Причем, в R0 находится адрес main (проверил по map-файлу)!

1. Проверьте по map, что где находится.
2. По результатм скорретируйте размещение данных и памяти программ.
Vladimir_T
Из map-файла:
Base Addr Size Type Attr Idx E Section Name Object

0x00000000 0x0000017c Code RO 3 Reset str91x_startup.o
0x0000017c 0x00000008 Code RO 6752 * !!!main __main.o(c_a__un.l)
0x00000184 0x00000038 Code RO 7043 !!!scatter __scatter.o(c_a__un.l)
aaarrr
Тогда смотрите адрес и причину Abort'а. Может быть, scatter влезает куда не следует.
Vladimir_T
Цитата(aaarrr @ Sep 11 2007, 14:02) *
Тогда смотрите адрес и причину Abort'а. Может быть, scatter влезает куда не следует.

А как он работает - этот scatter? И откуда он берется?
Все адресные поля установлены корректно. Не трассируется программа уже после:
BX R0

Почему-то не включается режим записи трассировки (в Кейле), потому что куда-то забегает программа, (вместо того чтобы идти к main) после чего вылетает сюда:
DAbtHandler B DAbtHandler
aaarrr
Цитата(Vladimir_T @ Sep 11 2007, 15:56) *
А как он работает - этот scatter? И откуда он берется?

Scatter копирует код и данные из загрузочной области в рабочие. Подключается линкером.

Цитата(Vladimir_T @ Sep 11 2007, 15:56) *
Почему-то не включается режим записи трассировки (в Кейле), потому что куда-то забегает программа, (вместо того чтобы идти к main) после чего вылетает сюда:
DAbtHandler B DAbtHandler

Вот и посмотрите, откуда он туда попадает (R14 - 0x08 для Data Abort).
Vladimir_T
Спасибо всем!
Вроде понял: в start_up, дейчтвительно вызывалась функция установки стеков, она и не трассируется. Так вот здесь, видимо и вылетает. Пока система uC/OS не работает, но понял, где искать.
серый волк
Цитата(aaarrr @ Sep 11 2007, 16:24) *
Scatter копирует код и данные из загрузочной области в рабочие. Подключается линкером.
Вот и посмотрите, откуда он туда попадает (R14 - 0x08 для Data Abort).


я правильно понимаю соответствие Вашего высказывания "копирует код и данные из загрузочной области в рабочие" тому , что в описании трактуется как regions in load view and regions in executed View ?

Спасибо
aaarrr
Цитата(серый волк @ Sep 11 2007, 19:52) *
я правильно понимаю соответствие Вашего высказывания "копирует код и данные из загрузочной области в рабочие" тому , что в описании трактуется как regions in load view and regions in executed View ?

Ну да, это и имелось в виду.
MALLOY2
У меня была похожая проблема, суть ее заключалась в следующем в STR912 размер флеш памяти задается в регистре и по умолчанию равен 32к !!!!!!!, так вот код который включал всю флеш 512к на ходился за пределами 32к, вылечилось путем размещения кода в своей секции которая лежит в 32к памяти.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.