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

时间:2015-10-20 17:42:01

标签: c loops contiki

在我的一个Contiki应用程序中,我从PROCESS(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(...));
....
}

谢谢你, Avijit

1 个答案:

答案 0 :(得分:2)

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

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

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

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