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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Prefetch abort, туплю
SpiritDance
сообщение Jun 3 2009, 10:28
Сообщение #16


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(aaarrr @ Jun 3 2009, 14:19) *
Просто переключиться в режим System.


Туплю.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 3 2009, 15:03
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(SpiritDance @ Jun 3 2009, 13:08) *
Сейчас наблюдаю...

Как Вам уже рекомендовали, сделайте нормальный обработчик исключений. У меня, например, выдат такую информацию:
Код
Abort:[D] PC:00006774 Op:E18060B1 CPSR:200000DF
   LR:00015D44 SP:40004C74
SP[0]:DEADBEEF->400024B8->400024B8->0001F4AC->
SP[4]:00000004->00000000->4000015C->0000BF24
Test:00000000
R0:00000000 R1:00000000 R2:00000003 R3:D0120F12  R4:40001D94  R5:400024B8
R6:0000CA02 R7:40000060 R8:00000004 R9:00000002 R10:40000010 R11:00000001
R12:000000C0

Еще ни разу не довелось не найти по ней причину. Адрес известен, функция по map файлу. Место по листингу, если оптимизация сильно мешает понять - отключается на конкретных местах, если функция не виноватая, типа "memcpy", то в Вашем распоряжении LR и стек для поиска первоисточника


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jun 3 2009, 17:32
Сообщение #18


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(zltigo @ Jun 3 2009, 19:03) *
Как Вам уже рекомендовали, сделайте нормальный обработчик исключений. У меня, например, выдат такую информацию:


Я безусловно приму рекомендации, просто не уверен что uSB у меня по прерываниям нормально сработает, а выдавать больше некуда. Надо думать а время заставляет прыгать и я боюсь напортачить.

Проблему решил. одна функция портила индексную пременную и при пробеге массива случался аборот. как оно работало при отключенном оптимизаторе сказать затруднительно.

Всем спасибо за соболезнования.
smile3046.gif


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
Shaienn
сообщение Jun 14 2010, 12:08
Сообщение #19


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

Группа: Участник
Сообщений: 103
Регистрация: 21-06-09
Пользователь №: 50 494



Добрый день. Поднимаю тему из-за непонимания.

Все таки, каким образом портится стек?
Ведь с ними работаю не я, а компилятор. Я же просто пишу функции в текстовом виде и обращаюсь к ним тоже в текстовом виде, а все адреса переходов и запоминание и восстановление регистров делает компилятор...

Написал программу, в которой появился Prefetch abort. Появляется он после следующей строки:

Код
0x00101224  E8BD47F0  LDMIA     R13!,{R4-R10,R14}


То есть, после восстановления регистров...
Но восстанавливается что-то странное. Значение R14 - 0x48d9055d, и, конечно, по этому адресу ничего нет...

Программа построена так:

3 юнита:
Процесс 1 (АЦП).с
Процесс 2 (LCD).с
Объединяющий процесс.с

Из объединяющего процесса запускаю Процесс 1, там по прерываниям опрашивается диапазон значений, после выставляется флаг окончания работы. Объединяющий процесс, среагировав на этот флаг, запускает отображение на LCD - Процесс 2. Заметил особенность - если Процесс 2 запускать из Процесса 1, то ошибки не возникает и все работает как надо.

Научите, как такие вещи лечить? Ну нашел я команду, после которой сбой возникает, но что делать дальше? И как таки эти ошибки возникают?

Спасибо.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 14 2010, 17:21
Сообщение #20


Гуру
******

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



Цитата(Shaienn @ Jun 14 2010, 16:08) *
Ведь с ними работаю не я, а компилятор.

Ну, это не совсем так. Компилятор, например, не следит за границами стека, если его не попросить.

Цитата(Shaienn @ Jun 14 2010, 16:08) *
Ну нашел я команду, после которой сбой возникает, но что делать дальше?

Сначала посмотрите, где в этот момент находится SP.
Go to the top of the page
 
+Quote Post

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

 


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


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