ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
15678 Топик полностью
д (16.10.2004 01:41, просмотров: 1) ответил KAI на Про __irq мне понятно. Но мне непонятно почему #pragma vector = 0x18 ничего не ставит по адресу 0x18, хотя в документации написано, что ставит ?)
Чюдеса в решете... Создаю новый проект Ц с майном, ничего не трогаю, только включаю пупочку выдачи ассемблерного файла, в перед майном вставляю четыре строчки, заголовок прямо из вышецыцыруемого пдф-а вместе с прагмой: #pragma vector=0x14 __irq __arm void my_handler(void) { static unsigned int t=0; t++; } int main() { return 0; } полученный ассемблерный файл: ////////////////////////////////////////////////////////////////////////////// // / // IAR ARM ANSI C/C++ Compiler V4.11A/W32 16/Oct/2004 00:10:41 / // Copyright 1999-2004 IAR Systems. All rights reserved. / // / // Cpu mode = interwork / // Endian = little / // Stack alignment = 4 / // Source file = C:\tmp\tmp\xx1\main.c / // Command line = -I "C:\Program Files\IAR Systems\EW411\ARM\INC\" / // -lB C:\tmp\tmp\xx1\Debug\List\ -o / // C:\tmp\tmp\xx1\Debug\Obj\ -z3 --no_cse --no_unroll / // --no_inline --no_code_motion --no_tbaa / // --no_clustering --no_scheduling --debug --cpu_mode / // thumb --endian little --cpu ARM7TDMI --stack_align / // 4 --interwork -e --fpu None / // "-D_DLIB_CONFIG_FILE=C:\Program Files\IAR / // Systems\EW411\ARM\LIB\dl4tptinl8n.h" / // C:\tmp\tmp\xx1\main.c / // List file = C:\tmp\tmp\xx1\Debug\List\main.s79 / // / // / ////////////////////////////////////////////////////////////////////////////// NAME main RSEG CSTACK:DATA:NOROOT(2) PUBLIC main MULTWEAK main??rA main SYMBOL "main" main??rA SYMBOL "??rA", main RSEG CODE:CODE:NOROOT(2) CODE32 main??rA: ADD R12,PC,#+0x1 BX R12 REQUIRE main // C:\tmp\tmp\xx1\main.c // 1 RSEG CODE:CODE:NOROOT(2) CODE16 // 2 int main() // 3 { // 4 return 0; main: MOV R0,#+0x0 BX LR ;; return // 5 } END // // 12 bytes in segment CODE // // 4 bytes of CODE memory (+ 8 bytes shared) // //Errors: none //Warnings: none выходной обьектный файл(интел хекс-екстендед): :020000040000FA :0400000018F09FE570 :040020005880000004 :1080000001207047124A134870B481B0111C121D30 :108010000AE00B6854681568002B03D05B1EE65C11 :10802000EE54FBD10C310C3281420CD253681468EF :10803000A342EED10D6813680026002DF2D06D1E0C :108040005E55FCD1EEE701B070BC00B07047C04691 :10805000148100002081000000000FE11F00C0E338 :10806000120080E300F021E114D09FE51F00C0E37F :108070001F0080E300F021E108D09FE508009FE5A4 :1080800010FF2FE100211000002010009080000060 :1080900001C08FE21CFF2FE1044C054D054E064F39 :1080A000AE462047002809D0BE4630470180000078 :1080B000A580000005800000BD800000044C054D37 :1080C0000020AE462047044C044DAE462047000039 :1080D000E1800000C7800000F980000009810000F5 :1080E000002070477047000000B581B000906946DD :1080F0000120FFF7F7FFFEE700B581B000F004F8BC :1081000001B001BC00470000014CA646204700001A :10811000E9800000000000000000100000001000D6 :0400000500000000F7 :00000001FF Покажите мне ради Бога хоть одно упоминание об адресе 0х14 ! А где в ассемблерном файле упоминание об ирку процедуре ?!!! А теперь закоментируем первую строчку в файле(выключим прагму) и чтоже нам покажет ассемблерный листинг: ////////////////////////////////////////////////////////////////////////////// // / // IAR ARM ANSI C/C++ Compiler V4.11A/W32 16/Oct/2004 00:27:05 / // Copyright 1999-2004 IAR Systems. All rights reserved. / // / // Cpu mode = interwork / // Endian = little / // Stack alignment = 4 / // Source file = C:\tmp\tmp\xx1\main.c / // Command line = -I "C:\Program Files\IAR Systems\EW411\ARM\INC\" / // -lB C:\tmp\tmp\xx1\Debug\List\ -o / // C:\tmp\tmp\xx1\Debug\Obj\ -z3 --no_cse --no_unroll / // --no_inline --no_code_motion --no_tbaa / // --no_clustering --no_scheduling --debug --cpu_mode / // thumb --endian little --cpu ARM7TDMI --stack_align / // 4 --interwork -e --fpu None / // "-D_DLIB_CONFIG_FILE=C:\Program Files\IAR / // Systems\EW411\ARM\LIB\dl4tptinl8n.h" / // C:\tmp\tmp\xx1\main.c / // List file = C:\tmp\tmp\xx1\Debug\List\main.s79 / // / // / ////////////////////////////////////////////////////////////////////////////// NAME main RSEG CSTACK:DATA:NOROOT(2) PUBWEAK ?init?tab?DATA_Z PUBLIC main MULTWEAK main??rA PUBLIC my_handler MULTWEAK my_handler??rT main SYMBOL "main" main??rA SYMBOL "??rA", main my_handler SYMBOL "my_handler" my_handler??rT SYMBOL "??rT", my_handler // C:\tmp\tmp\xx1\main.c // 1 //#pragma vector=0x14 // 2 __irq __arm void my_handler(void) // 3 { RSEG DATA_Z:DATA:SORT:NOROOT(2) // 4 static unsigned int t=0; ??t: DS8 4 RSEG CODE:CODE:NOROOT(2) CODE16 my_handler??rT: BX PC NOP REQUIRE my_handler RSEG CODE:CODE:NOROOT(2) CODE32 my_handler: STMDB SP!,{R0,R1} ;; Push // 5 t++; LDR R0,??my_handler_0 ;; ??t LDR R1,??my_handler_0 ;; ??t LDR R1,[R1, #+0] ADDS R1,R1,#+0x1 STR R1,[R0, #+0] // 6 } LDMIA SP!,{R0,R1} ;; Pop SUBS PC,LR,#+0x4 ;; return DATA ??my_handler_0: DC32 ??t RSEG CODE:CODE:NOROOT(2) CODE32 main??rA: ADD R12,PC,#+0x1 BX R12 REQUIRE main // 7 RSEG CODE:CODE:NOROOT(2) CODE16 // 8 int main() // 9 { // 10 return 0; main: MOV R0,#+0x0 BX LR ;; return // 11 } RSEG INITTAB:CODE:ROOT(2) DATA ?init?tab?DATA_Z: DCD sfe(DATA_Z) - sfb(DATA_Z), sfb(DATA_Z), sfb(DATA_Z) END // // 52 bytes in segment CODE // 4 bytes in segment DATA_Z // 12 bytes in segment INITTAB // // 40 bytes of CODE memory (+ 24 bytes shared) // 4 bytes of DATA memory // //Errors: none //Warnings: none О! Появился обработчик! А что в гекс файле?: :020000040000FA :0400000018F09FE570 :040020005880000004 :1080000001207047124A134870B481B0111C121D30 :108010000AE00B6854681568002B03D05B1EE65C11 :10802000EE54FBD10C310C3281420CD253681468EF :10803000A342EED10D6813680026002DF2D06D1E0C :108040005E55FCD1EEE701B070BC00B07047C04691 :10805000148100002081000000000FE11F00C0E338 :10806000120080E300F021E114D09FE51F00C0E37F :108070001F0080E300F021E108D09FE508009FE5A4 :1080800010FF2FE100211000002010009080000060 :1080900001C08FE21CFF2FE1044C054D054E064F39 :1080A000AE462047002809D0BE4630470180000078 :1080B000A580000005800000BD800000044C054D37 :1080C0000020AE462047044C044DAE462047000039 :1080D000E1800000C7800000F980000009810000F5 :1080E000002070477047000000B581B000906946DD :1080F0000120FFF7F7FFFEE700B581B000F004F8BC :1081000001B001BC00470000014CA646204700001A :10811000E9800000000000000000100000001000D6 :0400000500000000F7 :00000001FF Попрежнему ни одной записи ни по одному вектору прерывания! Клево?! Я такой халтуры еще в жизни не видел! Торговать за деньги кривой бетой на протяжении 3х лет! Как это мне напоминает милый наивный позднезастойный совок...