|
|
 |
Ответов
|
May 12 2014, 12:29
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 12-01-14
Из: Омск
Пользователь №: 80 002

|
Цитата надо попробовать 1. войти в прерывание, 2. в обработчике записать в маин стэк данные как будто-то вошли из какой-то известной функции 3. записать в PC значение FFFFFFF9 Попробовал сделать такое после входа в обработчик Код LDR r0, =TaskPointer LDR r0, [r0] LDR r0, [r0] MOV r1, r0 LDR sp, [r1,#24];Загрузил стэк программы MOVW R2,#0x00d0; в котором по адресу 0x200000d0 MOVT R2,#0x2000; положил число 0xFFFFFFF9 LDR pc, [r2]; Загрузил его в PC И улетел на HardFault. Что я не так сделал?
|
|
|
|
|
May 12 2014, 13:54
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Omnicake @ May 12 2014, 15:29)  И улетел на HardFault. Что я не так сделал? Какой стек используется, MSP или PSP? Есть подозрение, что используется PSP, тогда как в момент возврата по вашему магическому числу сотояние восстанавливается из PSP. Прочитал ветку (каюсь, по диагонали). Не могу понять - зачем вы чешете правое ухо левой ногой? После входа в обработчик у вас в LR уже лежит нужное для выхода магическое число. Хотите подменить адрес возврата - меняйте его в сохраненном на стеке в момент входа в обработчик контексте. Потом стандартный возврат из любой функции - bx LR. Все. Если вам нужно сходить из обработчика куда-то еще - делайте push lr, ходите как обычно и в конце делайте pop pc. Остальной механизм при этом сработает сам, без всяких сохранений магического числа по магическому адресу 0x200000d0. Кстати, а по этому адресу действительно лежит нужное число? Не может там случайно оказаться мусор?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
Omnicake Выход из handler-mode в cortex-m3 May 11 2014, 08:01 1113 разве режим - Handler или Thread - каким-либо обра... May 11 2014, 08:08 Omnicake Как мне казалось, handler-mode включается при обра... May 11 2014, 08:19 1113 приведите код настройки таймера и код обработчика May 11 2014, 08:30 Omnicake Инициализация таймера
Код AREA HEAP, CODE, READONL... May 11 2014, 08:48 1113 инициализация и обработчик - правильные. но для пе... May 11 2014, 08:58 Omnicake Не помогло, на задаче он все также в handler-mode ... May 11 2014, 09:05 1113 предлагаю вам отладиться без переключения контекст... May 11 2014, 09:13 Omnicake Забыл кстати упомянуть, что компилируется все это ... May 11 2014, 09:15 1113 Цитата(Omnicake @ May 11 2014, 12:15) Заб... May 11 2014, 09:17 Omnicake Попробовал убрать загрузку указателя стэка - ничег... May 11 2014, 10:22 1113 а вы уверены, что таймер считает, а не находится в... May 11 2014, 10:28 Omnicake Таймер точно работает и генерирует прерывания, для... May 11 2014, 10:31 1113 Цитата(Omnicake @ May 11 2014, 13:31) Тай... May 11 2014, 11:00 Omnicake Оно и происходит внутри прерывания, ведь scheduler... May 11 2014, 11:41 1113 имхо это не влияет. у вас оно равно 0 потому что п... May 11 2014, 11:50 Golikov A. А правильно я понимаю что LR служит для того чтобы... May 11 2014, 13:42 1113 Цитата(Golikov A. @ May 11 2014, 16:42) А... May 11 2014, 14:16 Golikov A. а я вот доки почитал повнимательнее...
если говор... May 11 2014, 14:56 1113 Цитата(Golikov A. @ May 11 2014, 17:56) а... May 11 2014, 15:18 Golikov A. ЦитатаThis indicates which stack pointer correspon... May 11 2014, 16:03 1113 Цитата(Golikov A. @ May 11 2014, 19:03) С... May 11 2014, 16:10 Golikov A. вот и я о том же думаю...
но с другой стороны он ... May 11 2014, 16:50 Omnicake Перепробовал вчера такие варианты:
1) Запись в LR ... May 12 2014, 02:32 Golikov A. ЦитатаЗапись в LR или PC значения EXC_RETURN уводи... May 12 2014, 04:47 Omnicake Да, находился в Handler mode. Под "простым вы... May 12 2014, 05:03 Omnicake Используется MSP, число там лежит точно, так как в... May 12 2014, 14:16 adnega Цитата(Omnicake @ May 12 2014, 18:16) Исп... May 12 2014, 15:44 Сергей Борщ Цитата(Omnicake @ May 12 2014, 17:16) в с... May 13 2014, 06:34 Omnicake Видимо действительно у меня нет понимания. Я решаю... May 12 2014, 16:17 adnega Цитата(Omnicake @ May 12 2014, 20:17) Вид... May 12 2014, 17:03 1113 Цитата(Omnicake @ May 12 2014, 19:17) Про... May 12 2014, 17:59 Golikov A. 1. PendSv - это просто особое прерывание, приорите... May 12 2014, 17:56 Omnicake Цитатавам надо сделать задачи со своими локальными... May 13 2014, 02:10 Golikov A. обращаемся к первоисточнику
http://infocenter.arm... May 13 2014, 04:44 Omnicake 1. Ну у меня и отображается активным MSP все это в... May 13 2014, 05:34 Omnicake ЦитатаВ LR заносится магическое число. Если вы наб... May 13 2014, 06:37 Сергей Борщ Цитата(Omnicake @ May 13 2014, 09:37) он ... May 13 2014, 07:43 Omnicake Видимо это Keil uVision и делает: после того как я... May 13 2014, 08:11 Сергей Борщ Цитата(Omnicake @ May 13 2014, 11:11) Одн... May 13 2014, 11:47 1113 Omnicake, ваше желание разобраться похвально, но т... May 13 2014, 08:17 Omnicake Хорошо. Спасибо. May 13 2014, 08:26 Omnicake Починил, правда, для меня, это шаманством осталось... May 13 2014, 12:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|