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

 
 
 
Reply to this topicStart new topic
> Проблема с описанием прерываний для RealViev Compiller
Zugus
сообщение Nov 14 2008, 05:55
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 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'
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 14 2008, 06:40
Сообщение #2


Гуру
******

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



Цитата(Женёк @ Nov 14 2008, 08:55) *
Только вот это тоже не компилится Реал виевом. Пишет
Multiply defined symbol 'FIQ_Handler'

Ну так поищите, где у Вас еще в проекте поминается FIQ_Handler.
Go to the top of the page
 
+Quote Post
Zugus
сообщение Nov 14 2008, 06:51
Сообщение #3


Участник
*

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



ещё упоминается в списке векторов и в строчке
FIQ_Handler B FIQ_Handler
но если её закоментировать, программа не работает
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 14 2008, 06:54
Сообщение #4


Гуру
******

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



Выложите Ваш стартап.
Go to the top of the page
 
+Quote Post
Zugus
сообщение Nov 14 2008, 06:56
Сообщение #5


Участник
*

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



приложил к сообщению
Прикрепленные файлы
Прикрепленный файл  startup.txt ( 14.74 килобайт ) Кол-во скачиваний: 63
 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 14 2008, 07:05
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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    <<<-это тоже лишнее
Go to the top of the page
 
+Quote Post
Zugus
сообщение Nov 14 2008, 07:17
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 14 2008, 07:44
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Zugus
сообщение Nov 14 2008, 07:54
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 14 2008, 08:18
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 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)

в рабочем и в не рабочем варианте.
Go to the top of the page
 
+Quote Post
Zugus
сообщение Nov 14 2008, 09:08
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 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

всё заработало. Спасибо.
Go to the top of the page
 
+Quote Post

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

 


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


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