2015-10-20 5 views
0

В одном из моих приложений Contiki я вызываю определенную функцию (f) из PROCESS (P). «Printf» в (P) отображает результат правильно, когда по крайней мере один «printf» находится в цикле, находящемся в (f). Однако, когда в этом же цикле нет «printf», результат будет пустым. Может ли кто-нибудь помочь мне понять, почему задержка цикла вызовом printf отображает результат и почему он не отображается без этого конкретного вызова.Contiki OS слишком быстро выводит результат печати?

**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

+0

, пожалуйста, напишите минимальный код, который полностью компилируется и демонстрирует проблему. по крайней мере, опубликуйте соответствующие инструкции printf() – user3629249

+0

Строка формата printf() заканчивается на '\ n'? вы пытались использовать 'fflush (stdout) '? скорее всего, вывод printf() не отображается из-за буферизации системы вывода. – user3629249

+0

Я не думаю, что fflush stdout работает для встроенных систем, таких как узлы датчиков – aviian7

ответ

2

относительно этой линии: возвращение res1 в res1 будет указатель на массив, который находится в стеке. Когда функция выходит, значения в стеке «выходят из области видимости», что приводит к неопределенному поведению, если указатель res1 отменяется. Одно из возможных решений:

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

Конечно, то абонент должен передать res1 на свободный()

С отправленного кода (и, вероятно, ваш фактический код) показывает неопределенное поведение, любое повторное Arrangment из код может/приведет к различным эффектам. В вашем случае добавление/удаление вызова printf() показывает наблюдаемые эффекты.