Я перекрестно скомпилировал программу для cortex-m3. В стартовом коде все прерывания задаются в g_pfnVectors. Когда я дизассемблирую, по адресу 0x0 я вижу "значение указателя стека". Затем по адресу 0x4 дается адрес обработчика прерывания сброса. Это продолжается со следующими адресами системных прерываний.
Вот мой вопрос: почему в векторе прерывания адреса обработчиков прерываний +1 от фактического адреса. Адрес обработчика ResetISR 0x184, но в таблице прерываний 0x185. Это относится ко всем другим адресам обработчиков прерываний. В чем причина этого?
00000000 <g_pfnVectors>:
0: 10008000 andne r8, r0, r0
4: 00000185 andeq r0, r0, r5, lsl #3
8: 00000215 andeq r0, r0, r5, lsl r2
c: 0000021d andeq r0, r0, sp, lsl r2
00000184 <ResetISR>:
184: b580 push {r7, lr}
186: b084 sub sp, #16
188: af00 add r7, sp, #0
.......
00000214 <NMI_Handler>:
214: b480 push {r7}
216: af00 add r7, sp, #0
218: e7fe b.n 218 <NMI_Handler+0x4>
21a: bf00 nop
.......
0000021c <HardFault_Handler>:
21c: b480 push {r7}
21e: af00 add r7, sp, #0
220: e7fe b.n 220 <HardFault_Handler+0x4>
.......