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

 
 
> Вылет в Abort после LDR, почему это происходит
Alexashka
сообщение Dec 19 2011, 06:49
Сообщение #1


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Поскажите пожалуйста, в проекте для ARM под IAR происходит такая беда, после возникновения прерывания (неважно какого из двух) прога попадает в приведенный ассемблерный код, после чего должна перейти собственно на обработчик, но происходит какаято ерунда.

Код
irqHandler:
        /* Save interrupt context on the stack to allow nesting */
        SUB     lr, lr, #4
        STMFD   sp!, {lr}
        MRS     lr, SPSR
        STMFD   sp!, {r0, lr}

        /* Write in the IVR to support Protect Mode */
        LDR     lr, =AT91C_BASE_AIC
        LDR     r0, [r14, #AIC_IVR]
        STR     lr, [r14, #AIC_IVR]


После выполнения 6-й инструкции (пошагово в окне дизассемблера) я попадаю в ячейку с адресом 0x10 (вроде как Abort). Может я чего не понимаю, но LDR по идее должна просто грузить значение в r0. Или тут сложнее? Что конкретно делает данная инструкция LDR r0, [r14, #AIC_IVR]. В дизассемблере эта строчка выглядит так:

Код
        LDR     r0, [r14, #AIC_IVR]
     0x200048: 0xe59e0100     LDR       R0, [LR, #0x100]


В другом проекте все работает нормально, на 6-м шаге в r0 загружается адрес входа в обработчик прерывания, стартапы у проектов одинаковые, настройки тоже. Никак не пойму изза чего это может быть.

Update
Все нашел в чем проблема (и как я не заметил сразу, наверно это всё понедельник sm.gif), предыдущая строчка
LDR lr, =AT91C_BASE_AIC
0x200044: 0x00000000 ANDEQ R0, R0, R0
не загружает в LR ничего, видимо с определением чтото, буду разбираться.
Странно что ассемблер не ругается
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Aleph
сообщение Dec 19 2011, 09:45
Сообщение #2





Группа: Новичок
Сообщений: 8
Регистрация: 3-12-08
Пользователь №: 42 191



Цитата(Alexashka @ Dec 19 2011, 07:49) *
LDR lr, =AT91C_BASE_AIC
0x200044: 0x00000000 ANDEQ R0, R0, R0
не загружает в LR ничего, видимо с определением чтото, буду разбираться.
Странно что ассемблер не ругается
Есть подозрение, что ассемблер такого сгенерить не мог. Проверьте сразу после ресета, до выполнения чего бы то ни было, что по этому адресу находится. Если LDR, а не 0x0, то кто-то пишет по этому адресу.
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Dec 19 2011, 12:12
Сообщение #3


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Цитата(Aleph @ Dec 19 2011, 13:45) *
<br />Есть подозрение, что ассемблер такого сгенерить не мог. Проверьте сразу после ресета, до выполнения чего бы то ни было, что по этому адресу находится. Если LDR, а не 0x0, то кто-то пишет по этому адресу.<br /><br />
<br /><br /><br />
Точно! sm.gif Так и оказалось, банально переполнение массива -поменял число элементов массива, а размерность не поправил.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 21:41
Рейтинг@Mail.ru


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