Цитата(Сергей Борщ @ Nov 23 2007, 13:05)

Не работал с romboot (и 9200

), но давайте попробуем по шагам.
1)В какие адреса копируете вектор?
2)почему только один вектор, а не все?
3)Делаете ремап?
Спасибо

Давайте... Программа из ИАРа грузится в SDRAM по адресу 0x21F00000. Сконфигурил линкер на такой адрес, потому что romboot тоже туда грузит. Т.е., после загрузки ИАРом и romboot'ом программа лежит по этому адресу. В ее начале - вектора. Вот они:
Код
__program_start:
21F00000 E59FF018 LDR PC, [PC, #+24] ; [0x21F00020] =?cstartup (0x21F00074)
21F00004 00000000 ANDEQ R0, R0, R0
21F00008 00000000 ANDEQ R0, R0, R0
21F0000C 00000000 ANDEQ R0, R0, R0
ldr pc,[pc,#24]; Branch to data_handler
21F00010 E59FF018 LDR PC, [PC, #+24] ; [0x21F00030] =?data_abort (0x21F0003C)
21F00014 0841A006 STMEQDA R1, {R1,R2,SP,PC}^
ldr PC,[PC,#-0xF20]
21F00018 E51FFF20 LDR PC, [PC, #-3872] ; [0x21EFF100] =0x21F0085C
21F0001C 00000000 ANDEQ R0, R0, R0
21F00020 21F00074 MVNCSS R0, R4, ROR R0
21F00024 00000000 ANDEQ R0, R0, R0
21F00028 00000000 ANDEQ R0, R0, R0
21F0002C 00000000 ANDEQ R0, R0, R0
21F00030 21F0003C MVNCSS R0, R12, LSR R0
21F00034 00000000 ANDEQ R0, R0, R0
21F00038 00000000 ANDEQ R0, R0, R0
А в нулевом адресе - вектора ромбута. Вот они:
Код
00000000 EA000006 B 0x000020 ; RESET
00000004 EA08006D B 0x2001C0 ; UND
00000008 EAFFFFFE B 0x000008 ; SWI
0000000C EA08005F B 0x200190 ; P ABT
00000010 EA080053 B 0x200164 ; D ABT
00000014 0841A018 STMEQDA R1, {R3,R4,SP,PC}^
00000018 E51FFF20 LDR PC, [PC, #-3872] ; IRQ [AIC_IVR (0xFFFFF100)] =0x20012C
0000001C EA080071 B 0x2001E8 ; FIQ
00000020 E3A00981 MOV R0, #0x204000 ; 0x204028
00000024 E321F0D1 MSR CPSR_c, #0xD1
00000028 E1A0D000 MOV SP, R0
0000002C E2400004 SUB R0, R0, #0x4
00000030 E321F0D2 MSR CPSR_c, #0xD2
00000034 E1A0D000 MOV SP, R0
00000038 E2400010 SUB R0, R0, #0x10
В самом начале cstartup, до ремапа, беру их и копирую в начало ОЗУ - в 0x200000 (сейчас копирую все, а не один, как раньше, но особо ничего не поменялось). Далее делаю ремап, если нужно. Вот после этого, по идее, я перетер все ромбутовские вектора. Ну никак его обработчики не должны вызываться! Кстати, окошко дизасемблера ИАРа показывает старый контент (???) - нужно смотреть в память. Все дальше работает замечательно. Далее искусственно вызываю data abort *((int*)0x01) = 1; - попадаю в свой (0x21F0003C) обработчик.
Но если бинарник загрузить во флешку, откуда его romboot переписывает в 0x21f00000 и запускает - то ничего не работает.... запускается ромбутовский обработчик -F- Data Abort detected... все... Иногда, очень редко вызывался мой обработчик (если не отключать питание платы, а сделать ресет - и сразу залить прогу через ромбут - видимо, оставались правильные вектора после отладки из ИАРа).
А не может ли ромбут как-нибудь блокировать запись в свои вектора...