我已经实现了一个函数,该函数必须在按下并释放按钮时执行操作。
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/