Hi Stephen, Yes I understand the paranoid issue of volatile modifier, which is the reason it was coded in this manner.
The struct with volatile are memory mapped IO structures. These structure are not instantiated in memory and hence do not incur concurrent (host) software access. The a vast majority of the fields as read-only (as viewed by the host.) The concurrency model is that hardware is the producer, and the host the consumer. There is no handshake other than the host must not expect the memory location to remain constant -- that is optimization off. As for performance, these structures are not in any critical path, so he optimization path is correctness not performance. Do you have a recommendation for changing this code without using the volatile modifier? I have requirements from the hardware in the pattern of: write a 1 to location x read from location y until it become 0 write a 0 to location x How can this work without a volatile modified on x and y? Best, Ed.