Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Адрес MPU fault-а
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
jcxz
Закрыл недопустимую для выполнения область памяти при помощи MPU. Соответственно - при попытке выполнения оттуда получаю MemManage Fault.
Но регистр MMFSR содержит значение ==1. Т.е. - содержимое MMFAR невалидно.
Как получить адрес fault-а? Есть-ли способ?
Obam
В стек при обработке MemManageFault-исключения контекст сохраняется же: там и xPSR, и PC, и LR и проч. Не оно?
jcxz
Цитата(Obam @ Jul 22 2015, 15:55) *
В стек при обработке MemManageFault-исключения контекст сохраняется же: там и xPSR, и PC, и LR и проч. Не оно?

Да это понятно, что регистры сохраняются. В обработчике исключений это у меня всё используется.
Но, во-первых: исключение MPU может произойти например при записи в регион, который кеширован, и я не уверен, что PC не успеет к этому моменту переместиться на несколько команд.
Во-вторых: исключение из-за выполнения кода из региона со статусом XN=1 (запрет исполнения) как следует из описания ядра происходит не при выполнении кода, а при предвыборке кода,
т.е. когда PC ещё не дошёл до этого адреса.
Сейчас-то да, конечно, сужу по содержимому PC об адресе срабатывания MPU. Но в тоже время для Memory Manager fault и Bus fault есть спец. регистры, хранящие адрес fault-а. А для MPU (хоть он и генерит MMfault) - нет адреса sad.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.