Цитата(sergeeff @ Jul 3 2008, 00:38)

Все очень здорово, но надо же еще обучить процессор при возникновении прерывания с адреса 0х00000018 уходить на обработку конкретной функции обработки прерывания.
Вообще-то процессор умеет это делать, так как
исполняет инструкцию, находящуюся по адресу 0x18. Я уже приводил содержимое этого слова:
Код
00000010: 18 F0 9F E5 00 00 00 00 18 F0 9F E5 18 F0 9F E5 |................|
^^^^^^^^^^^
Разумеется, информация в таком виде представлена для удобства(или, скорее, возможности) прочтения ее человеком. Процессор же интерпретирует ее как команду. Опять же, невозможно адекватно отобразить, что видит процессор по адресу 0x18, но если представить это слово как команду, получается
Код
18: e59ff018 ldr pc, [pc, #18]; 0x38
Перевожу с ассемблера на русский: загрузить в счетчик программы (фактически, передать управление) на адрес, значение которого хранится на 0x18 (#18) больше, чем текущее значение счетчика. 0x38 здесь образуется из трех слагаемых: 0x18 - адрес инструкции, и начальное значение PC; второй 0x18 - смещение из кода команды; 8 - значение задано неявно особенностями архитектуры ARM (набежало за время прохождения конвейера).
На основании этого не вижу необходимости править команду по адресу 0x18, так как ничего лучше и придумать нельзя. Вместо этого я определяю адрес своего обработчика путем занесения его по адресу 0x38:
Код
unsigned int old_0x38;
unsigned int *ptr_0x38=(unsigned int *)0x38;
old_0x38= *ptr_0x38;
*ptr_0x38 = (unsigned int)irq_handler;
и он заносится, проверено.
Цитата(sergeeff @ Jul 3 2008, 00:38)

Я склоняюсь к тому, что redboot что-то в своих интересах инициализировал (или вовсе не инициализировал). На мой взгляд, если коллега действительно хочет именно с этим процессором работать, ему все равно под себя загузчик так и так придется написать. Тогда он будет владеть ситуацией, а не ситуация иметь его.
Спасибо на добром слове. Ладно, убью еще неделю...