Para um MCU de metal descoberto, comparando o código caseiro com loop de segundo plano e arquitetura de interrupção de timer, quais são os benefícios de um sistema operacional não-preventivo? Quais desses benefícios são atraentes o suficiente para um projeto adotar um sistema operacional não preventivo, em vez de usar código caseiro com arquitetura de loop em segundo plano?
.
Explicação da pergunta:
Eu realmente aprecio todos os que responderam à minha pergunta. Eu sinto que a resposta está quase lá. Acrescento esta explicação à minha pergunta aqui, que mostra minha própria consideração e pode ajudar a restringir a questão ou torná-la mais precisa.
O que estou tentando fazer é entender como escolher o RTOS mais apropriado para um projeto em geral.
Para isso, será melhor entender os conceitos básicos e os benefícios mais atraentes dos diferentes tipos de RTOS e o preço correspondente, uma vez que não há melhor RTOS para todas as aplicações.
Li livros sobre OS há alguns anos, mas não os tenho mais comigo. Pesquisei na internet antes de postar minha pergunta aqui e achei essa informação muito útil: http://www.ustudy.in/node/5456 .
Existem muitas outras informações úteis, como as introduções no site de diferentes RTOS, artigos que comparam agendamento preventivo e não preventivo e etc.
Mas não encontrei nenhum tópico mencionado quando escolher um RTOS não preventivo e quando for melhor, basta escrever seu próprio código usando a interrupção do timer e o loop de segundo plano.
Tenho certas respostas próprias, mas não estou satisfeito o suficiente com elas.
Eu realmente gostaria de saber a resposta ou a opinião de pessoas mais exageradas, especialmente nas práticas da indústria.
Meu entendimento até agora é:
não importa o uso ou não de um sistema operacional, certos tipos de códigos de agendamento são sempre necessários, mesmo na forma de código como:
in the timer interrupt which occurs every 10ms
if(it's 10ms)
{
call function A / execute task A;
}
if(it's 50ms)
{
call function B / execute task B;
}
Benefício 1:
Um sistema operacional não-preemptivo designa o caminho / estilo de programação para o código de agendamento, para que os engenheiros possam compartilhar a mesma visão, mesmo que não estivessem no mesmo projeto antes. Então, com a mesma visão sobre a tarefa conceitual, os engenheiros podem trabalhar em diferentes tarefas e testá-las, analisá-las independentemente, tanto quanto possível.
Mas quanto somos realmente capazes de ganhar com isso? Se os engenheiros estiverem trabalhando no mesmo projeto, poderão encontrar uma maneira de compartilhar bem a mesma visão sem usar um sistema operacional não preventivo.
Se um engenheiro for de outro projeto ou empresa, ele obterá o benefício se conhecer o SO anteriormente. Mas se ele não o fez, parece que não faz muita diferença para ele aprender um novo sistema operacional ou um novo trecho de código.
Benefício 2:
se o código do SO foi bem testado, economiza tempo na depuração. Este é realmente um bom benefício.
Mas se o aplicativo tiver apenas cinco tarefas, acho que não é realmente complicado escrever seu próprio código usando a interrupção do timer e o loop de segundo plano.
Um sistema operacional não-preventivo aqui é chamado de sistema operacional comercial / gratuito / herdado com um agendador não-preventivo.
Quando postei essa pergunta, penso principalmente em certos sistemas operacionais como:
(1) KISS Kernel (um pequeno RTOS não preemptivo - reivindicado por seu site)
http://www.frontiernet.net/~rhode/kisskern.html
(2) uSmartX (RTOS leve - reivindicado por seu site)
(3) FreeRTOS (é um RTOS preemptivo, mas pelo que entendi, também pode ser configurado como um RTOS não preemptivo)
(4) uC / OS (semelhante ao FreeRTOS)
(5 ) código herdado de SO / agendador em algumas empresas (geralmente criadas e mantidas pela empresa internamente)
(não é possível adicionar mais links porque a limitação da nova conta StackOverflow)
Pelo que entendi, um sistema operacional não-preemptivo é uma coleção desses códigos:
(1) um agendador usando uma estratégia não-preemptiva.
(2) facilidades para comunicação entre tarefas, mutex, sincronização e controle de tempo.
(3) gerenciamento de memória.
(4) outras instalações votos / bibliotecas como arquivos do sistema, pilha de rede, GUI e etc. (FreeRTOS e uC / OS fornece estes, mas eu não tenho certeza se eles ainda trabalho quando o programador é configurado como não-preferência)
Alguns dos eles nem sempre estão lá. Mas o agendador é uma obrigação.