Chum_A (10.04.2013 21:35, просмотров: 74) ответил Vit на зачем там дёргания - поэлементное втыкивание и прочая паранойя?
Итого, дёрганья существенно сокращаются:
do
{
tail = __ldrex(&queue->eventTail); // вычитываем "хвост" в "локальный хвост"
event = &queue->Events[queue->eventTail]; // получаем указатель на структуру в "хвосте" буфера
if (++tail == EVENT_TABLE_SIZE) // двигаем хвост
tail = 0;
}
while(__strex(tail, &queue->eventTail)); // если "хвост" успел измениться (было прерывание), то перечитываем
// Далее без всякого эксклюзива заполняем структуру, по имеющемуся указателю
event->eventID = ID;
event->eventParam = Param;