Вот ссылка: https://docs.microsoft.com/en-us/cpp/cpp/volatile-cpp?redirectedfrom=MSDN&view=msvc-160
The volatile keyword may have no effect on a field if one of the following conditions is true:
- The length of the volatile field exceeds the maximum size that can be copied on the current architecture by using one instruction.
- The length of the outermost containing struct—or if it's a member of a possibly nested struct—exceeds the maximum size
that can be copied on the current architecture by using one instruction.
Для компиляторов IAR (о которых шла речь), это работает всегда