Цитата(Metallist64 @ May 8 2013, 13:40)

Может надо таблицу векторов перемещать, или еще что-нибудь а RAM ??? А то наблюдается полный ступор...
Почти правильно: надо иметь две таблицы векторов. Основная сгенерируется в рамках компиляции программы и разместится по адресу, который Вы указываете в качестве начального (Ваш пример 0х10000). Однако процессор об этом ничего не знает, после сброса будет пытаться использовать таблицу по 0х0 и уйдёт в никуда... Поэтому необходимо еще разместить минимальную таблицу векторов из двух слов по стандартному адресу загрузки: первое слово должно содержать значение для загрузки указателя стека, а второе - адрес, куда прыгать. Фактически, оба слова должны быть копией таких слов из "основной" таблицы векторов. Однако надо еще настроить и контроллер прерываний на новое место таблицы векторов путем записи ее адреса в регистр VTOR.
Поэтому в startup_LPC17xx.s файле Вашего процессора начальный "загрузчик" должен будет выглядеть как:
Код
...
; Vector Table Mapped to Address 0 at Reset
AREA BOOT, DATA, READONLY
__Boot DCD __initial_sp ; Top of Stack
DCD Reset_Handler; Reset Handler
...
AREA RESET, DATA, READONLY
EXPORT __Vectors
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
...
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
MOV32 R1, #VTOR ; Load VTOR register address
LDR R0, =__Vectors; Load user program vector table address
STR R0, [R1] ; Store to VTOR to relocate the vector table
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
...
Но еще надо будет указать компоновщику разместить секцию BOOT по адресу 0х0. Это можно сделать, указав ему модифицированый (и переименованный!) файл *.sct, взяв за основу тот, что генерирует KEIL для проекта автоматически. Там найти что-то типа:
Код
LR_IROM_CODE 0х10000 0x0003F800 {
ER_IROM1 0х10000 0x0003F800 {
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
}
и
перед ним вставить:
Код
LR_IROM_BOOT 0x0 0x8 {
ER_IROM_BOOT 0x0 0x8 {
*.o (BOOT, +First)
}
}
Сообщение отредактировал KnightIgor - May 8 2013, 20:30