|
|
  |
Проблема с описанием прерываний для RealViev Compiller |
|
|
|
Nov 14 2008, 05:55
|
Участник

Группа: Свой
Сообщений: 74
Регистрация: 15-12-05
Из: Зеленоград
Пользователь №: 12 235

|
Помогите плиз. Столкнулся с проблемой, в разработке надо использовать камушек LPC2148.Есть Кеил. Есть книжка Тревора Мартина. Проблема в том, что все примеры там под компилер старый Кейловский. Обработка прерываний в нем описывается не так. Нашел хелпы в самом кейле, как описвать прерывание для Реал виева
__irq void FIQ_Handler (void) { ; } Сама функция
PRESERVE8 ; tell linker: stack alignment is 8-byte IMPORT FIQ_Handler ; use external FIQ_Handler FIQ_Addr DCD FIQ_Handler ; FIQ Entry point
а так писать в стартапе. Только вот это тоже не компилится Реал виевом. Пишет Multiply defined symbol 'FIQ_Handler'
|
|
|
|
|
Nov 14 2008, 06:51
|
Участник

Группа: Свой
Сообщений: 74
Регистрация: 15-12-05
Из: Зеленоград
Пользователь №: 12 235

|
ещё упоминается в списке векторов и в строчке FIQ_Handler B FIQ_Handler но если её закоментировать, программа не работает
|
|
|
|
|
Nov 14 2008, 07:05
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
У Вас векторов в программе больше, чем их есть у ARM: Код Vectors LDR PC, Reset_Addr LDR PC, Undef_Addr LDR PC, SWI_Addr LDR PC, PAbt_Addr LDR PC, DAbt_Addr NOP ; Reserved Vector LDR PC, IRQ_Addr LDR PC, [PC, #-0x0FF0] ; Vector from VicVectAddr <<<-вектор FIQ здесь LDR PC,FIQ_Addr
Reset_Addr DCD Reset_Handler Undef_Addr DCD Undef_Handler SWI_Addr DCD SWI_Handler PAbt_Addr DCD PAbt_Handler DAbt_Addr DCD DAbt_Handler DCD 0 ; Reserved Address IRQ_Addr DCD IRQ_Handler
PRESERVE8 ; tell linker: stack alignment is 8-byte <<<-это лишнее IMPORT FIQ_Handler ; use external FIQ_Handler FIQ_Addr DCD FIQ_Handler ; FIQ Entry point
Undef_Handler B Undef_Handler SWI_Handler B SWI_Handler PAbt_Handler B PAbt_Handler DAbt_Handler B DAbt_Handler IRQ_Handler B IRQ_Handler FIQ_Handler B FIQ_Handler <<<-это тоже лишнее
|
|
|
|
|
Nov 14 2008, 07:17
|
Участник

Группа: Свой
Сообщений: 74
Регистрация: 15-12-05
Из: Зеленоград
Пользователь №: 12 235

|
Если закоментировать ;FIQ_Handler B FIQ_Handler и ; LDR PC,FIQ_Addr и ; PRESERVE8
программа крутится в дизассемблере в строчках
0x00008208 E8AC09C0 STMIA R12!,{R6-R8,R11} 0x0000820C E8AC09C0 STMIA R12!,{R6-R8,R11} 0x00008210 E8AC09C0 STMIA R12!,{R6-R8,R11} 0x00008214 E1A0D001 MOV R13,R1
Сообщение отредактировал Женёк - Nov 14 2008, 07:19
|
|
|
|
|
Nov 14 2008, 07:44
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Женёк @ Nov 14 2008, 10:17)  программа крутится в дизассемблере в строчках
0x00008208 E8AC09C0 STMIA R12!,{R6-R8,R11} 0x0000820C E8AC09C0 STMIA R12!,{R6-R8,R11} 0x00008210 E8AC09C0 STMIA R12!,{R6-R8,R11} 0x00008214 E1A0D001 MOV R13,R1 Отлично, и где эти строчки? Рискну предположить, что вектора в Вашем случае должны выглядеть так: Код Vectors LDR PC, Reset_Addr LDR PC, Undef_Addr LDR PC, SWI_Addr LDR PC, PAbt_Addr LDR PC, DAbt_Addr NOP ; Reserved Vector LDR PC, [PC, #-0x0FF0] ; Vector from VicVectAddr LDR PC,FIQ_Addr
|
|
|
|
|
Nov 14 2008, 07:54
|
Участник

Группа: Свой
Сообщений: 74
Регистрация: 15-12-05
Из: Зеленоград
Пользователь №: 12 235

|
строчки в этом блоке блоке Код __user_setup_stackheap: 0x000081BC E1A0500E MOV R5,R14 0x000081C0 EB00001F BL __user_libspace(0x00008244) 0x000081C4 E1A0E005 MOV R14,R5 0x000081C8 E1B05000 MOVS R5,R0 0x000081CC E1A0100D MOV R1,R13 0x000081D0 E1A0300A MOV R3,R10 0x000081D4 E3C00007 BIC R0,R0,#0x00000007 0x000081D8 E1A0D000 MOV R13,R0 0x000081DC E28DD060 ADD R13,R13,#0x00000060 0x000081E0 E92D4020 STMDB R13!,{R5,R14} 0x000081E4 EBFFFFA6 BL __user_initial_stackheap(0x00008084) 0x000081E8 E8BD4020 LDMIA R13!,{R5,R14} 0x000081EC E3A06000 MOV R6,#0x00000000 0x000081F0 E3A07000 MOV R7,#0x00000000 0x000081F4 E3A08000 MOV R8,#0x00000000 0x000081F8 E3A0B000 MOV R11,#0x00000000 0x000081FC E3C11007 BIC R1,R1,#0x00000007 0x00008200 E1A0C005 MOV R12,R5 0x00008204 E8AC09C0 STMIA R12!,{R6-R8,R11} 0x00008208 E8AC09C0 STMIA R12!,{R6-R8,R11} 0x0000820C E8AC09C0 STMIA R12!,{R6-R8,R11} 0x00008210 E8AC09C0 STMIA R12!,{R6-R8,R11} 0x00008214 E1A0D001 MOV R13,R1 0x00008218 E12FFF1E BX R14 записал вестора, как вы сказали. То же самое остаётся. в output window крутятся такие сообщения Код *** error 65: access violation at 0x00000000 : no 'write' permission *** error 65: access violation at 0x00000010 : no 'write' permission *** error 65: access violation at 0x00000020 : no 'write' permission *** error 65: access violation at 0x00000030 : no 'write' permission
|
|
|
|
|
Nov 14 2008, 08:18
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Женёк @ Nov 14 2008, 10:54)  строчки в этом блоке блоке Под эмулятором работаете? Не получается так, что процессор сразу после Код ; Enter User Mode and set its Stack Pointer MSR CPSR_c, #Mode_USR попадает в IRQ/FIQ? Посмотрите, что возвращает: Код 0x000081C0 EB00001F BL __user_libspace(0x00008244) в рабочем и в не рабочем варианте.
|
|
|
|
|
Nov 14 2008, 09:08
|
Участник

Группа: Свой
Сообщений: 74
Регистрация: 15-12-05
Из: Зеленоград
Пользователь №: 12 235

|
Уф, вроде всё заработало. Спасибо большое. Это кеил глючил похоже, пересобрав проект и прописав в стартапе Код Vectors LDR PC, Reset_Addr LDR PC, Undef_Addr LDR PC, SWI_Addr LDR PC, PAbt_Addr LDR PC, DAbt_Addr NOP ; Reserved Vector ; LDR PC, IRQ_Addr LDR PC, [PC, #-0x0FF0] ; Vector from VicVectAddr LDR PC, FIQ_Addr
Reset_Addr DCD Reset_Handler Undef_Addr DCD Undef_Handler SWI_Addr DCD SWI_Handler PAbt_Addr DCD PAbt_Handler DAbt_Addr DCD DAbt_Handler DCD 0 ; Reserved Address IRQ_Addr DCD IRQ_Handler
IMPORT FIQ_Handler ; use external FIQ_Handler FIQ_Addr DCD FIQ_Handler
Undef_Handler B Undef_Handler SWI_Handler B SWI_Handler PAbt_Handler B PAbt_Handler DAbt_Handler B DAbt_Handler IRQ_Handler B IRQ_Handler ;FIQ_Handler B FIQ_Handler всё заработало. Спасибо.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|