|
Пара вопросов по архитектуре |
|
|
|
May 6 2008, 07:45
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(InsolentS @ May 6 2008, 04:14)  1) Как из супервизора обратиться к пользовательским CPSR и SP? Вот тут приводил пример. Вроде работает. http://electronix.ru/forum/index.php?showtopic=43839
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
May 6 2008, 11:24
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(Rst7 @ May 6 2008, 14:51)  Если не ошибаюсь, то метод получения USP в режиме супервизора таков Код SUB SP,SP,#4 MOV R1,SP STMIA R1,{R13}^ LDMFD SP!,{R0} А так нельзя? Код STMFD SP!,{R13}^ LDMFD SP!,{R0}
|
|
|
|
|
May 6 2008, 11:57
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(KRS @ May 6 2008, 15:24)  А так нельзя? Код STMFD SP!,{R13}^ LDMFD SP!,{R0} Нельзя: Во-первых, нельзя модифицировать базовый регистр при работе с пользовательским банком. Во-вторых, нельзя в следующей за тем инструкции пользоваться банкируемым регистром. Можно так: Код stmdb sp, {sp}^ mov r0, r0 ldmdb sp, {r0} Но лучше так: Код sub sp, sp, #0x04 stmia sp, {sp}^ nop ldmia sp!, {r0}
|
|
|
|
|
May 6 2008, 12:00
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата А так нельзя? Пробовать надо. Для начала, надо внимательно читать документацию. Номер раз - Цитата Base register mode: For the purpose of address calculation, the base register is read from the current processor mode registers, not the User mode registers. Значит, годится STMxx SP,{R13}^ Но, имеем два - Цитата Banked registers: This instruction must not be followed by an instruction which accesses banked registers (a following NOP is a good way to ensure this). И три - нельзя writeback SP сделать Значит, финальный вариант должен выглядеть так - Код SUB SP,SP,#4 STMEA SP,{R13}^ NOP LDMFD SP!,{R0} Цитата Ещё небольшой вопрос - как современные оси, например, RTX отслеживают переполнение стека у пользовательской задачи без MMU? За всех не отвечу, Nucleos при сборке с контролем стека банально внутри каждой ОСовской функции проверяет, не вышел ли стек за границу. Все. Полумера конечно, но бывает спасает.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
May 9 2008, 06:42
|

Местный
  
Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897

|
Цитата(Rst7 @ May 6 2008, 18:00)  Значит, финальный вариант должен выглядеть так - Код SUB SP,SP,#4 STMEA SP,{R13}^ NOP LDMFD SP!,{R0} Если честно, не совсем понял как работает этот код  . Не могли бы Вы прокомментировать? Можно ли таким же макером достать пользовательский LR ?
--------------------
Курильщик даташитов со стажем
|
|
|
|
|
May 9 2008, 15:38
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(InsolentS @ May 9 2008, 10:42)  Если честно, не совсем понял как работает этот код  . Не могли бы Вы прокомментировать? Можно ли таким же макером достать пользовательский LR ? используется команда STM для сохранения списка регистров в память и LDM для чтения списка регистров из памяти (память выделяется в стеке, но моможно использовать и статически выделенную область), плюс используются некоторые особенности ее работы о которых лучше почитать в ARM architecture reference manual. Конечно можно таким образом и LR достать, а проще сразу все необходимые регистры за один раз Код SUB SP, SP, #8 STMIA SP, {R13,R14} NOP LDMFD SP!,{R0,R1}
|
|
|
|
|
May 9 2008, 19:31
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата STMIA SP, {R13,R14} забыли ^ Код STMIA SP, {R13,R14}^ Без нее будут регистры супервизора, в ней самая соль.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|