我有一个main函数,它在初始化期间运行一些函数,然后运行一个while循环,等待来自UART的命令。
当我看到一个特定的命令(让我们说重置)时,我调用一个返回值的函数。我想做以下事情:
我是C的新手,我无法找出一种在main中保存变量值的方法。
答案 0 :(得分:5)
我理解的方式,你基本上有以下设置:
int main(int argc, char *argv[]) {
int value = something_from_last_reset;
perform_initialization(value);
while(1) {
int next_command = wait_for_command();
if(next_command == RESET_COMMAND) {
value = get_value();
// somehow restart main() with this new value
}
}
return 0;
}
以下是您可以采取的一种方法:
// global
int value = some_initial_value;
void event_loop() {
while(1) {
int next_command = wait_for_command();
if(next_command == RESET_COMMAND) {
value = get_value();
return; // break out of the function call
}
}
}
int main(int argc, char *argv[]) {
while(1) {
perform_initialization(value);
event_loop();
}
return 0;
}
这实质上允许您从事件循环中“转义”并重新执行初始化。
答案 1 :(得分:2)
只需将main
打包到无限循环中。
int main(void)
{
int init_val = 0;
while (1)
{
// your code ...
init_val = some_function();
}
}
答案 2 :(得分:2)
理论上这是可能的,但它有点打破范式,重复调用函数而不让它完成并返回将很快填满你的调用堆栈,除非你采取措施在编译器后面解开它背部。
更常见的解决方案是将main()函数编写为一个巨大的无限{1}循环。你可以在一个内在循环或其他任何东西中完成你的所有操作,并且有条款,如果你得到你想要的新值,你可以掉到底部并循环回来,有效地重新运行 的主体>主要与新州。