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

 
 
> Cortex M3, PendSV и переключение контекста
alt3857
сообщение Jun 8 2011, 11:13
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 94
Регистрация: 21-04-10
Пользователь №: 56 794



Привет!
В Cortex-M3 есть прерывание PendSV, в чем его основная цель? В доках нашел "PendSV is an interrupt-driven request for system-level service. In an OS environment, use PendSV for context switching when no other exception is active". Т.е. как я понял оно нужно (рекомендовано ARM-ом) для выполнения переключения контекста операционной системой. Но в операционке все равно задействован SysTick Timer и его прерывание для проверки необходимости переключения на каждый тик, почему контекст нельзя переключать в нем, зачем дополнительно нужно PendSV?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
brag
сообщение Jun 10 2011, 22:44
Сообщение #2


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

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
Это запрос на переключение контекста, который будет выполнен после выхода из критического участка

Весь смысл этих операций, чтобы НЕ блокировать прерывания. а на pendsv можно навешать не только переключение контекста, у меня там висит обработчик очереди запросов от хардварных прерываний(у которых приоритет всегда выше,чем у pendsv,systick) на выполнения системных функций. В итоге локов нету, система всегда совершает прогресс и оверхед минимальный(ну так инструкций 20-30)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 11 2011, 01:39
Сообщение #3


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(brag @ Jun 11 2011, 03:44) *
... у меня там висит обработчик очереди запросов от хардварных прерываний(у которых приоритет всегда выше,чем у pendsv,systick) на выполнения системных функций.

А можно поинтересоваться в общих чертах, что за прерывания и какие системные функции?
Кроме того, если приоритет выше, значит они должны прерывать pendsv,systick, так?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
brag
сообщение Jun 11 2011, 19:54
Сообщение #4


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

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата(GetSmart @ Jun 11 2011, 04:39) *
А можно поинтересоваться в общих чертах, что за прерывания

ну там от DMA, SPI, UART, USB итд.

Цитата
и какие системные функции?

ну там SignalSemaphore, SetSemaphore, CloseMutex итд

Цитата
Кроме того, если приоритет выше, значит они должны прерывать pendsv,systick, так?

да, совершенно верно. И их могут прервать прерывания с еще вышим припритетом.
Go to the top of the page
 
+Quote Post
KRS
сообщение Jun 11 2011, 20:14
Сообщение #5


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

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



Цитата(brag @ Jun 11 2011, 23:54) *
ну там SignalSemaphore, SetSemaphore, CloseMutex итд

А смысл использовать для этих целей PendSV?
Для этого есть SVCall.
А PendSV это асинхронный запрос, который или из прерывания запрашивается или из критической секции. т.е. из участка кода с более высоким приоритетом чем PendSV иначе PendSV будет себя вести как SVCall.

В System Level Programmers’ Model есть глава
SVCall, PendSV and critical region code avoidance
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 16:39
Рейтинг@Mail.ru


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