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

 
 
 
Reply to this topicStart new topic
> Почему не стартует main?
Vladimir_T
сообщение Sep 11 2007, 08:48
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Использую Keil и JLink, АРМ STR912. Отладчиком благополучно прохожу по шагам StartUp, а к метке main программа не переходит, генерируется Abort, причем - это на программе более 100 кБ, а программы небольшие прекрасно работают и отлаживаются. В чем может быть дело-то?

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

Причем, в R0 находится адрес main (проверил по map-файлу)!
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 11 2007, 09:11
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А __main находится в том же регионе, что и startup, или где-то еще?
Go to the top of the page
 
+Quote Post
alexander55
сообщение Sep 11 2007, 09:21
Сообщение #3


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(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. По результатм скорретируйте размещение данных и памяти программ.
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Sep 11 2007, 09:26
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Из 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)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 11 2007, 11:02
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Тогда смотрите адрес и причину Abort'а. Может быть, scatter влезает куда не следует.
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Sep 11 2007, 11:56
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Цитата(aaarrr @ Sep 11 2007, 14:02) *
Тогда смотрите адрес и причину Abort'а. Может быть, scatter влезает куда не следует.

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

Почему-то не включается режим записи трассировки (в Кейле), потому что куда-то забегает программа, (вместо того чтобы идти к main) после чего вылетает сюда:
DAbtHandler B DAbtHandler
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 11 2007, 12:24
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Vladimir_T @ Sep 11 2007, 15:56) *
А как он работает - этот scatter? И откуда он берется?

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

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

Вот и посмотрите, откуда он туда попадает (R14 - 0x08 для Data Abort).
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Sep 11 2007, 12:46
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Спасибо всем!
Вроде понял: в start_up, дейчтвительно вызывалась функция установки стеков, она и не трассируется. Так вот здесь, видимо и вылетает. Пока система uC/OS не работает, но понял, где искать.
Go to the top of the page
 
+Quote Post
серый волк
сообщение Sep 11 2007, 15:52
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 32
Регистрация: 29-08-07
Пользователь №: 30 125



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


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

Спасибо
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 11 2007, 16:03
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

Ну да, это и имелось в виду.
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Sep 12 2007, 07:38
Сообщение #11


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



У меня была похожая проблема, суть ее заключалась в следующем в STR912 размер флеш памяти задается в регистре и по умолчанию равен 32к !!!!!!!, так вот код который включал всю флеш 512к на ходился за пределами 32к, вылечилось путем размещения кода в своей секции которая лежит в 32к памяти.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 09:15
Рейтинг@Mail.ru


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