A Embox participou do festival de TI
TechTrain . Como na
primeira vez, trouxemos os pedaços de ferro e mostramos nossas realizações ao vivo. Já escrevemos sobre alguns no Habré, mas você nunca sabe quem :).
Telefone VoIP ,
Qt e
OpenCV foram mostrados, todos baseados no STM32F7-Discovery. Além do estande, fizemos três relatórios. Eu já descrevi as idéias do primeiro sobre o projeto aberto em um
habr Neste artigo, quero contar as idéias de outro de nosso relatório, chamado
"Lançamento de software" desktop "em microcontroladores" . Bem, aproveitando esta oportunidade, vou falar um pouco sobre meus sentimentos sobre o festival.
TechTrain
Primeiro, deixe-me contar um pouco sobre o festival em si. Quem não estiver interessado pode voltar imediatamente à seção "Iniciando o software" Desktop "no microcontrolador"
A primeira coisa que chamou minha atenção no festival foi muita gente. Estamos cansados de ficar de pé, falando, conduzindo uma missão e nos comunicando. Por outro lado, foi muito divertido e interessante e, o mais importante, tivemos muitas emoções positivas, por exemplo, várias pessoas nos disseram que temos um bom blog no hub :). Os participantes do festival eram de vários campos de atividade, e nem de TI, porque o slogan do festival é "um ótimo festival para desenvolvedores, engenheiros e simpatizantes". Havia muitas crianças, um garoto no final do festival arrastou uma máquina robô da banca e brincou com ela. Nem o garoto nem o robô foram feridos.
Para tornar a amplitude do público mais compreensível, ilustrarei de maneira diferente. Muitas atividades foram realizadas no festival, uma delas foi uma busca. Os participantes da missão tiveram que subir às arquibancadas, concluir as tarefas inventadas e obter uma impressão. Para isso, alguém chegou a ter um quadrocóptero inteiro. Mas agora não é sobre isso. Também éramos um dos lugares onde você poderia conseguir um selo. Tínhamos preparado tarefas, incluindo perguntas. As perguntas eram simples, sobre software de código aberto e sistemas embarcados. Mas o contingente era tão diferente que alguns se ressentiram da simplicidade da pergunta, enquanto outros entraram em estupor. O último que naturalmente ajudamos, contamos (ou sugerimos google) sobre coisas como: "quem são os criadores da linguagem C", "o que é famoso por Linus Torvalds", "qual é a diferença entre um microprocessador e um microcontrolador" ou "o que é um compilador cruzado". Como resultado, ninguém saiu sem imprimir. A propósito, foi um pouco estranho, mas suspeitosamente muitos facilmente decifraram "GNU - GNU não é Unix". Provavelmente preparado para Stallman. :)
O segundo segue do primeiro. Havia entretenimento para um público muito amplo. Por exemplo, Habr trouxe uma caixa de areia. É verdade que não era uma caixa de areia local onde você podia receber um convite para um artigo, mas era possível mergulhar na fama. Sobre convites na caixa de areia, eu não pensei em perguntar, talvez eles tenham dado como em uma caixa de areia real. Havia um clube de
computadores antigos , você podia jogar com eles, o que muitos fizeram. Havia máquinas caça-níqueis do
Museu das máquinas caça-níqueis soviéticas . Sberbank, ofereceu uma área de relaxamento, também foi possível jogar nele já na estação de jogo. Havia kickers tradicionais de TI e muitos outros entretenimentos. Infelizmente, tivemos que trabalhar, por isso estou apenas falando sobre o que era visível em nosso estande.
A terceira e provavelmente a principal foi que os organizadores conseguiram reunir representantes de praticamente todas as áreas de TI, desde desenvolvimento web e sistemas distribuídos até embarcados. De desenvolvedores e outros técnicos, a recursos humanos e apenas interessados, por exemplo, jogadores (afinal, foi possível invadir o próprio
Romero ) ou entusiastas de bricolage. Houve controle de qualidade do
COMAQA e
líderes de equipe do
Burning Lead . Havia comunidades de diferentes cidades (Rostov, Tver, Krasnodar). Como resultado, os relatórios e stands foram muito diferentes no tópico. Por exemplo, nosso estande estava localizado entre a comunidade de líderes de equipe Burning Lead e o estande do
Clube de Diretores de TI de São Petersburgo .
Como resultado, pessoas com diferentes origens se aproximaram de nosso estande, havia desenvolvedores da Web e bochechas dotnet, havia JS e vantagens. Alguém lembrou que ele estava fazendo algo no AVR enquanto ainda estava na universidade, alguém estava dizendo que ele estava se divertindo com o RaPi ou o Arduino. Havia muitos pintinhos DotNet, muitos estavam se perguntando se tínhamos um
.NET Micro Framework . Nós até pensamos muito em não arrastá-lo para nós. Esperava-se que houvesse muitas perguntas sobre o Rust. Em suma, na minha opinião, os organizadores conseguiram implementar muito bem a idéia do festival “Descubra o que os outros vivem!”. Afinal, como em qualquer festival, o principal aqui é ver os outros e mostrar-se :).
Sim, as fotos não são fornecidas aqui.
Algumas fotos , inclusive com um garoto vivo Volodya, podem ser
vistas em nosso grupo. Bem, é claro, no
grupo de techtrain, um monte de fotos de alta qualidade, eles prometeram publicar mais.
Iniciar o software de desktop em um microcontrolador
Meu relatório foi uma espécie de resumo dos resultados de vários de nossos trabalhos sobre o lançamento de software para desktop (
Qt ,
OpenCV ,
pjsip ). O relatório é destinado ao público em geral. Para um habr, tentarei reduzir muitos detalhes e, para as coisas necessárias, darei o link ou as palavras-chave para pesquisa.
Para começar, darei uma espécie de agenda. De fato, haverá 3 partes. Primeiramente, explicarei as dificuldades de transferir software de mesa para microcontroladores e, ao longo do caminho, explicarei a diferença entre o microcontrolador e o microprocessador. Também responderei a uma pergunta-chave, por
exemplo, goat bayan , por que executar software de desktop em um microcontrolador e, finalmente, mostrarei como conseguimos reduzir bastante o custo de transferência desse software de "desktop" para microcontroladores.
Qual é a diferença entre microcontroladores e microprocessadores
Assim, uma de nossas perguntas sobre a missão soou e, talvez sob a influência disso, um
artigo apareceu
em um programador típico dizendo como elas diferem. Concordo com tudo no artigo, mas tentaremos explicá-lo com nossas próprias palavras e fazer vários outros sotaques.
O que é uma unidade de microcontrolador (MCU)? Se você procurar na
Wikipedia , pode entender que um microcontrolador é um sistema em um chip, ou seja, um processador e periféricos estão localizados em um chip.
O termo sistema em um chip (System-on-a-Chip, SoC) é um conceito mais amplo que um microcontrolador. Este é um circuito eletrônico integrado em um único chip, que contém um microprocessador (CPU) e periféricos. Em qualquer telefone celular, existe um chip no qual, além de vários núcleos de processador, há vários periféricos. Até os processadores x86 agora incluem pontes e até gpu. Mas eu quero focar não em uma classificação clara, mas nos recursos. Todo mundo sabe que os sistemas em um chip:
- Consuma menos
- São mais baratos
- Menos produtivo
Nem todo mundo sabe que eles são ainda mais confiáveis, reduzindo o número de contatos e podem ter uma faixa de temperatura maior.
O microcontrolador possui uma integração ainda maior e também inclui memória (RAM e ROM), que também é referida na periferia. Assim, as propriedades são preservadas, consomem ainda menos, custam ainda menos, ainda menos produtivo, e ainda mais confiável.
Eu quero falar sobre "ainda menos produtivo" em mais detalhes. O fato é que, por um lado, é verdade,
use qualquer CPU ou SoC moderno de uso geral e observe um desempenho significativamente maior nos chamados
DMIPS . Mas se você pensar por que essa performance? Como exemplo, darei os jogos Quake and Doom (cujo criador foi John Romero no festival), eles funcionaram muito bem no Pentium MMX. Mas o desempenho dos sistemas baseados nesta CPU já está bloqueado pelos microcontroladores de última geração. Quero dizer
STM32F7 ou mesmo
STM32H7 . Ou seja, com base nesses MCUs, é bem possível executar aplicativos nos níveis Doom e Quake, o que você concorda que não é ruim.
Vamos falar sobre outro recurso do MCU - memória interna. Ela, como eu disse, está localizada diretamente no chip e, consequentemente, é muito rápida. Mas ela, é claro, não é suficiente. Mas quão pequeno? O microcontrolador STM32F769 contém 2 mb de flash (ROM) e 512 + 16 + 4 kB SRAM (RAM). Além disso, por exemplo, a placa
STM32F769i-disco também possui memória externa (SDRAM de 128 Mbit e memória Flash Quad-SPI de 512 Mbit), endereçada diretamente. Eu nem estou falando sobre a capacidade de conectar um cartão SD ou USB. Bem, se você se lembra da famosa frase "640 kb deve ser suficiente para todos", surge a pergunta razoável - por que o software de desktop moderno é tão glutão? Por exemplo, uma calculadora no Windows 10 no modo ocioso consome até 16 MB de memória.
Vamos para o próximo recurso do MCU, a presença de ROM. De fato, os sistemas com uma CPU também contêm uma ROM; a execução é iniciada a partir dela e o BIOS é iniciado, mas o restante do software é carregado na RAM e executado a partir dele. Nos sistemas embarcados, é habitual executar o código diretamente, que é chamado eXecute-In-Place (XIP), Linux, por sinal, também suporta esse modo, mas o principal é carregar tudo na memória principal e, em seguida, executá-lo. A capacidade de executar diretamente da ROM é importante por dois motivos: o primeiro é a arquitetura de Harvard, a separação do barramento de comando e do barramento de dados permite aumentar a velocidade de execução do programa; o segundo - bem, naturalmente, menos memória é desperdiçada, porque pelo menos um segmento de código não precisa ser copiado em nenhum outro lugar.
Outro recurso importante do MCU é a falta de um módulo como o
MMU , ou seja, os microcontroladores não têm suporte de hardware para
gerenciamento de memória virtual . No MCU, nem todos possuem
MPUs , e o código é executado no mesmo espaço de endereço, por isso é difícil organizar uma
bifurcação completa () . Mas o fork () em si, como escrevemos no artigo
“fork () vs. vfork () ”é uma chamada de sistema bastante pesada e, de acordo com sua funcionalidade, em muitos casos, pode ser substituída por vfork () ou posix_spawn ().
Resumindo, como os microcontroladores diferem dos microprocessadores, podemos dizer o seguinte:
Em termos de hardware:
- Os microcontroladores têm todos os periféricos necessários, incluindo memória
- Microcontroladores têm significativamente menos memória
- Microcontroladores não possuem uma MMU de hardware
- Microcontroladores têm uma velocidade de clock mais baixa e podem ter uma arquitetura de processador diferente (arquitetura de presentes)
Em termos de propriedades do consumidor:
- Microcontroladores consomem menos energia, podem trabalhar com bateria
- Microcontroladores são mais baratos
- Microcontroladores são mais confiáveis
- Microcontroladores são menos produtivos
Por que executar o software de desktop em um microcontrolador
Portanto, as MCUs são menos produtivas e foram originalmente planejadas (e planejadas) para tarefas de controle. Então, por que executar um software projetado para outra classe de sistemas? Bem, mesmo que seu poder já seja suficiente para essas tarefas, mas essas tarefas podem ser resolvidas da maneira tradicional para microcontroladores. Ou seja, para usar vários RTOS pequenos ou escrever código do zero, o que é chamado bare-metal. Há uma resposta óbvia: inicialmente as tarefas de gerenciamento eram muito simples, agora os requisitos de funcionalidade estão crescendo rapidamente. Mesmo com uma lâmpada suja que eles esperam controle pela Internet, não estou falando da chaleira, eles provavelmente selecionarão em breve a composição do chá de acordo com o humor do proprietário e aquecerão a quantidade ideal de água à temperatura ideal para melhorar a situação ambiental. :)
Portanto, não surpreende que constantemente sejam feitas tentativas para usar o software já desenvolvido em microcontroladores. Por exemplo, uma das primeiras e amplamente conhecidas tentativas de executar o Linux em plataformas pequenas é o ucLinux, agora é o modo NOMMU, principalmente o Linux. A idéia era rodar o Linux em plataformas de hardware sem um MMU, mas descobrimos que essa é uma das principais diferenças entre a CPU e o MCU.
Resumidamente, as vantagens de usar software pronto:
- Reduzir custos de desenvolvimento
- Menor tempo de colocação no mercado
- Redução de erros no código. O software pronto é mais confiável.
Como fazemos na Embox
Aqui você entende, pode conversar por muito tempo, mas, novamente, tentarei descrever os principais pontos de uma tese e de maneira acessível.
O primeiro. A Embox usa o sistema de construção Mybuild com sua própria linguagem para descrever módulos e sistemas, escrevemos sobre isso no artigo
“Mybuild - um sistema de construção para aplicativos modulares” . Esse sistema de compilação permite que você não inclua nada supérfluo na imagem ou inclua apenas o necessário. Você pode realmente ajustar as características do sistema, por exemplo, para executar o PJSIP no STM32F7, limitamos o número de pacotes Ethernet a 16 simplesmente escrevendo uma linha no arquivo de configuração do sistema
include embox.net.skbuff(amount_skb=16)
Mybuild analisa dependências e gera vários artefatos, incluindo arquivos de cabeçalho, scripts de vinculação e Makefiles. Tudo isso permite reduzir significativamente a quantidade de memória necessária e não incluir as partes que não são usadas.
O segundo Obviamente, a Embox deve suportar POSIX e é suportado. Além disso, implementamos nossa própria biblioteca padrão, porque ela também deve ser reconstruída, dependendo da configuração do sistema.
O terceiro. Ligação estática. Para evitar problemas com um único espaço de endereço, reduzir o tamanho da imagem e incluir apenas as partes necessárias, usamos um link estático. Em estágios diferentes, diferentes partes do sistema são montadas, mas finalmente tudo (o kernel, todos os subsistemas, bibliotecas e aplicativos) é vinculado a uma única imagem. Possui todas as informações sobre todos os caracteres da imagem. E, embora à primeira vista, tenhamos muitos aplicativos com pontos de entrada padrão int principal (..), mas na imagem resultante, esses serão caracteres diferentes que estarão disponíveis no sistema na linha de comando.
Quarta. Tivemos que implementar um tempo de execução para C ++, pois muitos aplicativos e bibliotecas populares usam vantagens.
Quinto. Adicionamos a capacidade de usar o sistema de compilação
./configure; make; make install
Depois de baixar a fonte de algum lugar e aplicar os patches necessários.
Conclusão
Hoje, os requisitos funcionais para sistemas que foram feitos anteriormente em microcontroladores cresceram significativamente. Espera-se que os sistemas de controle sejam compatíveis com os sistemas universais. As características dos microcontroladores também aumentaram significativamente, o que permite executar software neles com a funcionalidade correspondente. Historicamente, o software para microcontroladores para fins de otimização foi escrito para uma tarefa específica, mas com um aumento nos requisitos funcionais, é necessário aplicar abordagens do mundo dos sistemas universais que podem aumentar muito a confiabilidade do software, a saber, reutilização de módulos, desenvolvimento distribuído. Software universal, embora não leve em consideração os recursos dos sistemas embarcados, mas tenha uma funcionalidade significativamente maior e que funcione bem. Portanto, o uso de software de mesa em microcontroladores dá um ganho. De fato, por um lado, você pode usar uma plataforma de hardware mais barata, mais confiável e menos consumidora e, por outro lado, o custo de desenvolvimento de tais sistemas é reduzido significativamente.