ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 ноября
828040 Топик полностью
SciFi (29.03.2018 10:04, просмотров: 158) ответил PlainUser на ..."Понятно, что прерывать обмен на середине нельзя"... !!! Приоритеты тут вообще не при делах.Очередь нужна.
Приоритеты есть в ТЗ, уважаемый. А очередь без приоритетов я уже делал, кстати: #include "arbiter.h" #include "uart.h" #include "assert_static.h" #include <assert.h> #define QUEUE_DEPTH 16 static enum arbiter_id queue[QUEUE_DEPTH]; static unsigned int head, tail; static bool occupied; void arbiter_request(enum arbiter_id id) { assert_static(IS_PWR_OF_TWO(QUEUE_DEPTH)); if (head - tail < QUEUE_DEPTH) { queue[head++ & (QUEUE_DEPTH - 1)] = id; } else { assert(0); } } bool arbiter_status(enum arbiter_id id) { if (!occupied && (uart_txfull() == 0)) { if (queue[tail & (QUEUE_DEPTH - 1)] == id) { tail++; occupied = true; return true; } } return false; } void arbiter_release(void) { occupied = false; }
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้