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

Contiki OS loops too fast to print result?

在我的一个 Contiki 应用程序中,我从进程 (P) 调用某个函数 (f)。 (P) 中的 'printf' 在循环中至少有一个 'printf' 驻留在 (f) 中时正确显示结果。但是,当同一个循环中没有 '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(...));
....
}

谢谢, 阿维吉特

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

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

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

由于发布的代码(可能还有您的实际代码)显示未定义的行为,因此代码的任何重新排列 can/will 都会产生不同的效果。在您的情况下,adding/removing 对 printf() 的调用显示了观察到的效果。