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