Цитата(zhevak @ Feb 25 2008, 21:28)

Я извиняюсь. Правильно ли я понял, что USER MODE у Вас выполняется единственная функция?
Нет.
Цитата
По моему, то, что Вы пытаетесь сделать, это несколько порочная практика. Представьте, что в Ваш проект разросся, и теперь в нем в юзеровском режиме дюжина функций. Заранее нельзя знать в какой момент возникнет исключение, т.е. нельзя предполагать, что, вот, в этой функции исключение не возникнет, а, вот, в этой -- возникнет.
Правильно. В исключении анализируется стеск на предмет вызова функций, переменных и т.д.
Цитата
Исключение может возникнуть в любее время, т.е. при выполнении любой функции. Значит, Вам нужно будет прописывать Ваш код (получающий инфц из исключения) во всех функциях. Но это еще пол-беды! Стек -- это такая бестия, что может оказаться, что вы затрете какие-нибудб жизненно важные данные. Как говориться, последствия не предсказуемы.
Если Вам нужно из исключения передать какую-то инфу на уровень юзера, используйте глобальные переменные с модфикатором volatile. Зачем Вам проламываться через бурелом (там все равно ничего полезного нет! Одни траблы.), когда рядом лежит классическая ровная дорога?
Это не то, что мне нужно.
Цитата(GetSmart @ Feb 25 2008, 21:36)

Мне кажется, это иммитация вызова процедуры в USER MODE. Даже не иммитация, а принудительный вызов.
Почти, но не совсем.
Цитата(KRS @ Feb 25 2008, 21:45)

ARM же не использует стек для возвратов. Да и вообще в ARM7 / ARM9 использование R13 как SP условно. (это в новых версиях архитектуры этот регистр жестко выделен под стек)
На первый взгляд - да, это проблема.
Но практика показала, что то, что мне нужно - в стеке. При соответствующем оформлении кода конечно.
Цитата
кстати zhevak задал хорошй вопрос.
зачем все это нужно?
Преследуются три цели.
1) - Вывод отладочной инфы (например в UART), дамп регистров, дамп стека и пр. Это скорее побочный эффект чем очень нужная функция в готовом устройстве.
2) - Реализация чего-то типа виртуальной памяти на архитектуре без MMU. В связи с отсутствием MMU DATA ABORT используется в соответствии с ARM Reference Manual для подгрузки данных. Еще один побочный эффект - PREFETCH ABORT используется для подгрузки кода. Итог - динамическая линковка.
3) - Наглядная демонстрация для студентов с целью научить их как это все работает. В общем тоже побочный эффект.

Я в университете работаю.
Получается примерно так.
Код
@ Determine address of stack for mode where exception occurred
mrs r1, CPSR @ Save current MODE
@ Switch in Prevoius Mode (where exception occurred)
mrs r2, SPSR
mov r3, r2
bic r3, r3, #0xFFFFFFE0
cmp r3, #USR_MODE
moveq r3, #SYS_MODE @ THUMB not supported
bic r2, r2, #0x1F
orr r2, r2, r3
orr r2, r2, #(I_BIT | F_BIT) @ THUMB not supported
msr CPSR, r2 @ THUMB not supported
@ Get sp and return to exception mode
mov r3, sp @ Get sp
msr CPSR, r1 @ Restore Exception MODE
Вроде работает. Может кому пригодится.
Если до исключения мог быть THUMB режим - то нужно добавить дополнительный анализ и ветку кода с THUMB командами.
В данном случае меня это не интересует, потому и не заморачивался.
Критика принимается.