gpt4 book ai didi

Contiki OS 循环太快无法打印结果?

转载 作者:太空宇宙 更新时间:2023-11-04 08:21:27 24 4
gpt4 key购买 nike

在我的一个 Contiki 应用程序中,我从进程 (P) 调用某个函数 (f)。当驻留在 (f) 中的循环中至少有一个 'printf' 时,(P) 中的 'printf' 会正确显示结果。然而,当同一个循环中没有'printf' 时,结果为空。 谁能帮我理解为什么用 printf 调用延迟循环会显示结果,以及为什么没有这个特定调用就不会显示结果。

    **CODE:**
function_f(...){
....
....
char res1[LEN];
....
for(i=LEN-1;i>1;i--){
....addition operations...

if(temp > 9 && (i-1) > 0){

...division operation...
...addition and remainder operation...

}else{

....addition....
....assignment....

}

}
return res1
}


PROCESS_THREAD(...){
....
**printf**("\nResult: %s", function_f(...));
....
}

谢谢,阿维 git

最佳答案

关于这一行:return res1 res1 将是指向位于堆栈上的数组的指针。当函数退出时,如果指针 res1 被取消引用,则堆栈上的值“超出范围”会导致未定义的行为。一种可能的解决方法:

char * res1 = NULL; 
res1 = malloc(LEN);
if(NULL == res1)
{ // handle error }
else ....

当然,那么调用者需要将res1传递给free()

由于发布的代码(可能还有您的实际代码)显示未定义的行为,因此对代码的任何重新安排都可能/将导致不同的效果。在您的情况下,添加/删除对 printf() 的调用显示了观察到的效果。

关于Contiki OS 循环太快无法打印结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33243304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com