Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么ppoll()不等待我在Android Pie中的延迟?_Android_Linux_Linux Kernel_Embedded_Gpio - Fatal编程技术网

为什么ppoll()不等待我在Android Pie中的延迟?

为什么ppoll()不等待我在Android Pie中的延迟?,android,linux,linux-kernel,embedded,gpio,Android,Linux,Linux Kernel,Embedded,Gpio,我了解到,检查GPIO中断的循环(本应在~100 usec时循环)实际上是每3 usec循环一次。原因是我给GPIO事件等待例程的timespec不起作用。等待立即超时 (请注意,我删除了额外的代码、错误处理和循环中典型的其他功能,如如何退出循环) 我试图通过使用多种方法来解决无法正确等待的问题。 增加usleep(1);到for循环不起作用。实际的睡眠时间是30到40毫秒,这对我们的司机来说太长了。这并不奇怪,因为这不是一个实时操作系统 我尝试将timeSpec更改为绝对时间而不是相对时间。例

我了解到,检查GPIO中断的循环(本应在~100 usec时循环)实际上是每3 usec循环一次。原因是我给GPIO事件等待例程的timespec不起作用。等待立即超时

(请注意,我删除了额外的代码、错误处理和循环中典型的其他功能,如如何退出循环)

我试图通过使用多种方法来解决无法正确等待的问题。 增加usleep(1);到for循环不起作用。实际的睡眠时间是30到40毫秒,这对我们的司机来说太长了。这并不奇怪,因为这不是一个实时操作系统

我尝试将timeSpec更改为绝对时间而不是相对时间。例如,我尝试根据实时时钟创建自己的等待

struct timespec timeToWait;

   clock_gettime(CLOCK_REALTIME, &timeToWait);

   timeToWait.tv_nsec += 10000000UL;

    result = gpiod_line_event_wait(pGpioLine, &timeToWait);

这不起作用,我最终得出结论,timespec应该与这个gpiodapi相对。(API实际上是ppoll())

此处的关键是
pGpioLine
的有效性,但您没有包括分配该值或检查其有效性的代码。此处的关键是
pGpioLine
的有效性,但您没有包括分配该值或检查其有效性的代码。
struct timespec timeToWait;

   clock_gettime(CLOCK_REALTIME, &timeToWait);

   timeToWait.tv_nsec += 10000000UL;

    result = gpiod_line_event_wait(pGpioLine, &timeToWait);