|
|
  |
FIQ и регистры, IAR использует R0-R2 |
|
|
|
Jan 27 2010, 19:05
|
Местный
  
Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659

|
Цитата(zltigo @ Jan 27 2010, 21:11)  Не вызывать подпрограммы. ничего не вызывается, просто инкрементится dword и сбрасываются таймер и AIC __fiq __arm __ramfunc void FIQTimer2Handler(void){ dword dumm; dumm=AT91C_BASE_TC2->TC_SR; time2++; AT91C_BASE_AIC->AIC_EOICR=0xffffffff; } кусок листинга: 243 __fiq __arm __ramfunc void FIQTimer2Handler(void){ \ FIQTimer2Handler: \ 00000000 03002DE9 PUSH {R0,R1} 244 // 245 dword dumm; 246 dumm=AT91C_BASE_TC2->TC_SR; .......... .......... 249 } \ 0000002C 0300BDE8 POP {R0,R1} \ 00000030 04F05EE2 SUBS PC,LR,#+4 ;; return
|
|
|
|
|
Jan 27 2010, 19:35
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Sagittarius @ Jan 27 2010, 22:05)  ничего... Не верю, вот написал и откомпилировал аналогичный по функцинальности шедевр. В расходниках, два регистра из FIQ банка Код 14 __fiq __ramfunc __arm void FIQ_ISR_handler(void) 15 { 16 IO0DIR; \ FIQ_ISR_handler: \ 00000000 8E82A0E3 MOV R8,#-536870904 \ 00000004 A08B88E3 ORR R8,R8,#0x28000 \ 00000008 008098E5 LDR R8,[R8, #+0] 17 counter2++; \ 0000000C 18809FE5 LDR R8,??FIQ_ISR_handler_0 ;; counter2 \ 00000010 009098E5 LDR R9,[R8, #+0] \ 00000014 019089E2 ADD R9,R9,#+1 \ 00000018 009088E5 STR R9,[R8, #+0] 18 EXTINT = EXTINT_EINT2; \ 0000001C 0C809FE5 LDR R8,??FIQ_ISR_handler_0+0x4 ;; 0xffffffffe01fc140 \ 00000020 0490A0E3 MOV R9,#+4 \ 00000024 009088E5 STR R9,[R8, #+0] 19 } \ 00000028 04F05EE2 SUBS PC,LR,#+4 ;; return \ ??FIQ_ISR_handler_0: \ 0000002C ........ DC32 counter2 \ 00000030 40C11FE0 DC32 0xffffffffe01fc140
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 27 2010, 20:49
|
Местный
  
Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659

|
Цитата(zltigo @ Jan 27 2010, 22:35)  Не верю, вот написал и откомпилировал аналогичный по функцинальности шедевр. В расходниках, два регистра из FIQ банка вера это конечно хорошо, но в данном случае не помогает :-( оставил только инкремент, скомпилил - все равно использует общие регистры. Наверняка где то что то указать забыл компилятору, типа галочку в чекбоксе поставить или pragma какую ни будь. Код 243 __fiq __arm __ramfunc void FIQTimer2Handler(void){ \ FIQTimer2Handler: \ 00000000 03002DE9 PUSH {R0,R1} 244 // 245 // dword dumm; 246 // dumm=AT91C_BASE_TC2->TC_SR; 247 time2++; \ 00000004 10009FE5 LDR R0,??FIQTimer2Handler_0 ;; udp \ 00000008 281090E5 LDR R1,[R0, #+40] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 281080E5 STR R1,[R0, #+40] 248 // AT91C_BASE_AIC->AIC_EOICR=0xffffffff; 249 } \ 00000014 0300BDE8 POP {R0,R1} \ 00000018 04F05EE2 SUBS PC,LR,#+4 ;; return \ ??FIQTimer2Handler_0: \ 0000001C ........ DC32 udp
|
|
|
|
|
Jan 28 2010, 05:24
|
Местный
  
Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659

|
Цитата(zltigo @ Jan 28 2010, 01:26)  IDE и соответственно галочками не пользуюсь. Версия компилятора-то какая? IAR ARM 5.40 попробовал из командной строки, скомпилить, просто 1 файл где функция прерывания volatile char time2; __fiq __arm void FIQTimer2Handler(void){ time2+=1; } iccarm.exe --eec++ -e -lC D:\my_pro\stepper\fiq\ D:\my_pro\stepper\fiq\main.cpp результат с теми же PUSH POP. попробовал на IAR 5.11, результат тот же. а что вы в командной строке пишете?
|
|
|
|
|
Jan 28 2010, 07:17
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Sagittarius @ Jan 28 2010, 08:24)  IAR ARM 5.40 То, что присылал был старый 4.x компилятор, на 5 сейчас не досуг даже такую мелочь попробовать, если вдруг угробили, как и в Keil, FIQ, то крайне обидно!!! P.S. Попробовал CODE ############################################################################### # # # IAR ANSI C/C++ Compiler V5.41.0.51741/W32 for ARM 28/Jan/2010 10:47:02 # # Copyright © 1999-2009 IAR Systems AB. # # # # Cpu mode = arm # # Endian = little # # Source file = D:\IAR\Embedded Workbench 5\arm\examples\NXP\LPC214x\IAR # # -LPC-214X\Uart\Source\fiqhandl.c # # Command line = "D:\IAR\Embedded Workbench 5\arm\examples\NXP\LPC214x\IA # # R-LPC-214X\Uart\Source\fiqhandl.c" -lCN # # "D:\IAR\Embedded Workbench 5\arm\examples\NXP\LPC214x\IA # # R-LPC-214X\Uart\Project\Test\List\" -o "D:\IAR\Embedded # # Workbench 5\arm\examples\NXP\LPC214x\IAR-LPC-214X\Uart\P # # roject\Test\Obj\" --debug --endian=little # # --cpu=ARM7TDMI-S -e --fpu=None --dlib_config # # "D:\IAR\Embedded Workbench 5\arm\INC\DLib_Config_Normal. # # h" -I "D:\IAR\Embedded Workbench # # 5\arm\examples\NXP\LPC214x\IAR-LPC-214X\Uart\Project\..\ # # Source\" -I "D:\IAR\Embedded Workbench 5\arm\INC\" # # --cpu_mode arm -Oh # # List file = D:\IAR\Embedded Workbench 5\arm\examples\NXP\LPC214x\IAR # # -LPC-214X\Uart\Project\Test\List\fiqhandl.lst # # Object file = D:\IAR\Embedded Workbench 5\arm\examples\NXP\LPC214x\IAR # # -LPC-214X\Uart\Project\Test\Obj\fiqhandl.o # # # # # ###############################################################################
D:\IAR\Embedded Workbench 5\arm\examples\NXP\LPC214x\IAR-LPC-214X\Uart\Source\fiqhandl.c 1 2 #include <stdlib.h> 3 4 //---------------------------------------------------------------------------
\ In section .bss, align 4 5 volatile int cnt; \ cnt: \ 00000000 DS8 4 6 // 7 //---------------------------------------------------------------------------
\ In section .textrw, align 4, keep-with-next 8 __fiq __arm __ramfunc void FIQ_ISR_handler(void) 9 { \ FIQ_ISR_handler: \ 00000000 03002DE9 PUSH {R0,R1} 10 11 cnt++; \ 00000004 10009FE5 LDR R0,??FIQ_ISR_handler_0 ;; cnt \ 00000008 001090E5 LDR R1,[R0, #+0] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 001080E5 STR R1,[R0, #+0] 12 13 14 15 } \ 00000014 0300BDE8 POP {R0,R1} \ 00000018 04F05EE2 SUBS PC,LR,#+4 ;; return \ ??FIQ_ISR_handler_0: \ 0000001C ........ DC32 cnt
Maximum stack usage in bytes:
Function .cstack -------- ------- FIQ_ISR_handler 8
Section sizes:
Function/Label Bytes -------------- ----- cnt 4 FIQ_ISR_handler 32
4 bytes in section .bss 32 bytes in section .textrw 32 bytes of CODE memory 4 bytes of DATA memory
Errors: none Warnings: none
Все в порядке. Плюсовым компилятором - тоже
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|