
Вот кусок из примера 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();
}
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();
MamontMsg.send();
в критическую секцию? Есть ли какие-то другие варианты?