No meu dispositivo embarcado absorvo comportamento estranho com o protocolo que usamos, as vezes demora um pouco para enviar os dados via dispositivo serial usando FIFO.
Minha suspeita é que o Linux não é um sistema operacional em tempo real e por que eles têm essa função emulada em tempo real, como pthread_setschedparam ? e ter essa prioridade na fila fazendo com que outro processo falhe devido a que leva muito tempo para detectar o dispositivo escravo.
Eu só quero saber se é aconselhável usar param.sched_priority = 40; em Linux? Tentei ajustar esse parâmetro mas o problema é bem difícil de reproduzir isso acontece em campo.
Este é o código
if (1)
{
int policy;
int r;
struct sched_param param;
policy = SCHED_FIFO;
param.sched_priority = 40;
r = pthread_setschedparam(cc_state->ser_thread, policy, ¶m);
printf("%s: pthread_setschedparam %d", __func__, r);
}
O tempo real do Linux não é uma emulação, existem chamadas de sistema que afetam o agendamento. Veja
man sched(7)
. Não está claro na sua pergunta o que você está tentando fazer e qual é o seu problema exato. O valor desched_priority
é relevante apenas em relação às prioridades de outros threads. Por exemplo, se houver apenas uma thread com prioridade > 0, não importa se a prioridade é 1 ou 40; um valor mais alto não dará "impulso" extra ao segmento. Você terá que determinar a prioridade relativa exigida por seus encadeamentos e atribuir-lhes valores de prioridade de acordo.Observe que não há quantum de tempo associado a
SCHED_FIFO
threads. UmSCHED_FIFO
encadeamento é executado até que um dos seguintes ocorra: o encadeamento é bloqueado porque está aguardando E/S, um encadeamento de prioridade mais alta está pronto para ser executado ou o encadeamento cede voluntariamente o processador. Você terá que levar isso em consideração se tiver vários threads com prioridade igual, caso contrário, um thread pode monopolizar a CPU dos outros threads. Em uma máquina multiprocessador, vários threads podem, obviamente, estar sendo executados simultaneamente, cada um em sua própria CPU.