2 ms·
If two pieces of code are accessing irq_flags concurrently then the load and store operations from each may be interleaved, giving incorrect results.
by foldr 3y ago
If two pieces of code are accessing irq_flags concurrently then the load and store operations from each may be interleaved, giving incorrect results.
- bsaul 3y agoOk but what makes it specific to volatile ? This pb happens with all memory. Are volatile variables used for atomic memory access semantic ?
- deleted 3y ago[deleted]
- foldr 3y agoI guess the point was that in the case of a non-volatile variable, the variable would typically be in a register and the compiler would typically compile foo |= CONSTANT into a single instruction (though there is no guarantee of any of this). But if the variable is volatile then the compiler would have to load it from memory into a register, perform the bitwise operation, and then store it again. If irq_flags represents a memory mapped register then you'd need to force the second option.