在Android中执行schedule()时,如何始终调用进程?

在Android中执行schedule()时,如何始终调用进程?,android,linux,schedule,Android,Linux,Schedule,我的平台是Android,我的代码是一个运行在用户空间的C程序。该程序将读取spi数据,该数据具有相应的spi内核驱动程序。 在驱动程序中,它生成一个内核线程,该线程运行一个while(1)循环,如下所示 while(1) { spi_sync(); // read 5KB data write_data_to_ram(); msleep(4); } 我的系统HZ=1000,这意味着schedule()每1ms发生一次。正如我们用示波器测量的那样,while(1)循环

我的平台是Android,我的代码是一个运行在用户空间的C程序。该程序将读取spi数据,该数据具有相应的spi内核驱动程序。 在驱动程序中,它生成一个内核线程,该线程运行一个while(1)循环,如下所示

while(1)
{
    spi_sync();  // read 5KB data
    write_data_to_ram();
    msleep(4);
}
我的系统HZ=1000,这意味着schedule()每1ms发生一次。正如我们用示波器测量的那样,while(1)循环大约每10毫秒运行一次(spi_sync()和写入数据_到_ram()的时间为6毫秒),我们希望它总是这样

但事实上,有时(很少)循环会运行20毫秒甚至100毫秒。这意味着当schedule()发生时,我们的进程不会被调用

我使用nice(-20)函数和sched_setscheduler(0,sched_FIFO,¶m)使我的进程成为RT进程,并拥有最差的nice值。那么理论上我的进程应该在schedule()发生时首先被调用,对吗?但它仍将运行100毫秒长,尽管很少。 为什么?

是否可以使我的进程始终被调用为10毫秒长?或者换句话说,每10毫秒schedule()发生时,我的进程将首先被调用,如何调用