求助avr单片机子程序问题

 我来答
DoramiHe
2018-03-30 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25335 获赞数:59533
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
你这个问题其实和AVR单片机没关系,任何一个MCU都可以采用类似的代码。
在C语言里,有值传递这个概念,这是因为编译器会优化程序,为变量做一个拷贝值。这样呢,cpu在计算这个值时,直接去取拷贝值,而不用去计算这个值的地址,然后寻址,再去取这个值,从而节省了一定的指令周期。但是,有一个隐患,这个变量的拷贝值和这个变量的真实值不一定是一样的。比如,当中断发生时,cpu会将所有变量入栈去执行中断服务子程序,然后返回到主程序。在这个过程中,如果中断服务子程序修改了某个公共变量,主程序是不知道的,因为主程序会调用入栈前的拷贝值。
volatile就是告诉编译器,不要优化,不要拷贝,而是让cpu寻址取值。
FLAG是一个全军变量,它既在主程序中使用,又在串口接收中断服务程序中使用,所以要用volatile修饰,告诉cpu取真实值
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式