====== 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~~