单片机/MCUwilliam hill官网
直播中

kevin

13年用户 290经验值
私信 关注
[问答]

avr单片机中断函数无法调用全局变量

   我用的单片机是atmeg16  我在定时器的溢出中断函数中使用了一个主函数的全局变量,结果发现在中断函数里这个全局变量一直是不变(好像一直是0),不是主函数中所赋的值,这是怎么回事?   中断函数应该没用问题,因为我在中断函数里把这个全局变量换成常量是正常的。

回帖(6)

houjue

2016-11-7 20:03:21
      全局变量一旦定义是不能改变的!局部变量可以!且这个定义在所有的单片机里都是通用的。
举报

kevin

2016-11-7 20:07:26
引用: houjue 发表于 2016-11-7 20:03
全局变量一旦定义是不能改变的!局部变量可以!且这个定义在所有的单片机里都是通用的。

不能改变的是什么意思? 全局变量值不能被改变吗? 那不就是常量了
举报

houjue

2016-11-7 20:41:50
引用: 辉仔 发表于 2016-11-7 20:07
不能改变的是什么意思? 全局变量值不能被改变吗? 那不就是常量了

对,就是常量。我以为你知道故没过多的解释。
举报

wolf11111

2016-11-8 09:55:35
在定义全局变量时如果在中断中想调用,需要在定义时加volatile 例如:volatile unsigned char a=0;
举报

kevin

2016-11-8 18:54:26
问题解决了,是因为我又定义了一个名称一样的局部变量
举报

houjue

2016-11-10 02:58:27
引用: 辉仔 发表于 2016-11-8 18:54
问题解决了,是因为我又定义了一个名称一样的局部变量

局部变量和全局变量的概念是不同的好吧?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分