如何在中断中处理全局变量

How to handle global variables in interrupts

我是嵌入式系统的新手。对于我的最终学位项目,我正在开发一个使用 STM NUCLEO 板和 STM32F411RE 微控制器的系统。

此外,我正在使用 stmcube32 加载初始化代码。

此时我被卡住了,但首先让我向您解释一下背景知识:

那么,我的问题是什么?调试的时候发现程序卡在上面函数里面的第一个语句while (boton_Flag != 2);.

它应该留在那里,直到我按下 BOTON2 将标志更改为值 2,这样程序就会保持 运行。但是,当我按下按钮时,尽管程序跳转到中断并更改了值,但当它 returns 到函数时,值再次为 0(其初始化值)。

我的结论可能是错误的,我没有正确地将变量传递给函数,程序将其解释为函数内部的局部变量,但我一点也不确定。

希望得到尽可能详细的解释,如果没有,请告诉我。

你是对的,你没有正确传递变量。按照你的方式,当函数被调用时,你创建一个局部变量(函数的局部变量)并为其分配全局 boton_flag 的值。

您可以通过两种方式解决此问题:
1.函数中使用全局变量即可。如果它已经是全局的,则无需将其传递给您的函数。
2. 通过引用传递boton_flag。即 numeroJugadores(&boton_Flag);。如果你这样做,你将有一个指向 boton_flag 的指针,它稍微改变了 numeroJugadores 中的代码(你每次使用它时都必须取消引用 boton_flag)。