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

 
 
 
Reply to this topicStart new topic
> user & privilege mode
pitt
сообщение Feb 20 2013, 00:09
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Cortex-M имеет режим пользователя и супервизора. Все пользовательские приложения выполняются в режиме пользователя, а прерывания в режиме супервизора. Вопрос: как узнать из функции откуда она вызвана.
Спасибо.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
prottoss
сообщение Feb 20 2013, 02:10
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(pitt @ Feb 20 2013, 06:09) *
Вопрос: как узнать из функции откуда она вызвана.
Вызывать функцию с параметром:
void MyFync(bool who_called){...}


--------------------
Go to the top of the page
 
+Quote Post
alx2
сообщение Feb 20 2013, 06:15
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(pitt @ Feb 20 2013, 05:09) *
Вопрос: как узнать из функции откуда она вызвана.

Если я правильно понял вопрос, то узнать текущий режим можно чтением control регистра. Бит 0 определяет, находится ли процессор в привилегированном режиме или нет.


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
pitt
сообщение Feb 21 2013, 03:44
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(alx2 @ Feb 20 2013, 01:15) *
Если я правильно понял вопрос, то узнать текущий режим можно чтением control регистра. Бит 0 определяет, находится ли процессор в привилегированном режиме или нет.

Совершенно верно. Только не годится для М0. Можно бит 1 - он показывает какой стек в работе. А еще можно unsigned __get_IPSR(void);
Все RTOS, которые рзделяют режим пользователя и супервизора гоняют приложения, естественно, в пользовательском режиме,а вот прерывания,те все равно в привелигированном, а поэтому используются 2 набора функций соответственно os_ и isr_. Я написал middleware, которое и определяет, какую функцию вызывать, а вот приложение этой проблемой больше не озабочено.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 6th July 2025 - 20:40
Рейтинг@Mail.ru


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