This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Volatile struct members

Hi,

I would like to prevent structure members optimization. I used volatile keyword:

typedef volatile struct
{
    volatile ...
    volatile uint32_t discard;
    volatile ...
} regs_t;

I declared a member in another non-volatile struct:

typedef struct
{
    ...
    volatile regs_t *regs;
    ...
} peripheral_t;

I used an "empty" expression to just clear flags in register (the memory read access must be performed):

peripheral_t p;

p.regs = 0x12345678; /* init to register block starting address */
p.regs->discard;     /* gets optimized out when opt. is on      */

The "empty" expression gets optimized out although I thought (hoped) I prevented it via the volatile keywords.
- What is the right place to put the volatile?
- Does the whole struct have to be volatile?
- Does it make sense to define volatile type? (typedef volatile struct...)

Thanks for tips/explanations.

Regards Pavel

0