OSA : OS_Bsem_Wait

OS_Bsem_Wait (bsem)

Разрешен вызов только в контексте задачиПереключает контекст

Ожидает установку семафора. После того, как дождется, семафор сбрасывается. Удобно применять при доступе к разделяемому ресурсу.

Разрешен вызов:

Только из задачи

Параметры функции:

bsem ID бинарного семафора. Количество бинарных семафоров задается в файле OSAcfg.h константой 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

См. также