2016-05-26 5 views
0

私は、Javaアプリケーションによって起動される単純なCファイルを持っています。Cファイルブロック..どのようにそれを知っている?

このスクリプトは、距離を検出するための物理センサーを管理します。すべてのクライアントについて、私は複数のセンサーを持っています。 Cファイルにアクセスするすべてのオブジェクトは、精巧なスレッドで実行されます。基本的に、起動時に、アプリケーションはセンサーごとに1つのスレッドを作成します。

私の問題は、時には(理由を知らない...)スレッドの1つ以上が動作を停止することが判明したことです。彼らはクラッシュしない、彼らは単に停止します。私はこの瞬間に、クライアントプロセスリストでCファイルが長い時間(通常は2秒間続く...)実行されていることを発見しました。だから問題はCの実行可能ファイルにあると思う。

この

#include <stdio.h> 
#include <stdlib.h> 
#include <wiringPi.h> 

int main(int argc, char **argv) 
{ 
    int TRIG = atoi(argv[1]); 
    int ECHO = atoi(argv[2]); 

    wiringPiSetup(); 
    pinMode(TRIG, OUTPUT); 
    pinMode(ECHO, INPUT); 

    int a; 
    int totalDistance; 
    int steps = 10; 
    long travelTime; 
    for (a = 0; a < steps; a = a + 1){ 
     digitalWrite(TRIG, LOW); 
     delay(100); 
     // Send trig pulse 
     digitalWrite(TRIG, HIGH); 
     delayMicroseconds(10); 
     digitalWrite(TRIG, LOW); 

     // Wait for echo start 
     while (digitalRead(ECHO) == LOW); 

     // Wait for echo end 
     long startTime = micros(); 
     while (digitalRead(ECHO) == HIGH) { 
      travelTime = micros() - startTime; 
      if (travelTime > 25000) { 
       travelTime = 25000; 
       break; 
      } 
     } 
     printf("tempo: %d", travelTime); 
     // Get distance in cm 
     int distance = travelTime/58; 
     totalDistance = totalDistance + distance; 
     delay(100); 
    } 
    int meanDistance = totalDistance/steps; 
    printf("%d", meanDistance); 

    return 0; 
} 
+0

フォーマット、フォーマット、フォーマット... –

+0

フォーマットはどのようにブロックの責任を負うことができますか?実際のスクリプトでは、Javaアプリケーションでインポートするため、 'printf("%d "、meanDistance);'(int)を出力します。 – besmart

+2

コードはコードの読みやすさと潜在的に可能な人が読む意志がありますあなたを援助する。 –

答えて

0

としてynimousスクリプトです..私はそれのブロックが...私は信号待ちの時間であれば条件を置く場所を確認する方法を知りませんが、それはありません提案され、あなたはそれがなかったすべては、少なくともあなたが言うことができるでしょう、エラーメッセージを印刷した場合であってもライン

while (digitalRead(ECHO) == LOW); 

にタイムアウトを入れてみてください。このようなもの:

long lowStartTime = micros(); 
while (digitalRead(ECHO) == LOW) { 
    if (micros() - startTime > 100000) { // or some reasonable value 
     printf("error: echo timed out!"); 
     break; // and handle error appropriately 
    } 
} 
関連する問題