Considere que a equipe de hardware levará 2 meses para desenvolver algum hardware, mas a essa altura eu precisarei ter o software pronto.
Minha pergunta é: como posso escrever o software e testá-lo sem o hardware?
Existe algum padrão a ser seguido? Como você faz isso?
exit()
porque tentou mapear endereços codificados em / dev / mem.Respostas:
Não há hardware durante os estágios iniciais do desenvolvimento do firmware. Estratégias comuns para lidar com isso são:
É aqui que o design modular ajuda novamente. Se você não conseguir simular razoavelmente algumas interações de hardware de baixo nível, use uma versão diferente do módulo que toca esse hardware, mas que passa suas próprias ações simuladas para os níveis superiores. Os níveis superiores não saberão que isso está acontecendo. Você não estará verificando o módulo de baixo nível dessa maneira, mas quase todo o resto.
Em resumo, use boas práticas de criação de software, o que, é claro, você deveria fazer de qualquer maneira.
fonte
Sem nenhuma ideia do que você está desenvolvendo ou em qual família de microcontroladores seu hardware se baseará, a maioria das famílias de microcontroladores possui sistemas de desenvolvimento de baixo custo disponíveis que possuem um conjunto de periféricos comuns, o que pode permitir que você simule pelo menos parte do seu hardware de destino final.
fonte
Dependendo da dependência do hardware do aplicativo, você pode começar a implementar o projeto em um PC padrão (Windows, Linux ...). A maioria dos acessos periféricos deve ser abstraída de qualquer maneira, portanto, não é muito importante implementar algumas funções fictícias, que serão substituídas mais tarde. Se não for possível simular algum comportamento, você pode pelo menos fazer uma maquete do sistema (API ...), para que a implementação real seja muito mais rápida e clara, assim que o hardware estiver pronto.
É claro que existem muitas coisas que não podem ser simuladas, como comportamento em tempo real ou drivers de hardware complexos. Por outro lado, um ADC controlado por interrupção pode ser facilmente simulado usando um encadeamento que lê valores de um arquivo ou de uma porta de rede.
Claro que tudo isso depende muito de vários fatores:
Eu, por exemplo, estou projetando praticamente todos os módulos de firmware em um PC primeiro.
fonte
Tente obter um simulador para o seu chip. Você deve simular todas as entradas esperadas e algumas inesperadas também. Modularize / abstraia o máximo que puder e escreva testes de unidade. Se você puder, esses testes podem se tornar parte do seu código real e se transformarem em um recurso (autoteste da placa).
Se você não pode obter um simulador, abstraia o máximo possível através de um HAL (camada de abstração de hardware). Todos os motoristas ficam atrás. Tente abstrair todo o conjunto específico da plataforma por trás de alguma chamada de função C e pense neles também como drivers. Escreva o restante como código C / C ++ portátil, faça um HAL fino para x86 e execute-o em sua máquina com todos os casos de teste.
Dessa forma, quando você obtiver o hardware, precisará apenas depurar o HAL. Quanto mais fino, mais rápido você o depurará e terá tudo funcionando. Lembre-se que se você usar específico da plataforma de montagem para ops mais rápidos, você quer MUITO para obter testes bit-exato .
fonte
a == b
comparações com carros alegóricos, mas ainda as usam sem pensar com números de pontos fixos.Sua pergunta é um pouco ampla. Hardware (HW) pode significar desenvolvimento ASIC / FPGA personalizado completo, DSPs programados por montadores ou "apenas" um sistema embarcado típico baseado em microprocessadores / microcontroladores / SoC disponíveis no mercado, etc. (é claro que um SoC também pode conter um DSP que você pode querer programar ....). Para grandes quantidades de venda, torná-lo um ASIC não é incomum.
Mas para um projeto de 2 meses, espero que seja baseado em algum microcontrolador:
De qualquer forma, você deve enfatizar a equipe de hardware para fornecer um protótipo para começar a testar seu código antes do prazo absoluto - isso pode consistir em uma placa de desenvolvimento genérica, como algumas pessoas já mencionaram, mas, na minha opinião, é a sua trabalho para fornecer o caminho certo para você e, potencialmente, também alguns periféricos necessários / semelhantes para teste.
Os simuladores também são possíveis até certo ponto, mas você ainda pode precisar caracterizar alguns sensores / dados do mundo real que possa obter. Aqui, a equipe de hardware também precisa pelo menos ajudá-lo.
Fora isso, o design do software já pode ser feito e todos os módulos de alto nível podem ser (e devem ser) implementados e testados em unidade sem o hardware real. Idealmente, você também definirá uma API juntamente com a equipe de hardware, e elas fornecerão as funções de nível mais baixo; portanto, qualquer alteração que fizerem no lado do hardware (por exemplo, simplesmente redefinindo quais pinos de porta eles usam) nem sempre será seja crítico para você.
Em todos os casos, a comunicação é fundamental.
fonte
Sim, você pode desenvolver seu código para o seu quadro de destino antes que ele seja fabricado.
Como ?
Primeiro você precisa conhecer o objetivo principal desse sistema. Assim, você pode escolher o controlador de forma apropriada a partir de uma vasta fonte de disponibilidade, como digikey, mouser.
E escolha um simulador como o Proteus. Isso simulará o processador / controlador exato agora que você poderá iniciar sua codificação. Mas você não pode esperar a precisão como no hardware.
fonte