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); // Освобождаем ресурс } }
OS_WaitBSem