RISC-V QingKe-V4C. Как воспользоваться инструкциями атомарного
доступа? Нужно взвести/сбросить бит в регистре периферии, при этом,
сброс/взведение бита в обычном случае - это R-M-W, которые могут
быть прерваны другим процессом, чего хотелось бы избежать без
блокировки прерываний. Есть ли возможность сделать модификацию бита, пусть и с R-M-W, но атомарно без взаимодействия с контроллером прерываний, без прямой блокировки прерываний?
Вот что написано в мануале по ядру:
Core Model: V4C
ISA: RV32IMAC
"A": Support atomic instructions, simplify lr and sc instructions, and only execute them as LW and SW, and the return of sc results is always successful.
Оно вообще как, применимо для задачи? Мне нужно менять настройку вывода порта GPIO, при этом, другие процессы, тоже могут захотеть поменять настройки другого вывода того же порта GPIO. И их R-M-W могут пересечься в прерывании, разрушив слово конфигурации порта. Чтобы избежать такого, можно блокировать прерывания перед изменениями бит. Но это относительно долго Может, можно изящнее, какими-нибудь атомарными интринсиками компилятора или, хотя бы, ассемблерной вставкой?