реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Пара вопросов по архитектуре
InsolentS
сообщение May 6 2008, 01:14
Сообщение #1


Местный
***

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



1) Как из супервизора обратиться к пользовательским CPSR и SP?
2) Можно ли как-нибудь отследить обращение пользователя к определенным адресам памяти?
Ассемблер и компилятор RV, ядро ARM7TDMI без MMU (SAM7..LPC).
Буду благодарен за любую информацию по теме.


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
defunct
сообщение May 6 2008, 02:27
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



1). CPRS у Вас будет в SPSR. А SP можно получить так - переключиться обратно в User mode сохранить SP и вернуться в режим супервизора. e.g:

.. сохранить R0 и R14

__asm{ MRS R0, CPSR};
__asm{ BIC R0, R0, #0x03 }; // Clear SV-mode bits
__asm{ MSR CPSR_c, R0 }; // Enter USER mode
// тут уже можно сохранять SP.
// Перейти из User mode в SV-mode - по SWI инструкции.
__asm{ MOV R0, R13 }; // store user SP
__asm{ SWI <код вашего обработчика> }; // call SV

2). Без MMU нельзя.
Go to the top of the page
 
+Quote Post
KRS
сообщение May 6 2008, 06:40
Сообщение #3


Профессионал
*****

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



Цитата(defunct @ May 6 2008, 06:27) *
А SP можно получить так - переключиться обратно в User mode сохранить SP и вернуться в режим супервизора. e.g:

IMHO проще переключиться в SYSTEM, тогда обратно можно будет так же переключиться без SWI
Go to the top of the page
 
+Quote Post
amw
сообщение May 6 2008, 07:45
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 6 2008, 09:28
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(KRS @ May 6 2008, 09:40) *
IMHO проще переключиться в SYSTEM, тогда обратно можно будет так же переключиться без SWI

Да, действительно.
Go to the top of the page
 
+Quote Post
Rst7
сообщение May 6 2008, 10:51
Сообщение #6


Йа моск ;)
******

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



Если не ошибаюсь, то метод получения USP в режиме супервизора таков
Код
SUB SP,SP,#4
MOV R1,SP
STMIA R1,{R13}^
LDMFD SP!,{R0}


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
KRS
сообщение May 6 2008, 11:24
Сообщение #7


Профессионал
*****

Группа: Модераторы
Сообщений: 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}
Go to the top of the page
 
+Quote Post
Rst7
сообщение May 6 2008, 11:40
Сообщение #8


Йа моск ;)
******

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



Цитата
А так нельзя?


Пробовать надо. По поводу того, какой SP для адресации стека будет использован в первой команде (Usr или Svc) документация молчит. Так что если нету времени пробовать - мой вариант, есть время - может Ваш, а может мой wink.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
InsolentS
сообщение May 6 2008, 11:55
Сообщение #9


Местный
***

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



Всем огромное спасибо!
Ещё небольшой вопрос - как современные оси, например, RTX отслеживают переполнение стека у пользовательской задачи без MMU?


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 6 2008, 11:57
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 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}
Go to the top of the page
 
+Quote Post
Rst7
сообщение May 6 2008, 12:00
Сообщение #11


Йа моск ;)
******

Группа: Модераторы
Сообщений: 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 при сборке с контролем стека банально внутри каждой ОСовской функции проверяет, не вышел ли стек за границу. Все. Полумера конечно, но бывает спасает.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
InsolentS
сообщение May 9 2008, 06:42
Сообщение #12


Местный
***

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



Цитата(Rst7 @ May 6 2008, 18:00) *
Значит, финальный вариант должен выглядеть так -
Код
SUB SP,SP,#4
STMEA SP,{R13}^
NOP
LDMFD SP!,{R0}

Если честно, не совсем понял как работает этот код wacko.gif . Не могли бы Вы прокомментировать? Можно ли таким же макером достать пользовательский LR ?


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
Rst7
сообщение May 9 2008, 11:30
Сообщение #13


Йа моск ;)
******

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



Цитата
Можно ли таким же макером достать пользовательский LR ?


Конечно. Только меняем {R13} на {R14}.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
KRS
сообщение May 9 2008, 15:38
Сообщение #14


Профессионал
*****

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



Цитата(InsolentS @ May 9 2008, 10:42) *
Если честно, не совсем понял как работает этот код wacko.gif . Не могли бы Вы прокомментировать? Можно ли таким же макером достать пользовательский LR ?

используется команда STM для сохранения списка регистров в память и LDM для чтения списка регистров из памяти (память выделяется в стеке, но моможно использовать и статически выделенную область), плюс используются некоторые особенности ее работы о которых лучше почитать в ARM architecture reference manual. Конечно можно таким образом и LR достать, а проще сразу все необходимые регистры за один раз
Код
  SUB SP, SP, #8
  STMIA SP, {R13,R14}
  NOP
  LDMFD SP!,{R0,R1}
Go to the top of the page
 
+Quote Post
Rst7
сообщение May 9 2008, 19:31
Сообщение #15


Йа моск ;)
******

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



Цитата
STMIA SP, {R13,R14}


забыли ^

Код
STMIA SP, {R13,R14}^


Без нее будут регистры супервизора, в ней самая соль.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 19:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01505 секунд с 7
ELECTRONIX ©2004-2016