Я хочу, чтобы это утверждение (в теле оператора if) было атомарным:
if(I2C1STATbits.P || cmd_buffer_ptr >= CMD_BUFFER_SIZE - 1)
cmd_buff_full = 1; // should be atomic
Мой процессор (dsPIC33F) поддерживает установку и очистку атомарного бита. Он также поддерживает атомарную запись для 16-битных регистров и областей памяти; это один цикл. Как я могу быть уверен, что операция будет реализована атомарно - есть ли способ заставить компилятор сделать это? В моем случае я вполне уверен, что он будет компилироваться, чтобы быть атомарным, но я не хочу, чтобы это изменилось в будущем, если я, например, изменю какой-то другой код и он реорганизует вещи, или если я обновлю компилятор. Например, есть ли ключевое слово atomic
?
Я работаю с GCC v3.23 - точнее, MPLAB C30, модифицированной версией GCC с закрытым исходным кодом. Я работаю над микроконтроллером, который имеет только прерывания; нет понятия о нитях. Единственная возможная проблема с атомарностью состоит в том, что прерывание может быть инициировано в середине записи в течение двух циклов, если это вообще возможно.