Цитата(3.14 @ Jan 14 2007, 18:00)

Тогда разъясните плиз по синтаксису (приведенного выше стартапа).
После загрузки РС (хотя выражение "#reset_handler_address - . - 8" выглядит как-то странно), в РС снова должен грузится адрес, а вместо этого:
reset_handler_address:
.word reset_handler
Это как ...?
Код
_vectors:
ldr pc, [pc, #reset_handler_address - . - 8] /* reset */
Тут #reset_handler_address это адрес переменной (константы) в которой лежит адрес настоящего обработчика.
"." это адрес текущей инструкции.
"-8" - особенности АРМ архитектуры, где, скажем так, PC указывает не на текущую исполняемую команду, а на голову конвеера, которая уже убежала вперёд. (поправьте если я не так выразился

)
Кстати этого момента я не очень понял, не уж то так сложно им было расширить корвеер 32-х битным регистром для PC на каждой стадии.

В LPC контольная сумма считается только для первых 8-ми слов.
Т.е. из приведённого примера от
Код
ldr pc, [pc, #reset_handler_address - . - 8] /* reset */
до
Код
ldr pc, [pc, #fiq_handler_address - . - 8] /* fiq handler */
поэтому изменение "указателей" на обработчики (при их перемещении линкером)
Код
.word reset_handler
.word undef_handler
.word swi_handler
.word pabort_handler
.word dabort_handler
.word fiq_handler
Никак не влияет на контрольную сумму.
Ну а
Код
ldr pc, [pc, #-0xFF0] /* irq handler */
Это сразу загрузка из VICVectAddr