搜索
bottom↓
楼主: quben

请大侠讲讲volatile的作用

[复制链接]

出0入0汤圆

发表于 2007-1-17 22:36:47 | 显示全部楼层
结构体里的成员,同样会被优化掉!



个人感觉在结构体里加volatile更好

出0入0汤圆

发表于 2007-1-25 20:42:06 | 显示全部楼层
非常感谢去笨先生的详述  :)

出0入0汤圆

发表于 2007-1-25 22:54:43 | 显示全部楼层
讲的太好了,我以前在用51时遇到过这样的问题,今于终于明白了。

出0入0汤圆

发表于 2007-1-26 09:48:01 | 显示全部楼层
顶了,好久没有来这里看看了。

今天要好好看看

出0入0汤圆

发表于 2007-1-26 13:29:28 | 显示全部楼层
顶,以前一直不理解这个关键字的用法,真是获益匪浅,谢谢啦

出0入0汤圆

发表于 2007-1-26 16:07:47 | 显示全部楼层
我的理解:

http://www.chipart.cn/

出0入0汤圆

发表于 2007-1-26 20:57:02 | 显示全部楼层
不错不错,收藏了,顶!!

出0入0汤圆

发表于 2007-2-2 14:11:16 | 显示全部楼层
请教处理这样的中断,像这样定义可以么,谢谢

unsigned long int ACU;

unsigned char flag;

volatile unsigned int ACF,BCF;

volatile unsigned long int ACC_BUF;

SIGNAL(SIG_INTERRUPT0)

         {

          if(!flag)

             {

              ACC_BUF=ACC_BUF+BCF;

                  if(ACC_BUF>=ACU)  

                     {

                       ACC_BUF=0;

                     SBIT(PORTB,BIT(4));

                      TCCR0B=0x05;                                   

                     }

                 }

         else

             ACF++;

         }

出0入0汤圆

发表于 2007-4-14 21:46:44 | 显示全部楼层
精华就是精华……

出0入0汤圆

发表于 2007-4-14 22:20:33 | 显示全部楼层
很棒

出0入0汤圆

发表于 2007-4-19 11:04:28 | 显示全部楼层
真可惜今天才看到呀!真是太好了!

收藏了!谢谢

出0入0汤圆

发表于 2007-5-17 15:37:34 | 显示全部楼层
终于明白了,谢谢了.

出0入0汤圆

发表于 2007-5-28 21:40:13 | 显示全部楼层
讲的很明白 谢谢

出0入0汤圆

发表于 2007-9-18 19:54:03 | 显示全部楼层
hao!顶一个

出0入0汤圆

发表于 2007-9-21 09:07:20 | 显示全部楼层
好啊。学习了

出0入0汤圆

发表于 2007-9-21 23:08:47 | 显示全部楼层
又学到知识了,谢谢!

出0入0汤圆

发表于 2007-9-23 23:45:46 | 显示全部楼层
quben 去笨
解释得真好,等我能看懂的时候再次好好体会一下,这一定会让我在以后再这样的问题上少走弯路的,谢谢了!!!

出0入0汤圆

发表于 2007-9-28 17:10:52 | 显示全部楼层
讲的不错!

出0入0汤圆

发表于 2007-9-28 22:05:02 | 显示全部楼层
好也,顶下!

出0入0汤圆

发表于 2007-9-30 10:07:42 | 显示全部楼层
顶quben ,好人啊!

出0入0汤圆

发表于 2007-10-4 16:35:42 | 显示全部楼层
好也,顶下!

出0入0汤圆

发表于 2007-10-5 13:29:12 | 显示全部楼层
好,顶下!

出0入0汤圆

发表于 2007-10-9 21:43:59 | 显示全部楼层
学习了!

出0入0汤圆

发表于 2007-11-1 21:18:01 | 显示全部楼层
做个记号,继续学习

出0入0汤圆

发表于 2007-11-1 23:24:00 | 显示全部楼层
向 quben 去笨 致敬。获益匪浅

出0入0汤圆

发表于 2007-11-2 17:30:42 | 显示全部楼层
好!我得去叫我的C语言老师来这里学习才行呀~~

出0入0汤圆

发表于 2007-11-12 13:53:22 | 显示全部楼层
如果可以,请armok将此贴置顶吧,每天都有人问这个问题或因为这个问题程序不通.

出0入0汤圆

发表于 2007-11-12 15:42:40 | 显示全部楼层
我也觉得阿莫应该整理一下论坛里帖子,做个索引置顶,分个新手入门、资料等类别。
否则像这个问题几乎每个月都有几贴,我们不回,新手会觉得这里太冷漠,但各个都回也麻烦,没那么多耐心。

出0入0汤圆

发表于 2007-11-18 12:36:22 | 显示全部楼层
长见识

出0入0汤圆

发表于 2007-11-18 14:36:22 | 显示全部楼层
不错不错

一直不知道这个VOLATILE的用处,今天清楚了

出0入0汤圆

发表于 2007-12-25 22:19:19 | 显示全部楼层
我刚也遇到此问题了,
加了VOLATILE就OK了!

出0入0汤圆

发表于 2007-12-26 10:22:42 | 显示全部楼层
记号,以后备查

出0入0汤圆

发表于 2007-12-26 11:34:16 | 显示全部楼层
学到好东西

出0入0汤圆

发表于 2007-12-26 17:17:47 | 显示全部楼层
学到了。

出0入0汤圆

发表于 2007-12-27 20:53:35 | 显示全部楼层
困惑许久的问题已被楼主道破了,怎一个谢字了得

出0入0汤圆

发表于 2008-1-27 14:44:39 | 显示全部楼层
谢谢,好帖子

出0入0汤圆

发表于 2008-2-14 21:51:13 | 显示全部楼层
经典

出0入0汤圆

发表于 2008-2-15 09:18:26 | 显示全部楼层
困惑许久的问题已被楼主道破了,怎一个谢字了得

出0入0汤圆

发表于 2008-6-10 22:42:46 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-6-11 00:21:12 | 显示全部楼层
认真看一下。

出0入0汤圆

发表于 2008-6-11 03:09:56 | 显示全部楼层
作个记号

出0入0汤圆

发表于 2008-6-16 18:53:27 | 显示全部楼层
好贴,顶一下!

出0入0汤圆

发表于 2008-6-16 21:07:57 | 显示全部楼层
记录,收藏,谢谢!

出0入0汤圆

发表于 2008-6-16 23:14:04 | 显示全部楼层

非常感谢!!!!!

出0入0汤圆

发表于 2008-7-27 16:18:14 | 显示全部楼层
volatile!记号,收藏!

出0入46汤圆

发表于 2008-7-27 17:40:37 | 显示全部楼层
受益匪浅!

出0入0汤圆

发表于 2008-9-8 17:02:01 | 显示全部楼层
谢谢

出0入0汤圆

发表于 2008-9-8 17:05:10 | 显示全部楼层
收藏~~

出0入0汤圆

发表于 2008-9-8 19:46:33 | 显示全部楼层
我狂用,反正没有副作用

出0入0汤圆

发表于 2008-9-8 20:33:43 | 显示全部楼层
这回算是理解个通透,以后可得注意了,不过也不能狂用吧。

出0入0汤圆

发表于 2008-9-8 21:04:39 | 显示全部楼层
很详细,受益非浅啊

出0入0汤圆

发表于 2008-9-8 23:02:39 | 显示全部楼层
典型的例子
for ( int i=0; i<100000; i++);
这个语句用来测试空循环的速度的
但是编译器肯定要把它优化掉,根本就不执行
如果你写成  
for ( volatile int i=0; i<100000; i++);
它就会执行了


这个例子还不是很明白噢,for ( int i=0; i<100000; i++); 不是死循环吗?

出0入0汤圆

发表于 2008-9-9 08:51:29 | 显示全部楼层
谢谢,mark

出0入0汤圆

发表于 2008-9-9 09:10:27 | 显示全部楼层
这样的帖子我喜欢  没理由不顶

出0入0汤圆

发表于 2008-9-9 09:28:38 | 显示全部楼层
谢谢,mark

出0入0汤圆

发表于 2008-9-9 09:42:12 | 显示全部楼层
biaoji

出0入0汤圆

发表于 2008-9-9 09:47:55 | 显示全部楼层
MARK!

出10入0汤圆

发表于 2008-9-9 10:34:20 | 显示全部楼层
典型的例子  
for ( int i=0; i<100000; i++);  
这个语句用来测试空循环的速度的  
但是编译器肯定要把它优化掉,根本就不执行  
如果你写成   
for ( volatile int i=0; i<100000; i++);  
它就会执行了

在KEIL C51上试了这段代码,不管有没有volatile 都是会执行这个循环的。

出0入0汤圆

发表于 2008-12-19 18:40:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-1-4 13:04:05 | 显示全部楼层
仔细学习了大家的讲解。非常感谢。&nbsp;&nbsp;还有一件疑惑:&nbsp;象下边这种volatile类型的结构体,在gcc中

到底如何实现的呢?&nbsp;引用这个变量的时候,编译器会懂得关闭中断吗?



typedef&nbsp;struct&nbsp;_UART_BUF_&nbsp;

{&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;counter;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;temp_buffer;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;uart_high;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;uart_low;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;int&nbsp;&nbsp;uart_data;&nbsp;

}uartbuf;&nbsp;

volatile&nbsp;uartbuf&nbsp;uartdatum;&nbsp;

出0入0汤圆

发表于 2009-1-4 13:35:23 | 显示全部楼层
#include&nbsp;&lt;avr/io.h>&nbsp;

#include&nbsp;&lt;avr/interrupt.h>&nbsp;



typedef&nbsp;struct&nbsp;_UART_BUF_&nbsp;

{&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;counter;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;temp_buffer;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;uart_high;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;uart_low;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;int&nbsp;&nbsp;uart_data;&nbsp;

}uartbuf;&nbsp;

volatile&nbsp;uartbuf&nbsp;u1;&nbsp;



int&nbsp;main(void)

{



PORTB|=(1&lt;&lt;PB2);

DDRB|=(1&lt;&lt;PB2);



TIFR|=(1&lt;&lt;OCF2)|(1&lt;&lt;TOV2);//定时器2,800毫秒

&nbsp;TCCR2&nbsp;=&nbsp;0x00;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;TCNT2&nbsp;=&nbsp;0x01;&nbsp;//

&nbsp;TIMSK&nbsp;=&nbsp;0x40;&nbsp;//

&nbsp;TCCR2&nbsp;=&nbsp;0x03;&nbsp;//





u1.uart_high=u1.uart_low=0;

sei();

while(1)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在下面这个计算过程中,有没有可能出现PB2=0的情况?编译器会不会编译出

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//一个附带的cli()?

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//上面的volatile能不能保护整个结构呢?怎样实现整个结构的updata同步呢?

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u1.temp_buffer=(unsigned&nbsp;char)(u1.uart_low+u1.uart_high);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(u1.temp_buffer==(u1.uart_low*2))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTB|=(1&lt;&lt;PB2);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTB&=~(1&lt;&lt;PB2);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

}





ISR(TIMER2_OVF_vect)

{

++u1.uart_low;

++u1.uart_high;

}





本贴被 ar3000a 编辑过,最后修改时间:2009-01-04,13:39:48.

出0入0汤圆

发表于 2009-1-4 13:46:18 | 显示全部楼层
编译出来了,结果很失望。

结论就是要注意自己添加cli();



&nbsp;(原文件名:vol.gif)&nbsp;

本贴被 ar3000a 编辑过,最后修改时间:2009-01-04,13:46:42.

出0入0汤圆

发表于 2009-1-4 13:51:08 | 显示全部楼层
&nbsp;最后改成这样:



#include&nbsp;&lt;avr/io.h>&nbsp;

#include&nbsp;&lt;avr/interrupt.h>&nbsp;

typedef&nbsp;struct&nbsp;_UART_BUF_&nbsp;

{&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;counter;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;temp_buffer;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;uart_high;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;uart_low;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;int&nbsp;&nbsp;uart_data;&nbsp;

}uartbuf;&nbsp;



volatile&nbsp;uartbuf&nbsp;u1;&nbsp;



int&nbsp;main(void)

{

unsigned&nbsp;char&nbsp;i,j;

PORTB|=(1&lt;&lt;PB2);

DDRB|=(1&lt;&lt;PB2);



TIFR|=(1&lt;&lt;OCF2)|(1&lt;&lt;TOV2);//定时器2,800毫秒

&nbsp;TCCR2&nbsp;=&nbsp;0x00;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;TCNT2&nbsp;=&nbsp;0x01;&nbsp;//

&nbsp;TIMSK&nbsp;=&nbsp;0x40;&nbsp;//

&nbsp;TCCR2&nbsp;=&nbsp;0x03;&nbsp;//



u1.uart_high=u1.uart_low=0;

sei();

while(1)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这么做好麻烦那,有什么办法让编译器自动完成?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cli();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=u1.uart_low;&nbsp;&nbsp;//关闭中断取数,防止意外更改

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j=u1.uart_high;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sei();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u1.temp_buffer=(unsigned&nbsp;char)(i+j);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(u1.temp_buffer==(i*2))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTB|=(1&lt;&lt;PB2);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTB&=~(1&lt;&lt;PB2);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

}

ISR(TIMER2_OVF_vect)

{

++u1.uart_low;

++u1.uart_high;

}

出0入0汤圆

发表于 2009-1-4 14:11:08 | 显示全部楼层
前面加了

#include&nbsp;&lt;util/atomic.h>



编译出来就是这样了:&nbsp;大家看看中断还能影响这个volatile吗?

&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main:

&nbsp;&nbsp;21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LFB7:

&nbsp;&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM1:

&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;prologue:&nbsp;function&nbsp;*/

&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;frame&nbsp;size&nbsp;=&nbsp;0&nbsp;*/

&nbsp;&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM2:

&nbsp;&nbsp;26&nbsp;0000&nbsp;C29A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbi&nbsp;56-32,2

&nbsp;&nbsp;27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM3:

&nbsp;&nbsp;28&nbsp;0002&nbsp;BA9A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbi&nbsp;55-32,2

&nbsp;&nbsp;29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM4:

&nbsp;&nbsp;30&nbsp;0004&nbsp;88B7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;r24,88-32

&nbsp;&nbsp;31&nbsp;0006&nbsp;806C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ori&nbsp;r24,lo8(-64)

&nbsp;&nbsp;32&nbsp;0008&nbsp;88BF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;88-32,r24

&nbsp;&nbsp;33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM5:

&nbsp;&nbsp;34&nbsp;000a&nbsp;15BC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;69-32,__zero_reg__

&nbsp;&nbsp;35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM6:

&nbsp;&nbsp;36&nbsp;000c&nbsp;81E0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldi&nbsp;r24,lo8(1)

&nbsp;&nbsp;37&nbsp;000e&nbsp;84BD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;68-32,r24

&nbsp;&nbsp;38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM7:

&nbsp;&nbsp;39&nbsp;0010&nbsp;80E4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldi&nbsp;r24,lo8(64)

&nbsp;&nbsp;40&nbsp;0012&nbsp;89BF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;89-32,r24

&nbsp;&nbsp;41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM8:

&nbsp;&nbsp;42&nbsp;0014&nbsp;83E0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldi&nbsp;r24,lo8(3)

&nbsp;&nbsp;43&nbsp;0016&nbsp;85BD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;69-32,r24

&nbsp;&nbsp;44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM9:

&nbsp;&nbsp;45&nbsp;0018&nbsp;1092&nbsp;0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sts&nbsp;u1+3,__zero_reg__

&nbsp;&nbsp;46&nbsp;001c&nbsp;8091&nbsp;0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lds&nbsp;r24,u1+3

&nbsp;&nbsp;47&nbsp;0020&nbsp;8093&nbsp;0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sts&nbsp;u1+2,r24

&nbsp;&nbsp;48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM10:

&nbsp;&nbsp;49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;#APP&nbsp;*/

&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;27&nbsp;"vol.c"&nbsp;1

&nbsp;&nbsp;51&nbsp;0024&nbsp;7894&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sei

&nbsp;&nbsp;52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;0&nbsp;""&nbsp;2

&nbsp;&nbsp;53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LVL0:

&nbsp;&nbsp;54&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;#NOAPP&nbsp;*/

&nbsp;&nbsp;55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.L5:

&nbsp;&nbsp;56&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LBB7:

&nbsp;&nbsp;57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LBB8:

&nbsp;&nbsp;58&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LBB9:

&nbsp;&nbsp;59&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM11:

&nbsp;&nbsp;60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;#APP&nbsp;*/

&nbsp;&nbsp;61&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;50&nbsp;"d:/winavr/lib/gcc/../../avr/include/util/atomic.h"&nbsp;1

&nbsp;&nbsp;62&nbsp;0026&nbsp;F894&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cli

&nbsp;&nbsp;63&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;0&nbsp;""&nbsp;2

&nbsp;&nbsp;64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;#NOAPP&nbsp;*/

&nbsp;&nbsp;65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LBE9:

&nbsp;&nbsp;66&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LBE8:

&nbsp;&nbsp;67&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM12:

&nbsp;&nbsp;68&nbsp;0028&nbsp;8091&nbsp;0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lds&nbsp;r24,u1+3

&nbsp;&nbsp;69&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LVL1:

&nbsp;&nbsp;70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM13:

&nbsp;&nbsp;71&nbsp;002c&nbsp;2091&nbsp;0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lds&nbsp;r18,u1+2

&nbsp;&nbsp;72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LVL2:

&nbsp;&nbsp;73&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LBB10:

&nbsp;&nbsp;74&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LBB11:

&nbsp;&nbsp;75&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM14:

&nbsp;&nbsp;76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;#APP&nbsp;*/

&nbsp;&nbsp;77&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;56&nbsp;"d:/winavr/lib/gcc/../../avr/include/util/atomic.h"&nbsp;1

&nbsp;&nbsp;78&nbsp;0030&nbsp;7894&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sei

&nbsp;&nbsp;79&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;0&nbsp;""&nbsp;2

&nbsp;&nbsp;80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM15:

&nbsp;&nbsp;81&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;#NOAPP&nbsp;*/

&nbsp;&nbsp;82&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LBE11:

&nbsp;&nbsp;83&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LBE10:

&nbsp;&nbsp;84&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LBE7:

&nbsp;&nbsp;85&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM16:

&nbsp;&nbsp;86&nbsp;0032&nbsp;280F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;r18,r24

&nbsp;&nbsp;87&nbsp;0034&nbsp;2093&nbsp;0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sts&nbsp;u1+1,r18

&nbsp;&nbsp;88&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM17:

&nbsp;&nbsp;89&nbsp;0038&nbsp;2091&nbsp;0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lds&nbsp;r18,u1+1

&nbsp;&nbsp;90&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LVL3:

&nbsp;&nbsp;91&nbsp;003c&nbsp;30E0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldi&nbsp;r19,lo8(0)

&nbsp;&nbsp;92&nbsp;003e&nbsp;90E0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldi&nbsp;r25,lo8(0)

&nbsp;&nbsp;93&nbsp;0040&nbsp;880F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lsl&nbsp;r24

&nbsp;&nbsp;94&nbsp;0042&nbsp;991F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rol&nbsp;r25

&nbsp;&nbsp;95&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LVL4:

&nbsp;&nbsp;96&nbsp;0044&nbsp;2817&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp&nbsp;r18,r24

&nbsp;&nbsp;97&nbsp;0046&nbsp;3907&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpc&nbsp;r19,r25

&nbsp;&nbsp;98&nbsp;0048&nbsp;01F4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;brne&nbsp;.L2

&nbsp;&nbsp;99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM18:

&nbsp;100&nbsp;004a&nbsp;C29A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbi&nbsp;56-32,2

&nbsp;101&nbsp;004c&nbsp;00C0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rjmp&nbsp;.L5

&nbsp;102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.L2:

&nbsp;103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LM19:

&nbsp;104&nbsp;004e&nbsp;C298&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cbi&nbsp;56-32,2

&nbsp;105&nbsp;0050&nbsp;00C0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rjmp&nbsp;.L5

&nbsp;106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.LFE7:

本贴被 ar3000a 编辑过,最后修改时间:2009-01-04,14:14:43.

出0入0汤圆

发表于 2009-1-4 14:47:26 | 显示全部楼层
  这不是编译器的错,因为编译器不知道你访问该结构体时中断是打开的还是关闭的,所以如果它不管三七二十一前面加上“关中断”、后面加上“开中断”,就有可能造成误开中断;而如果它不管三七二十一只在前面加上“关中断”却不在完成后开中断,就有可能造成误关中断;最后,如果编译器自作主张使用一个变量保存中断开关状态后关中断,在完成后再恢复保存的中断开关状态,那么它就“犯法”了,因为所有内存单元都是用户(程序员)的而不是编译器的,它没有权力占用任何程序员没有定义成变量的内存单元。所以对长数据访问的完整性应当由程序员来保证。

  不只是结构体有这个问题,任何“长数据”(超过CPU字长,无法用单条汇编指令完整访问)都存在这个问题;不只是在主程序和中断服务程序之间存在这个问题,中断服务程序与中断服务程序之间、多任务环境下的任务与任务之间都有这样的问题。

  这其实已经涉及到一个新的东西——临界区,论坛中有傻孩子的帖子对此进行了比较详细的论述,感兴趣的坛友可以搜出来看看。

出0入0汤圆

发表于 2009-1-4 15:23:10 | 显示全部楼层
eduhf_123&nbsp;经历&nbsp;讲得好!终于有了彻底的认识。



我又想到,上面那程序应该尽量做成这样:

#include&nbsp;&lt;avr/io.h>&nbsp;

#include&nbsp;&lt;avr/interrupt.h>&nbsp;

typedef&nbsp;struct&nbsp;_UART_BUF_&nbsp;

{&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;counter;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;temp_buffer;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;uart_high;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;char&nbsp;uart_low;&nbsp;

&nbsp;&nbsp;unsigned&nbsp;int&nbsp;&nbsp;uart_data;&nbsp;

}uartbuf;&nbsp;



volatile&nbsp;uartbuf&nbsp;u1;&nbsp;

volatile&nbsp;my_flag;&nbsp;&nbsp;//设定一个标志



int&nbsp;main(void)

{

unsigned&nbsp;char&nbsp;i,j;

PORTB|=(1&lt;&lt;PB2);

DDRB|=(1&lt;&lt;PB2);



TIFR|=(1&lt;&lt;OCF2)|(1&lt;&lt;TOV2);//定时器2,800毫秒

&nbsp;TCCR2&nbsp;=&nbsp;0x00;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;TCNT2&nbsp;=&nbsp;0x01;&nbsp;//

&nbsp;TIMSK&nbsp;=&nbsp;0x40;&nbsp;//

&nbsp;TCCR2&nbsp;=&nbsp;0x03;&nbsp;//



u1.uart_high=u1.uart_low=0;

sei();

while(1)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(my_flag==1)&nbsp;&nbsp;//把所有运算都放在主程序里

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my_flag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++u1.uart_low;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++u1.uart_high;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u1.temp_buffer=(unsigned&nbsp;char)(u1.uart_low+u1.uart_high);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(u1.temp_buffer==(u1.uart_low*2))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTB|=(1&lt;&lt;PB2);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTB&=~(1&lt;&lt;PB2);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

}

ISR(TIMER2_OVF_vect)

{

myflag=1;

}&nbsp;

出0入0汤圆

发表于 2009-1-4 16:27:58 | 显示全部楼层
对,不过这个时候u1就不需要声明成“volatile的”了。

而且,即使没有这个问题,通常也都建议把运算等放在主程序中,让中断服务程序尽快结束退出。

出0入0汤圆

发表于 2009-1-4 20:59:58 | 显示全部楼层
学习了,

出0入0汤圆

发表于 2009-1-9 17:45:12 | 显示全部楼层
终于明白我优化就不运行的问题了。。。MARK!!!

出675入8汤圆

发表于 2009-1-10 15:04:38 | 显示全部楼层
看的帖子越多就越发发现自己的无知

出0入0汤圆

发表于 2009-1-11 16:26:37 | 显示全部楼层
又了解了volatile的用法。好好学习!

出0入0汤圆

发表于 2009-1-11 16:57:00 | 显示全部楼层
我从来就没有这样写过,不过程序也可以运行,不过我从来就没有开过优化!

出0入0汤圆

发表于 2009-1-11 17:35:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-1-11 19:19:05 | 显示全部楼层
当初查过他的用法,记住了一句话:“可变,不优化。”

出0入0汤圆

发表于 2009-1-12 10:58:29 | 显示全部楼层
收教了!&nbsp;

出0入0汤圆

发表于 2009-1-14 17:57:39 | 显示全部楼层
学习

出0入0汤圆

发表于 2009-3-1 20:48:55 | 显示全部楼层
防优化
中断里修改的全局变量 必须加。。。

出0入0汤圆

发表于 2009-4-18 16:42:14 | 显示全部楼层
受教了

出0入0汤圆

发表于 2009-4-18 18:47:11 | 显示全部楼层
C语言特色,呵呵
别的语言没这个的~例如Pascal,由编译器自行识别处理

出0入0汤圆

发表于 2009-4-18 22:36:17 | 显示全部楼层

出0入0汤圆

发表于 2009-4-18 23:24:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-4-19 20:53:30 | 显示全部楼层
交流然后知不足  学习了

出0入0汤圆

发表于 2009-4-21 18:10:58 | 显示全部楼层
不错,在我解决问题 后才看到啊!!!!!

出0入0汤圆

发表于 2009-7-11 20:42:04 | 显示全部楼层
顶!!!

出0入0汤圆

发表于 2009-7-11 20:42:09 | 显示全部楼层
顶!!!

出0入0汤圆

发表于 2009-7-11 21:04:58 | 显示全部楼层
MARK

出0入10汤圆

发表于 2009-7-12 00:04:10 | 显示全部楼层
顶个

出0入0汤圆

发表于 2009-7-12 17:30:27 | 显示全部楼层
mark!

出0入0汤圆

发表于 2009-7-13 14:51:49 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-7-13 16:05:29 | 显示全部楼层
很好

出0入0汤圆

发表于 2009-7-13 16:49:21 | 显示全部楼层
终于知道volatile的用法了 顶!!

出0入0汤圆

发表于 2009-7-13 16:56:48 | 显示全部楼层
看过几次了,还是不能记住

出0入0汤圆

发表于 2009-7-14 09:01:56 | 显示全部楼层
的确是不错的帖子,学习了!

出0入0汤圆

发表于 2009-7-14 21:41:03 | 显示全部楼层
看了,受益匪浅!终于知道了为什么选择最大优化后程序就跑错的原因了

出0入0汤圆

发表于 2009-7-14 21:50:17 | 显示全部楼层
看过一次,再看一次

出0入0汤圆

发表于 2009-7-14 21:55:31 | 显示全部楼层
看了,受益匪浅

出0入0汤圆

发表于 2009-9-26 11:06:23 | 显示全部楼层
学到了 ,要顶啊 !!!quben 去笨 是牛人

出0入0汤圆

发表于 2009-9-26 12:40:04 | 显示全部楼层
Orz~

出0入0汤圆

发表于 2009-9-28 09:08:42 | 显示全部楼层
好贴,去面试嵌入式软件可定问到的问题,呵呵

出0入0汤圆

发表于 2009-9-28 09:42:29 | 显示全部楼层
ding
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 14:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表