原创 Warning[Pa082]:undefined behavior:

2014-7-18 09:27 2223 22 22 分类: MCU/ 嵌入式

IAR编译的时候,出现警告如下:

Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement.

Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement
EW targets: All
EW component: C/C++ compiler
Keywords: C code, keywords, SFR, UART
Last update: January 14, 2009

Background
The warning [Pa082] is issued if 2 (or more) of the variables in a C-statment are volatile. The message text "...order of volatile accesses is undefined..." is the central information, i.e. the compiler (following the ANSII standard) can access the variables in an order that is not defined.

Is this a problem , or not...
...well that depends on your application.
Volatile is (typically) used for variables that are accessed from several threads in the application, and for Special Function Register that are the connection in/out of the chip. So you must study the volatile variables that are present in this C-statement and from the usage of these volatile variables decide if you must make a change or not.

How to change
The change is to break up the C-statement, so that each new C-statement holds only one access to a volatile variable.
In this small example the variables internalChannelSelect and ADC are volatile. If so the following C-source will issue the "Warning[Pa082]".

intAnalogSample[internalChannelSelect] = ADC[internalChannelSelect] ;

Then the following change will make the C-source predictable.

i = internalChannelSelect;
k = ADC;
intAnalogSample
= k;

 

原因是一条语句中出现2个或2个以上的volatile变量。可以利用中间变量将其修改。也可以在图示中修改。20140718092617350.jpg

iar

文章评论0条评论)

登录后参与讨论
我要评论
0
22
关闭 站长推荐上一条 /2 下一条