Потоки, созданные с помощью PTHREAD_SCOPE_PROCESS
, будут использовать один и тот же поток ядра (http://lists.freebsd.org/pipermail/freebsd-threads/2006-August/003674.html)
Однако SCHED_RR должен запускаться под привилегированным пользователем процессом.
По-круговой;Потоки, чья область конкуренции является системной (PTHREAD_SCOPE_SYSTEM), находятся в классе планирования в реальном времени (RT), если вызывающий процесс имеет эффективный идентификатор пользователя 0. Эти потоки, если они не прерваны потоком с более высоким приоритетом, и если они не дают илиблок, будет выполняться в течение периода времени, определенного системой. SCHED_RR для потоков, которые имеют конфликтную область процесса (PTHREAD_SCOPE_PROCESS) или чей вызывающий процесс не имеет эффективного идентификатора пользователя, равного 0, основан на классе планирования TS.
ОднакоИсходя из вашей связанной проблемы, я думаю, что вы столкнулись с более глубокой проблемой.Вы пытались настроить свое ядро, чтобы оно было более «приоритетным»?Preemption должен позволять ядру принудительно планировать запуск вашего процесса, что позволяет более оперативно запускать некоторые части ядра.Это не должно влиять на IRQ, может быть, что-то отключило ваши IRQ?
Еще одна вещь, о которой я думаю, - возможно, вы не получаете данные SPI достаточно быстро, и буфер для ваших данных в ядре становится полным иотсюда потеря данных.Попробуйте также увеличить эти буферы.