Pergunta

Estou procurando ferramentas e técnicas para prototipagem (prototipagem virtual), simulação e teste de código C profundamente incorporado em desktops Windows, incluindo a construção de painéis frontais incorporados realistas que consistem em botões, LEDs e monitores LCD (segmentados e gráficos).

Estou especificamente interessado em uma abordagem possivelmente de baixo nível, usando código C puro e API Win32 bruta em vez de MFC, .NET/C#, vxWidgets ou Qt.Também gostaria de usar ferramentas de desenvolvimento gratuitas, como Visual C++ Express com Platform SDK e ResEdit para edição de recursos.

Estou procurando exemplos de código para renderizar LCDs gráficos (de monocromático a colorido de 24 bits) com interface eficiente em nível de pixel, LCDs multissegmento e botões desenhados pelo proprietário que respondem a eventos "deprimidos" e "liberados".

Foi útil?

Solução

Surpreende-me que a minha pergunta original tenha desencadeado tantos mal-entendidos e comentários adversos.A estratégia de desenvolver código C profundamente incorporado em uma máquina (por exemplo, um PC) e executá-lo em outra (o microcontrolador incorporado) é chamada de "direcionamento duplo" e é bastante comum.Por exemplo, desenvolver e testar código profundamente incorporado no PC é a base do recente livro "Test-Driven Development for Embedded C" de James Grenning.

Evitando gargalos de hardware alvo com segmentação dupla

Observe que a segmentação dupla não significa que o dispositivo incorporado tenha algo a ver com o PC.Nem isso significa que a simulação deve ser exata com o ciclo da CPU alvo incorporada.

A segmentação dupla significa simplesmente que, desde o primeiro dia, seu código incorporado (normalmente em C) é projetado para ser executado em pelo menos duas plataformas:o hardware de destino final e seu PC.Tudo que você realmente precisa para isso são dois compiladores C:um para o PC e outro para o dispositivo embarcado.

No entanto, a estratégia de dupla segmentação requer uma maneira específica de projetar o software embarcado, de modo que quaisquer dependências de hardware alvo sejam tratadas por meio de uma interface bem definida, muitas vezes chamada de Board Support Package (BSP).Esta interface possui pelo menos duas implementações:um para o destino real e outro para o PC, por exemplo executando o Windows.Com essa interface instalada, a maior parte do código incorporado pode permanecer completamente inconsciente a qual implementação BSP ele está vinculado e, portanto, pode ser desenvolvido rapidamente no PC, mas também pode ser executado no hardware alvo. sem quaisquer alterações.

Embora alguns programadores embarcados possam ver a dupla segmentação como um fardo autoinfligido, os desenvolvedores mais experientes geralmente concordam que prestar atenção aos limites entre software e hardware é realmente benéfico, porque resulta em software mais modular, mais portátil e de maior manutenção. vida útil muito mais longa.O investimento em dupla segmentação também tem um retorno imediato no ciclo de compilação-execução-depuração muito acelerado, que é muito mais rápido e mais produtivo no PC poderoso em comparação com um alvo profundamente incorporado, muito mais lento e com recursos limitados, com visibilidade limitada do código em execução. .

Kit de ferramentas GUI Win32 do painel frontal

Ao desenvolver código incorporado para dispositivos com interfaces de usuário não triviais, muitas vezes enfrentamos o problema de representar os painéis frontais incorporados como elementos GUI no PC.O problema é tão comum que estou realmente surpreso que ninguém aqui possa recomendar uma biblioteca existente ou um projeto de código aberto, que forneceria uma interface simples somente C para os elementos básicos, como LCDs, botões e LEDs.Na verdade, isso não é tão complicado, mas parece que todo desenvolvedor incorporado precisa reinventar essa roda continuamente.

Portanto, para ajudar os desenvolvedores embarcados interessados ​​em prototipar dispositivos embarcados no Windows, criei um "Front Panel Win32 GUI Toolkit" e o publiquei on-line sob a licença de código aberto GPL (consulte http://www.state-machine.com/win32).Este kit de ferramentas depende apenas da API Win32 bruta em C e atualmente fornece os seguintes elementos:

  1. Display de matriz de pontos para displays eficientes e endereçáveis ​​por pixels, como LCDs gráficos, OLEDs, etc.com cores de até 24 bits

  2. Exibição de segmento para exibição segmentada, como LCDs de segmento e LEDs de segmento com bitmaps genéricos e personalizados para os segmentos.

  3. Botões desenhados pelo proprietário com bitmaps personalizados “deprimidos” e “liberados” e capazes de gerar eventos separados quando pressionados e quando liberados.

O kit de ferramentas vem com um exemplo e uma Nota de Aplicativo (veja http://www.state-machine.com/win32/AN_Win32-GUI.pdf), mostrando como lidar com entradas de botões desenhados pelo proprietário, botões normais, teclado e mouse.Você também pode ver uma demonstração animada em http://www.state-machine.com/win32/front_panel.html.

Em relação ao tamanho e complexidade do "Front Panel Win32 GUI Toolkit", a implementação dos elementos GUI mencionados acima leva apenas cerca de 250 linhas de C.O exemplo com todas as fontes de entrada e muitos comentários equivale a cerca de 300 linhas de C.O kit de ferramentas foi testado com o Visual C++ Express 2010 gratuito (com o Express Edition Platform SDK) e o editor de recursos ResEdit gratuito.

Aproveitar!

Outras dicas

Os aparelhos que você mencionou no seu comentário esclarecendo a questão nunca usarão um PC com Windows, portanto, a programação do Windows de baixo nível não é um requisito nesse caso.Na verdade, eu diria que é indesejável.A prototipagem tem a ver com velocidade.É sobre quão rápido você pode montar algo para mostrar aos potenciais investidores, à alta administração ou a algum outro tomador de decisão.

Você não gostaria de gastar tempo extra com API de baixo nível C e Win32 até que os requisitos do projeto fossem liberados o suficiente para que você soubesse que era um requisito absoluto para as entregas finais do projeto (talvez uma ferramenta de monitoramento de servidor/PC?).Até então você quer velocidade de desenvolvimento.Para sua sorte, a indústria possui ferramentas para prototipagem rápida e desenvolvimento de hardware como você descreve.

Minha preferência por prototipagem com desenvolvimento embarcado

Quanto à minha opinião como desenvolvedor, gosto do microframework .net (.netmf) simplesmente porque já sou um desenvolvedor Microsoft .Net e posso transferir muitas das minhas habilidades existentes.Para tanto, criei um protótipo com um microcontrolador FEZ usando C# no Visual C# Express 2010 (gratuito conforme necessário).É rápido, fácil e você estará trabalhando na essência do seu projeto em minutos.

Se sua experiência como desenvolvedor for diferente, você pode procurar um microcontrolador programado em BASIC, Java ou alguma outra linguagem para ajudar na velocidade de desenvolvimento, reutilizando seu conjunto principal de habilidades.

Resolvendo sua pergunta Comentários sobre recompensas

Partes surpreendentemente grandes do software incorporado podem ser desenvolvidas no computador desktop, em oposição ao alvo profundamente incorporado.Este evitar o "gargalo do sistema alvo" pode potencialmente melhorar produtividade por uma ordem de grandeza, se bem feita.No entanto, para desenvolver software embarcado no desktop, é preciso simular a interface do usuário componentes, como monitores (segmentados e cada vez mais gráfico), LEDs, botões e botões.Estou procurando essa interface do usuário componentes escritos em API Win32 simples em C para fácil integração com código incorporado a ser desenvolvido e testado na área de trabalho do Windows.

Trabalhei profissionalmente com desenvolvimento incorporado em tempo integral por mais de 4 anos, bem como por muitos anos em torno desse período parcial.Embora o que você disse acima seja verdade, isso não economizará tempo ou dinheiro, e é por isso que todos estão confusos sobre a motivação dessa estratégia.Passamos anos tentando lançar um emulador de Windows para os dispositivos de hardware desta empresa que, teoricamente, economizaria tempo para prototipagem.Sempre foi uma dor e passamos muito mais horas de trabalho tentando emular a experiência do que se simplesmente passássemos direto do esboço das especificações de desenho da interface do usuário para o desenvolvimento real.O emulador ficou para trás no desenvolvimento do hardware e muitas vezes não suportava os recursos mais recentes até 6 meses ou mais após o lançamento do hardware.Foi muito trabalho extra por muito pouco valor.

Você gastará mais tempo desenvolvendo código de plataforma win32 não reutilizável e componentes de emulação de hardware do que realmente escrevendo o código para o projeto principal em si.Isso só faz sentido para fornecedores de hardware que fornecem este emulador como uma ferramenta de 'valor agregado' para possíveis desenvolvedores terceirizados, mas não faz sentido para a prototipagem de novos designs de hardware.

Ambientes de desenvolvimento modernos como Visual C# Express 2010 com um microcontrolador FEZ podem compilar, enviar a saída do projeto para o microcontrolador e então começar a depurar com a mesma rapidez ou mais rápido do que você poderia compilar e executar um aplicativo Windows de baixo nível em C emulando LCDs, LEDs ou interruptores, etc.Portanto, o seu comentário, "melhorar a produtividade em uma ordem de magnitude", simplesmente não é mais verdadeiro com as ferramentas modernas.(Pode ter sido antes dos últimos 10 anos ou mais.)

Se você realmente deseja apenas simular visualmente o hardware incorporado em um PC, use algo como Adobe Flash para simular uma interface do usuário.Mas não duplique o código codificando para Windows quando o dispositivo final que você está prototipando não estiver executando o Windows (talvez esteja, mas você não disse isso).Use as ferramentas de prototipagem mais rápidas e confiáveis ​​disponíveis atualmente, que são inequivocamente não baixo nível C e API win32!

Talvez use StackExchange for Electronics?

Como este é um site orientado para o desenvolvimento, a discussão sobre os méritos de hardware embarcado específico não é realmente relevante.Se você decidir focar novamente no uso de eletrônicos de microcontroladores para prototipagem (Arduíno, FEZ, Hélice, Selo Básico, Pololu, etc) você pode pedir conselhos sobre hardware eletrônico sobre stackexchange para eletrônica.Direi que a maioria dessas plataformas são projetadas para facilitar a prototipagem de LCDs, LEDs, botões e interfaces conforme você descreveu.Normalmente você pode montar alguns módulos pré-construídos em questão de minutos e estar pronto para começar a codificar seu projeto.Grandes economias de tempo podem ser obtidas aqui.

Você está pedindo muito que você precisa dar uma olhada @ Proteus. http://www.labcenter.com/products/vsm_overview.cfm

Como Mahmoud disse, você pode encontrar sua solução de código com exemplo de prototipagem em Profissional de Proteus .É um dos softwares populares para prototipagem, simulação e codificação, você pode Baixe Protheus Professional De graça e verifique o manual.

boa sorte

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