Pergunta

Em um pequeno projeto de sistemas embarcados temos algum código que gostaria de executar em uma thread por isso estamos optando por construir em cima de um RTOS embutidos (ECOS).

Anteriormente, nós usamos um executivo cíclico no main () que levou tarefas cada implementados como uma máquina de estado. Para algumas tarefas encontramos problemas onde a tarefa seria precisam ser dividido em muitos estados de granulação fina, tornando o código extra complexa.

Ao mudar para um RTOS encontramos o uso de memória para a pilha de cada thread acrescenta-se rapidamente se dar a cada tarefa separada que é próprio segmento. (Temos apenas 64k e precisam da memória para os nossos buffers de comunicação)

Estamos pensando em usar um piso para a nossa tarefa comunicações e um outro segmento para um executivo cíclica. O executivo cíclico irá conduzir as outras tarefas lógicas.

Faz sentido para misturar um RTOS e executivo-cíclica assim?

Foi útil?

Solução

Este é um projeto perfeitamente válida.
Em uma de nosso produto, foi utilizado um desenho semelhante, onde os canais E / S assíncrona (TCP / IP, 2 córregos de série) estavam em suas próprias tarefas e tivemos uma tarefa "principal", que seria responsável por várias áreas de funcionalidade .

Pense em tarefas como simplesmente um mecanismo de particionamento que lhe permite simplificar o seu design.

Outras dicas

Sim, ter um executivo cíclica em um segmento OS a execução de múltiplas tarefas '' pode fazer sentido. Na verdade, a menos que duas tarefas conflito com as necessidades de programação (Um precisa de bloco, é uma prioridade mais elevada do que o outro e aquele de baixa prioridade leva um longo tempo para executar, etc.), eu recomendo colocá-los no mesmo segmento.

Isto é especialmente verdadeiro no caso em que você estiver usando uma leve RTOS sem proteção de memória: segmentos separados não são mais seguros do que um thread (nenhuma proteção MMU de espaços de endereços), na verdade, eles são potencialmente mais perigoso devido à necessidade maior para a proteção de simultaneidade. Mesmo que o seu esquema IPC é robusto e não suscetíveis ao mau uso por programadores, é sobrecarga é geralmente não-zero, evitando assim a necessidade de que pode resultar em ganhos de desempenho.

Se você olhada FreeRTOS , eles realmente executar outro programador em uma tarefa, uma espécie de: )

E a ecoar outros, nada soa errado no design. Nenhuma razão (algumas das) suas tarefas não podem ser máquinas de estado, se há um caminho claro para expressar algo assim.

É um projeto válido, mas eu acho que eu perdi a razão para ter o sistema operacional em tudo.

Quais as facilidades do sistema operacional que você está planejando usar?

A partir das informações disponíveis, parece que você vai acabar se movendo a complexidade das tarefas a seu novo loop principal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top