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

 
 
> Как правильно пользоваться 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



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

 


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


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