Синхронизация и взаимодействие программных потоков в операционной среде реального времени. Дорогов А.Ю. - 44 стр.

UptoLike

Составители: 

44
MsgReceive() функцией возвращается нулевой идентификатор отправителя
(rcvd), что и позволяет отличить импульс от обычного сообщения. Формат
принимаемого сообщения определен структурой _pulse:
struct _pulse {
uint16_t type;
uint16_t subtype;
int8_t code; // код импульса
uint8_t zero[3];
union sigval value; // значение импульса
int32_t scoid; // идентификатор серверного соединения
};
Импульс погружен в принятое сообщение. Поля type и subtype равны
нулю (еще один признак импульсного сообщения). Поля code и value при-
надлежат импульсу. Код импульса обычно указывает причину, по которой
импульс был отправлен. Ядро резервирует отрицательные значения кода,
оставляя 127 положительных для программиста. Другие поля структуры
_pulse пользователем не настраиваются. Резервируемые системой QNX
значения кода и соответствующие им значения импульсов представлены в
табл. 3.6.
Таблица 3.6
Code Value Назначение
_PULSE_CODE_UNBLOCK Идентификатор отправите-
ля (rcvd)
Служебные сообще-
ния канала
_PULSE_CODE_DISCONNECT
Служебные сообще-
ния канала
_PULSE_CODE_THREADDEATH Идентификатор завершен-
ного потока
Служебные сообще-
ния канала
_PULSE_CODE_COIDDEATH Идентификатор соедине-
ния
Служебные сообще-
ния канала
_PULSE_CODE_NET_ACK,
_PULSE_CODE_NET_UNBLOCK,
_PULSE_CODE_NET_DETACH
Резервированы для
сетевых взаимодей-
ствий
В отличие от MsgReceive() функция MsgReceivePulse() выполняет при-
ем только импульсов. При удачном приеме возвращается нуль, при неудач-
номкод ошибки. Набор аргументов для этой функции такой же, как и для
MsgReceive(). Отправить импульс можно с помощью функции:
int MsgSendPulse ( int coid, // идентификатор соединения
int priority, // приоритет импульса
int code, // 8-битный код
int value ); // 32-битное значение
3.6. Сигналы
Сигналы являются асинхронными сообщениями предопределенного
формата и используются для передачи уведомлений о происшедших собы-
тиях. Формат сигналов аналогичен формату импульсов (1 байт кода + 4