C文件 block ..如何知道它?

标签 c

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

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

现在我的问题是我发现有时(不知道为什么......)一个或多个线程停止工作。它们不会崩溃,只是停下来。我此时发现在客户端进程列表中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;
}

最佳答案

正如 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
    }
}

关于C文件 block ..如何知道它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37462502/

相关文章:

c - 解析一个缓冲区会影响另一个缓冲区吗?

c - 如何在 zlib CRC32 中正确使用无进位乘法程序集 (PCLMULQDQ)?

c - Windows : preventing assert() failures from opening the debug popup

c - "statically allocated"在 libc 中到底意味着什么?每个库实例一个?每个程序实例一个?

c - 如何生成 256 位掩码

c - malloc : is first 'out of bounds' value always NULL/0? 的行为

c - [C 编程] vector 和指针

c - 使用 JSON-C 解析的字符串的最大大小

c++ - 无法访问 C 中的#defined 常量

关于 posix 管道与内核 fd 表的混淆