НОВАЯ и правильная информация
Справочник по набору команд можно найти здесь .
Для эмуляции блокировки в документации предлагается отключить прерывания.
Example ; Make the operation ”VarC = VarA + VarB” atomic:
DINT ; Disable interrupts (INTM = 1)
MOVL ACC,@VarA ; ACC = VarA
ADDL ACC,@VarB ; ACC = ACC + VarB
MOVL @VarC,ACC ; Store result into VarC
EINT ; Enable interrupts (INTM = 0)
- Указатели алгоритма -
Прерывания опережают основной цикл, и, очевидно, атомарные операции не существуют. Ваш основной цикл должен отключать прерывания, пока он срабатывает. Так как отключение прерываний похоже на владение блокировкой в этом контексте, вы можете реализовать очередь как непрерывную память или поверх слайда. Первый означает копирование памяти в стек основного цикла на pop, что может быть медленнее - однако, если у вашего FIFO достаточно памяти, вам не нужно выделять узлы slist из кучи - что означает отсутствие головной боли при управлении памятью. , Конечно, головной боли при управлении памятью не будет, если узлы slist имеют одинаковый размер.
Так, для всплывающего окна вы должны отключить прерывания и удалить элемент - после того, как это сделано, повторно включите прерывание. Для векторов прерываний это обычный бизнес (вам может потребоваться отключить прерывания во время обработки вектора прерываний - это зависит от контроллера).