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() 的调用显示了观察到的效果。
在我的一个 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() 的调用显示了观察到的效果。