一. 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 波动范围较大,无法保证精确的延时。