C文件块..怎么知道呢?

时间:2016-05-26 13:37:24

标签: c

我有一个简单的C文件,由java应用程序启动。

此脚本管理物理传感器以检测距离。对于每个客户,我有多个传感器。访问C文件的每个Object都在一个充满活力的线程上运行。所以基本上在启动时,应用程序会为每个传感器创建一个线程。

现在我的问题是我发现有时候(不知道为什么......)一个或多个线程停止工作。他们不会崩溃,他们只是停下来。我发现在这个时刻,在客户端进程列表中,C文件从很长时间开始执行(通常持续2秒......)。所以我认为问题在于C可执行文件。我不知道怎么检查它阻塞的地方......我在等待信号的时候设置了if条件,但它不在那里..

这是脚本

#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;
}

1 个答案:

答案 0 :(得分: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
    }
}