Вход
Наше всё
Теги
codebook
无线电组件
Поиск
Опросы
Закон
Четверг
21 ноября
О смысле всего сущего
0xFF
Средства и методы разработки
Мобильная и беспроводная связь
Блошиный рынок
Объявления
Микроконтроллеры
PLD, FPGA, DSP
AVR
PIC
ARM, RISC-V
Технологии
Кибернетика, автоматика, протоколы
Схемы, платы, компоненты
Средства и методы разработки
1011528
Топик полностью
LightElf
(11.06.2020 13:02, просмотров: 690)
ответил
fk0
на
В типичной ОС с семафором связан список ожидания, в который становятся процессы ожидающие срабатывания данного семафора. И будится один из процессов, первый в очереди. А у тебя -- spinlock, совсем другая история. И да, там бы с атомарностью что-то придумать: обычно достаточно примитива test and set (атомарного инкремента, compare and swap...) Без атомарности не взлетит, т.к. условие "!busy" может сработать сразу в двух потоках одновременно и будет глюкодром. Нужна атомарная
достаточно запретить прерывания на время обращения к переменной. В ИАРе для этого есть куча архитектурно-независимых интринсиков.
Не надо делать мне как лучше, оставьте мне как хорошо
Ответить
+1. Работало еще на 8080.
-
VLLV
(11.06.2020 13:42
)
Да, именно. Работало также на Z80. Но при пристрастном анализе выяснялось что прерывание (аппаратный импульс) таким образом успешно пропускается.
RxTx
(239 знак., 11.06.2020 22:29
)
Смутно помнится, что разговор начинался за IAR ARM. Там таких проблем не бывает. Максимум прерывание отложится на несколько тактов. А если топикстартер осчастливит нас названием процессора - то можно и совсем красиво сделать, запрещая только конкретное прерывание.
-
LightElf
(11.06.2020 22:36
)