Чюдеса в решете... Создаю новый проект Ц с майном, ничего не трогаю, только включаю пупочку выдачи ассемблерного файла, в перед майном вставляю четыре строчки, заголовок прямо из вышецыцыруемого пдф-а вместе с прагмой:
#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х лет! Как это мне напоминает милый наивный позднезастойный совок...
-
- Смотри файл startup.s79. Там и будет... - Ander1(18.10.2004 11:42)
- От того, что я указал в Ц-файле функцию __irq или не указал, файлу cstartup.s79 будет ни холодно ни жарко д(306 знак., 18.10.2004 16:06)
- Вот и я о об этом... - KAI(20.10.2004 10:24)
- От того, что я указал в Ц-файле функцию __irq или не указал, файлу cstartup.s79 будет ни холодно ни жарко д(306 знак., 18.10.2004 16:06)
- Смотри файл startup.s79. Там и будет... - Ander1(18.10.2004 11:42)