Pela primeira vez, gostaria de mencionar que sou iniciante em programação de sistemas em tempo real. É por isso que não tenho certeza se minhas perguntas estão corretas. Desculpe por isso, mas preciso de ajuda
Pergunta resumida: Como implementar software rígido em tempo real para garantir que ele atenda a prazos rígidos? É necessário usar alguns recursos do QNX? Ou basta escrever para linux, porta para QNX e, por padrão, será em tempo real?
Pergunta completa: Implementamos algum software multiprocesso multiplataforma complexo com comunicação entre processos para Linux, Windows, Android e QNX. A linguagem de programação é C ++, usamos Boost e planty de outras bibliotecas. Nosso software faz seu trabalho bem e rapidamente, mas ainda é um protótipo. Para fins de produção, precisamos fazer isso em tempo real Alguns de nossos recursos precisam ser em tempo real e muito robustos, porque são muito importantes e a segurança das pessoas que usam nosso software depende delas. Eles trabalham muito rapidamente - até centenas de milissegundos. Mas não tenho certeza de que nosso sistema seja realmente em tempo real devido a esse fato (estou certo?).
Portanto, há uma pergunta principal: como modificar nosso software para ser em tempo real? Pesquisei bastante no Google, mas ainda não faço ideia de como fazê-lo.
Algumas informações adicionais sobre nossas plataformas: Linux e Windows atualmente usamos apenas para fins de teste. Android - ainda não decidimos se precisamos. QNX - é o nosso sistema operacional de destino para produção. Acho que a resposta para minha próxima pergunta é "NÃO" :) Mas é possível implantar software em tempo real de plataforma cruzada (para sistemas operacionais em tempo real (RTOS) e sistemas operacionais para fins gerais (GPOS))?
Possivelmente, precisamos nos esforçar para implementar todos os recursos em tempo real apenas para o QNX? Mas ainda não entendo como fazê-lo. Alguém poderia esclarecer essa questão?
Respostas:
Rápido não significa tempo real e tempo real não significa rápido.
Em tempo real, significa que a data em que o resultado é entregue é tão importante quanto o seu valor. Em outras palavras, se o resultado tiver um valor correto, mas for entregue muito cedo ou muito tarde, o resultado geral estará errado.
Por exemplo, pense em um player de vídeo. Se os quadros de vídeo não forem exibidos na taxa certa, os usuários não ficarão satisfeitos. Pior se a imagem e o som não estiverem sincronizados.
Este exemplo mostra que alguns aplicativos em tempo real podem ser implementados nos sistemas operacionais atuais de uso geral.
Mas há uma distinção entre tempo real difícil e tempo real suave no que diz respeito às consequências de uma falta de prazo: em sistemas em tempo real suave, isso é apenas um aborrecimento ou um serviço degradado (pense em imagens congeladas durante vários segundos em o exemplo do player de vídeo), considerando que é uma falha (potencialmente catastrófica) em sistemas em tempo real, como em uma usina nuclear.
fonte
Como o @mouviciel já disse, em tempo real e rápido são realmente duas propriedades independentes, embora muitos prazos em tempo real impliquem que seja necessária uma resposta relativamente rápida.
Ao escrever software em tempo real, a propriedade mais importante ao lado de uma resposta correta é que você pode prever com precisão a rapidez com que a resposta será dada. Para recursos difíceis em tempo real, você deve mesmo garantir que o prazo seja cumprido em todas as condições possíveis, com exceção de uma falha de energia completa.
Fontes típicas de imprevisibilidade podem ser encontradas em
Não estou dizendo que você deve evitar essas áreas (como provavelmente não pode), mas deve estar ciente de como elas podem afetar a facilidade com a qual você pode prever que cumprirá os prazos em tempo real dos recursos relevantes.
fonte
Suponho que a explicação em tempo real de duas frases é que um sistema em tempo real foi projetado para entender e controlar o pior tempo de resposta, desde as entradas até as saídas.
Isso requer uma análise que cubra todo o sistema. Digamos que você tenha um sistema trivial que consiste em um teclado USB e um servo de freio. Que capacidade de resposta você pode alcançar com este sistema? Você pode ter que considerar:
Nesse tipo de ambiente, também costuma haver considerações especiais quanto à confiabilidade, como os padrões MISRA C.
fonte
avoiding use of garbage collection
- Isso deveria seravoiding use of non-deterministic memory management
. A coleta de lixo pode ser feita em tempo real e o gerenciamento manual de memória não é necessariamente determinístico (consulte amalloc
implementação típica em C).