====== OSA : OS_Bsem_Wait ======
**OS_Bsem_Wait (bsem)**\\
=== ===
{{osa:ref:attr_call_task.png|Разрешен вызов только в контексте задачи}}{{osa:ref:attr_call_ct_sw.png|Переключает контекст}}
Ожидает установку семафора. После того, как дождется, семафор сбрасывается. Удобно применять при доступе к разделяемому ресурсу.
=== Разрешен вызов: ===
Только из задачи
=== Параметры функции: ===
{| class = "fpl"
|-
|//''bsem''//
|ID бинарного семафора. Количество бинарных семафоров задается в файле ##[[osa:ref:appendix:configuration|OSAcfg.h]]## константой ##[[osa:ref:appendix:configuration#Содержание данных|OS_BSEMS]]##
|}
=== Возвращаемое значение: ===
Нет
=== Пример вызова: ===
const char * Data1 = "This is Task1\n";
const char * Data2 = "This is Task2\n";
#define BS_UART_FREE 0
void Task1 (void)
{
const char *str;
for (;;) {
OS_Bsem_Wait(BS_UART_FREE);
// Когда попали сюда, мы уверены, что UART свободен.
// На данный момент BS_UART_FREE сброшен, что сообщает другим задачам,
// что UART занят этой задачей
// Отправляем текстовую строку
str = Data1;
while (*str) {
OS_Cond_Wait(TRMT); // Ждем завершения передачи байта
TXREG = *str++;
}
OS_Bsem_Set(BS_UART_FREE); // Освобождаем ресурс
}
}
void Task2 (void)
{
const char *str;
for (;;) {
OS_Bsem_Wait(BS_UART_FREE);
// Когда попали сюда, мы уверены, что UART свободен.
// На данный момент BS_UART_FREE сброшен, что сообщает другим задачам,
// что UART занят этой задачей
// Отправляем текстовую строку
str = Data2;
while (*str) {
OS_Cond_Wait(TRMT); // Ждем завершения передачи байта
TXREG = *str++;
}
OS_Bsem_Set(BS_UART_FREE); // Освобождаем ресурс
}
}
=== Old style name ===
**OS_WaitBSem**\\
=== См. также ===
* [[osa:ref:allservices:OS_Bsem_Set|OS_Bsem_Set]]
* [[osa:ref:allservices:OS_Bsem_Reset|OS_Bsem_Reset]]
* [[osa:ref:allservices:OS_Bsem_Switch|OS_Bsem_Switch]]
* [[osa:ref:allservices:OS_Bsem_Check|OS_Bsem_Check]]
* [[osa:ref:allservices:OS_Bsem_Wait_TO|OS_Bsem_Wait_TO]]
----
* [[osa:ref:services:alphabetical|Алфавитный указатель]]
* [[osa:ref:services:brieflist|Все сервисы]]
~~UP~~