一. usleep 是否精确

    ioctl 和 netlink 两种通信方式,最大的区别在于后者的实时通知机制(软中断实现)。但如果 usleep 足够精确,前者也能做到准实时。但是测试结果不理想。

for (i = 0; i < 10000; i++) {    gettimeofday(&timeval1, NULL);    usleep(1);    gettimeofday(&timeval2, NULL);    if (timeval1.tv_sec == timeval2.tv_sec) {        dbg_cputickes = (int)(timeval2.tv_usec - timeval1.tv_usec);    }    if (dbg_cputickes > max) {        max = dbg_cputickes;    }    if (dbg_cputickes < min) {        min = dbg_cputickes;    }

    运行多次,min 的范围在 3-4,max 在 60-70。(gettimeofday() 本身的耗时在 1us 左右)

    结论:usleep 波动范围较大,无法保证精确的延时。