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

 
 
> Как правильно пользоваться OS::message?
AHTOXA
сообщение Jun 18 2013, 05:52
Сообщение #1


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Я как-то до сих пор обходился без OS::message, но недавно решил восполнить этот пробелsm.gif
Вот кусок из примера 2-Message:
Код
OS_PROCESS void TProc3::exec() {
    for (;;)   {
        TMamont m;
        ...
        MamontMsg = m;
        PB0.On();             // место А
        MamontMsg.send();
    }
}

void OS::system_timer_user_hook() {
    TMamont m;
    ...
    MamontMsg = m;
    MamontMsg.send_isr();
}

Я правильно понимаю, что если в "месте А" произойдёт прерывание от системного таймера, то сообщение от TProc3 будет перезаписано?
То есть, принимающий процесс вместо пары сообщений "сообщение от TProc3 + сообщение от таймера" получит два раза сообщение от таймера?
Как этого избежать? Обрамлять блок
Код
        MamontMsg = m;
        MamontMsg.send();

в критическую секцию? Есть ли какие-то другие варианты?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Артём_
сообщение Jun 18 2013, 16:04
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(AHTOXA @ Jun 18 2013, 08:52) *
Я правильно понимаю, что если в "месте А" произойдёт прерывание от системного таймера, то сообщение от TProc3 будет перезаписано?
То есть, принимающий процесс вместо пары сообщений "сообщение от TProc3 + сообщение от таймера" получит два раза сообщение от таймера?

Похоже так - будет два сообщения от таймера.

Цитата(AHTOXA @ Jun 18 2013, 08:52) *
Как этого избежать? Обрамлять блок
Код
        MamontMsg = m;
        MamontMsg.send();

в критическую секцию? Есть ли какие-то другие варианты?

Критическая секция тоже не поможет: в MamontMsg.send начнётся передача управления процессу Proc1, где-нибудь там разрешаться прерывания и произойдёт таймерное прерывание с вызовом MamontMsg.send_isr. Разница будет в том что сообщение будет одно, а не два.


Цитата(AHTOXA @ Jun 18 2013, 08:52) *
Есть ли какие-то другие варианты?


Использовать каналы.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 18 2013, 16:49
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Да, жалко. Получается, сообщения практически бесполезны в нынешнем своём виде sad.gif
(Каналы с указателями на объекты-сообщения я как раз и использую сейчас, хотел упростить немного).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post



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

 


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


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