Table of Contents
In the previous post, we tried understand what a volatile keyword in C/C++ is. In this post, we will have a look at using the volatile keyword with user-defined data types like structure. Some times it is useful to use volatile keyword with user-defined data types. If you need, we have a detailed explanation of Structures in C.
There are different ways of doing this. Each way will help us achieve a different thing. It totally depends on requirements on how to use volatile keyword with structure. Let’s see different scenarios and understand how to use volatile in those scenarios.
Making a single instance of a Structure as Volatile:
Let us consider this code:
typedef struct { unsigned int status; unsigned int data; } myStruct; //Use of volatile with structure variable myStruct volatile myStructSens1; myStruct myStructSens2;
In the above code, we have taken a structure called myStruct
and created two instances of that structure called myStructSens1
and myStructSens2
. While creating myStructSens1
instance, we have declared the instance as volatile by using the Volatile Keyword. For myStructSens2
, we didn’t declare it as volatile.
What this does is that only the instance myStructSens1
is made as volatile and not the myStructSens2
. Using this approach, we can define specific instances of a structure as volatile. For instance which we do not want to be volatile, we can omit the volatile keyword.
Now, for myStructSens1
, all the members of the structure will be volatile. Thus, myStructSens1.status
and myStructSens1.data
are also volatile.
Making all instances of a Structure as Volatile:
Let us consider this code:
typedef volatile struct { unsigned int status; unsigned int data; } myStruct; //Use of volatile with structure variable myStruct myStructSens1; myStruct myStructSens2;
In the above code, we have taken a structure called myStruct
and defined it a volatile. We then created two instances of that structure called myStructSens1
and myStructSens2
.
What this does is that both the instances myStructSens1
and myStructSens2
are volatile. Using this approach, we can define all instances of a structure as volatile.
Warning: Be very careful when using this approach because all the instance will be volatile now.
Now, for myStructSens1
and myStructSens2
, all the members of the structure will be volatile as well. Thus, myStructSens1.status
and myStructSens1.data
are volatile. And so are myStructSens2.status
and myStructSens2.data
.
Making specific members of a Structure as Volatile:
Let us consider this code:
typedef volatile struct { unsigned int volatile status; unsigned int data; } myStruct; //Use of volatile with structure variable myStruct myStructSens1; myStruct myStructSens2;
In the above code, we have taken a structure called myStruct
and defined it’s member status
as volatile. We then created two instances of that structure called myStructSens1
and myStructSens2
.
What this does is that for both the instances myStructSens1
and myStructSens2
, only the status variable is volatile. Using this approach, we can define specific members of a structure as volatile.
Now, for myStructSens1
and myStructSens2
, only the variable status
will be volatile. Thus, myStructSens1.status
and myStructSens2.status
are volatile. But myStructSens1.data
and myStructSens2.data
are non-volatile.
Hi, I’m Vivek, a Senior Embedded Innovation Specialist. I have been working on Embedded Systems and IoT for the past 11 years. I love to share my knowledge and train those who are interested. Nerdyelectronics.com was started out of this interest. You can read my full profile in this link.