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

 
 
> вопросы по scmRTOS, вложенные мютексы и т.д.
jorikdima
сообщение Apr 6 2007, 16:10
Сообщение #1


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Пару вопросов по scmRTOS (да наверно в целом по РТОС).

1. Простой. Как в этой операционке получить индекс приоритета текущего процесса. Предположим есть функция и ее могут вызывать каждый из существующих процессов. Как узнать какой из них ее вызывает?

2. Предположим есть две функции, которые имеют дело с портом. Первая настраивает его скорость и прочее. Вторая... например просто делает enabled/disabled для порта, в принципе неважно. Функции могут вызываться каждым из процессов. По идее надо тело функции обрамлять mutex.Lock() mutex.Unlock(). Но ситуация такова, что например вторую функцию может вызывать не только любой из процессов непосредственно, но и первая функция (понятно, что в рамках какого то процесса). То есть при настройке порта я хочу еще сразу делать enable port. И при этом получается, что процесс в рамках вызова первой функции блокирует мютекс и вызывая вторую функцию, опять видит mutex.Lock и блокирует сам себя, навечно. Чую, тут самые такие азы всего этого дела, но не понимаю как поступают в таких случаях?

Спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jorikdima
сообщение Apr 9 2007, 09:22
Сообщение #2


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Цитата(Andy Mozzhevilov @ Apr 9 2007, 06:34) *
Или вы эту функцию хотите вызывать из первой функции, которая уже получила доступ к ресурсу, но из того же процесса?
Так просто делать не надо, напишите код по другому, иначе у вас получится deadlock.


Именно так!! Теперь понял, то есть борьбы с этим как таковой нет. Перепроектирую.
Спасибо.

Цитата(dxp @ Apr 9 2007, 09:42) *
Поэтому-то и надо защищать ресурс, а не функцию. Тогда и проблем таких не будет.
Уже объяснили выше, дополню только. Мутекс служит для разделения доступа к совместно используемому ресурсу из разных процессов, а не их одного. Думаю, что Вы и так это прекрасно понимаете.

Что касается конкретно этого Вашего случая, то тут есть основания полагать, то и мутекс никакой не нужен - обращение ведется к регистру, все обращение - это две-три инструкции процессора. Незачем в этой ситуации использовать мутексы - для предовращения нарушения совместного доступа просто поместите этот код в критическую секцию и все. Это будет и быстрее, и компактнее, и проще. Мутекс имеет смысл использовать, если ресурс требует значительного времени при обращении - массив, например, обработать. На эту тему в доке на стр 77 есть замечание (совет). smile.gif

Да спасибо за советы. Перечитаю.
Go to the top of the page
 
+Quote Post



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

 


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


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