c - 预定义条件仅在第一次计算

标签 c gpio

我已经实现了一个函数,该函数必须在按下并释放按钮时执行操作。

void debouncedAction(bool condition, void (* action)()) {
    if(condition) {
        HAL_Delay(DEBOUNCE_TIME);
        if(condition) {
            while(condition) {
            }
            action();
        }
    }
}

预定义条件是

#define BTN_PUSHED              (HAL_GPIO_ReadPin(BTN_PORT, BTN_PIN) == GPIO_PIN_SET)

在调试时我发现条件并不是每次都计算(正如我所想的那样),而是只在第一次调用时计算。因此while循环变为无限。哪里出错了?

最佳答案

“错误”是调用函数时使用的表达式只计算一次,并且该表达式的结果作为参数值传递。这就是按值传递的工作方式,它传递单个值。

如果你想在一个函数中多次调用一个表达式,你应该使条件成为一个指向可以调用的函数的指针,比如你的action参数。

关于c - 预定义条件仅在第一次计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34672254/

相关文章:

c - c 中 fgets 使用错误

python - 尝试使用 nodejs lib gpIO 控制移位寄存器在树莓派上不起作用

android - 更改树莓派 3 上串口的波特率

python - 如何从另一台计算机上的另一个 Python 程序连接到 Python 程序?

c - 如何反转十六进制数的字节?

c++ - gcc 为不同路径的相同代码库生成的二进制文件的差异

c - 在允许输入之前循环在输入后运行多次

c - 在 Brainf*ck 中处理循环

linux - DeviceTree 中的命名 GPIO

Python:几秒钟后将 bool 值从 True 更改为 False