一. 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 波動範圍較大,無法保證精確的延時。