我有一个简单的 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/