Linux的任务调度的时间精度是在10ms左右,要1ms的精度通常是不可能的。
如果要用Linux做实时任务,一般的做法是:
1. 独立出一些CPU核,这要修改grub启动参数。这些被独立出的核一般的进程不能使用。
2. 有实时任务的进程,绑定到这样的独立核(sched_setaffinity)。如果该进程还有子进程
或子线程,每个子进程或子线程要绑定到不同的独立核,保证每个独立核上只有一个进程或
线程。
3. 设定任务的scheduler为实时(sched_setscheduler)。
4. 需要等待1ms时,不要用sleep/usleep/nanosleep,而是不停循环来判断有没有到预定时间。
以上除了第4项简单一点,都比较麻烦且坑比较多,我只是参与过项目也说不了很细。
另外,既然有实时性的需求,还是推荐换个实时操作系统,用合适的工具才能事半功倍。
【 在 wjhtingerx 的大作中提到: 】
: rt
--
FROM 58.33.81.*