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

 
 
> вопросы по 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
Ответов
amusin
сообщение Apr 11 2007, 12:03
Сообщение #2


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

Группа: Участник
Сообщений: 120
Регистрация: 2-09-05
Из: Екатеринбург
Пользователь №: 8 165



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


Из Exec() можно достучаться до YourProc.Priority и передавать его как параметр в функцию.

Для dxp. Это может понадобиться, например, при отладке для вывода лога.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 11 2007, 12:50
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(amusin @ Apr 11 2007, 11:03) *
Из Exec() можно достучаться до YourProc.Priority и передавать его как параметр в функцию.

Для dxp. Это может понадобиться, например, при отладке для вывода лога.
Тогда уж проще для отладки добавить в public TKernel что-то вроде TPriority GetCurPriority() const { return CurProcPriority;} Не нужно будет тащить лишний параметр. (шепотом) А dxp не скажем что исходник трогали wink.gif
Есть еще один вариант - делаем класс, производный от process и в нем функцию, возвращающую Priority.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 11 2007, 13:26
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Сергей Борщ @ Apr 11 2007, 16:50) *
Тогда уж проще для отладки добавить в public TKernel что-то вроде TPriority GetCurPriority() const { return CurProcPriority;} Не нужно будет тащить лишний параметр. (шепотом)

Да, это правильный путь. Надо вообще подумать хорошенько над отладочным интерфейсом - в частности, надо возможностью анализа используемости стека.

Цитата(Сергей Борщ @ Apr 11 2007, 16:50) *
А dxp не скажем что исходник трогали wink.gif

Ага, конспираторы, блин. smile.gif

Цитата(Сергей Борщ @ Apr 11 2007, 16:50) *
Есть еще один вариант - делаем класс, производный от process и в нем функцию, возвращающую Priority.

Во-первых, не класс, а шаблон. Во-вторых, это, имхо, хуже простой встраиваемой функции - функциональность та же, создание объектов уже от другого шаблона надо будет делать, писанины больше.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post



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

 


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


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