全局变量中断原子操作_单片机中,中断服务函数和其它外部程序能不能共同改变全局变量?...

特邀~

简单说下吧,这里题主需要弄明白两个问题,第一个,为什么要使用全局变量。第二个,volatile的作用是什么。

首先,为什么要使用全局变量,类似这样的一个中断函数,大多出现在定时器或者计数器中,用于计算一段时间或者计算脉冲的数量,那么局部局部变量肯定不行的。每次进中断函数的时候,都会有入栈和出栈的过程,这里不需要深究,只需要知道,如果你在中断函数,或者你自己定的任何一个函数里面,使用的变量,在不用static修饰的前提下,调用该函数的时候,这些变量都会初始化的,具体会初始化为0还是一个随机值,看编译器吧,我也没有深究过。所以,这里中断函数用的变量肯定是全局变量,本身是没有问题的。

然后,第二个问题,之前说了,每一个函数调用的时候,都是有入栈出栈的过程的。现在编译器都十分智能,但是智能的有些过头了,会优化掉很多有用的东西。volatile在这里的作用,说白了,就是不让编译器优化这个变量,凡是涉及这个变量读取的操作,都从相应的寄存器里面读,防止出现错误。你的同事说的没有问题。

一般凡是存储器映射的硬件寄存器,中断服务程序中修改的供其它程序检测的变量都是需要加volatile修饰的,建议题主看看那本叫程序员面试宝典的书,好像有提及这些问题。

纯手打,如有误,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值