特邀~
简单说下吧,这里题主需要弄明白两个问题,第一个,为什么要使用全局变量。第二个,volatile的作用是什么。
首先,为什么要使用全局变量,类似这样的一个中断函数,大多出现在定时器或者计数器中,用于计算一段时间或者计算脉冲的数量,那么局部局部变量肯定不行的。每次进中断函数的时候,都会有入栈和出栈的过程,这里不需要深究,只需要知道,如果你在中断函数,或者你自己定的任何一个函数里面,使用的变量,在不用static修饰的前提下,调用该函数的时候,这些变量都会初始化的,具体会初始化为0还是一个随机值,看编译器吧,我也没有深究过。所以,这里中断函数用的变量肯定是全局变量,本身是没有问题的。
然后,第二个问题,之前说了,每一个函数调用的时候,都是有入栈出栈的过程的。现在编译器都十分智能,但是智能的有些过头了,会优化掉很多有用的东西。volatile在这里的作用,说白了,就是不让编译器优化这个变量,凡是涉及这个变量读取的操作,都从相应的寄存器里面读,防止出现错误。你的同事说的没有问题。
一般凡是存储器映射的硬件寄存器,中断服务程序中修改的供其它程序检测的变量都是需要加volatile修饰的,建议题主看看那本叫程序员面试宝典的书,好像有提及这些问题。
纯手打,如有误,欢迎指正。