Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вектора кривоваты?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
cerebral
Всем привет.

Ковырялся я тут на днях с эклипсом, gdb и stm'кой. Обратил внимание на такую странность - векторы прерываний указывают на обработчики прерываний+1. Как-то это неправильно, что-ли. Кто-нибудь сталкивался с таким явлением?

Пруф:


Во вложении проект.
GetSmart
Тогда уж мозг кривоват. Потому как не читает доки на то, с чем работает. Кортексы работают в системе команд Thumb и Thumb-2, для идентификации этого режима используется младший бит в PC (R15). В том числе и в указателях на Thumb-код.
cerebral
GetSmart, большое спасибо. С мозгом, да, в последнее время не в ладах) Тороплюсь очень.
blackfin
Цитата(cerebral @ Mar 12 2011, 23:10) *
Обратил внимание на такую странность - векторы прерываний указывают на обработчики прерываний+1.

Off-topic, конечно, но..

До сих пор не могу избавиться от чувства неловкости при употреблении выражения - "вектора прерываний"..

В самом деле, если есть два "вектора прерываний", их можно складывать друг с другом, находить их скалярное произведение, вычислять модуль каждого из них.. "Удивительное рядом, но оно запрещено.."
cerebral
Цитата(blackfin @ Mar 13 2011, 02:59) *
... складывать друг с другом, находить их скалярное произведение, вычислять модуль каждого из них..."


И, кстати, два вектора - эт уже почти векторное поле wink.gif

Продолжу задавать глупые вопросы.


Это кто мог так нашалить? Причём у IDA на этот счёт совсем другое мнение:





и выглядит оно гораздо правдоподобнее.
GetSmart
файлы разные
cerebral
Цитата(GetSmart @ Mar 13 2011, 19:44) *
файлы разные


Невозможно. Проверил тоько что.





CODE
./exe/3-Channel.elf: file format elf32-littlearm

Disassembly of section .text:

...
0800013c <OS_Start>:
800013c: 490b ldr r1, [pc, #44] ; (800016c <loop+0xe>)
800013e: 4a0c ldr r2, [pc, #48] ; (8000170 <loop+0x12>)
8000140: 700a strb r2, [r1, #0]
8000142: 490c ldr r1, [pc, #48] ; (8000174 <loop+0x16>)
8000144: 4a0a ldr r2, [pc, #40] ; (8000170 <loop+0x12>)
8000146: 700a strb r2, [r1, #0]
8000148: 490b ldr r1, [pc, #44] ; (8000178 <loop+0x1a>)
800014a: 4a0c ldr r2, [pc, #48] ; (800017c <loop+0x1e>)
800014c: 600a str r2, [r1, #0]
800014e: 4602 mov r2, r0
8000150: 2000 movs r0, #0
8000152: f380 8809 msr PSP, r0
8000156: 480a ldr r0, [pc, #40] ; (8000180 <loop+0x22>)
8000158: 490a ldr r1, [pc, #40] ; (8000184 <loop+0x26>)
800015a: 6001 str r1, [r0, #0]
800015c: b662 cpsie i
...

08000428 <Reset_Handler>:
8000428: 4668 mov r0, sp
800042a: f020 0107 bic.w r1, r0, #7
800042e: 468d mov sp, r1
8000430: b501 push {r0, lr}
8000432: f7ff ffc9 bl 80003c8 <__Init_Data>
8000436: f7ff fea7 bl 8000188 <main>
800043a: e8bd 4001 ldmia.w sp!, {r0, lr}
800043e: 4685 mov sp, r0
8000440: 4770 bx lr
8000442: bf00 nop


Если судить по стеку процесса, аппликуха работает как надо, несмотря на указывающие непонятно куда вектора. Мне кажется, всё дело в отладчике. Похоже, он передаёт в эклипс неверные значения. Как таким отлаживаться? 05.gif

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.