5 maneiras pelas quais uma camada de abstração de hardware pode transformar seus projetos
Jacó de Benin | 05 de junho de 2023
Os desenvolvedores de software embarcado geralmente evitam camadas de abstração de hardware (HALs) alegando que elas diminuem o desempenho e aumentam a complexidade do código. Infelizmente, quando os desenvolvedores adotam um HAL, um HAL fornecido pelo fornecedor geralmente não abstrai o hardware e ainda garante um acoplamento rígido ao hardware. Afinal, um HAL real e abstrato permitiria que um desenvolvedor usasse qualquer fornecedor em um piscar de olhos. No entanto, há muitas maneiras de usar ou desenvolver seu próprio HAL para afetar seu software. Nesta postagem, exploraremos cinco maneiras surpreendentes de como um HAL pode transformar seus projetos de software e liberar velocidade e valor que você não imaginava ser possível.
Em geral, descobri que os desenvolvedores costumam ter um fornecedor de microcontrolador favorito. Geralmente é o fornecedor no qual você escreveu seu software embarcado pela primeira vez ou com o qual você está familiarizado. Eu tenho meus favoritos como qualquer outra pessoa, mas pode ser perigoso escrever seu software dependente de seu HAL ou bibliotecas de software. Por exemplo, o que você faz se de repente não consegue obter seus microcontroladores? Você teria que selecionar um novo fornecedor e reescrever, testar e talvez até mesmo certificar seu produto. Isso não é rápido nem barato! Embora você possa pensar que isso é improvável, aconteceu durante o COVID e muitas vezes antes.
O uso de um bom HAL permitirá que você escreva um código de aplicativo mais portátil e reutilizável independente do hardware. Essa é uma grande transformação para muitas equipes incorporadas. Por exemplo, você pode executar seu código usando o fornecedor A e, alterando um sinalizador em sua compilação, compilando para o fornecedor B. A independência de hardware oferece flexibilidade para usar qualquer hardware desejado e remove sua dependência do fornecedor do microcontrolador.
Se você gosta da ideia de usar o HAL fornecido pelo fornecedor, tudo bem, desde que você revise vários recursos essenciais. Primeiro, o HAL deve ser um HAL real. Isso significa que você deve ter uma interface definida que quebre a dependência de hardware. Discutimos isso em meu blog intitulado "Escrevendo Camadas de Abstração de Hardware (HALs) em C." Costumo ver "HALs" que nada mais são do que funções com a implementação. Isso não obedece ao princípio de inversão de dependência e é igualmente difícil de atualizar o código. Em seguida, o HAL deve ser definido separadamente da implementação. Finalmente, você deve ser capaz de trocar rapidamente a função chamada pela interface. Se você não tiver essas três coisas, não terá independência de hardware; você tem dependência de hardware!
A chave para revelar valor e transformar seu desenvolvimento de software começa com o uso de um HAL. O HAL permite ainda transformações adicionais, como permitir testes automatizados de unidade e integração. Os desenvolvedores incorporados geralmente lutam com o teste de unidade porque escrevem código que toca o hardware. Isso significa que você deve executar seus testes no microcontrolador. Quando você tem um HAL adequado instalado, sim, você ainda precisa testar seus drivers no alvo, mas todo o código do seu aplicativo é subitamente liberado! Seu código de aplicativo agora pode ser testado em unidade e integração em uma máquina host independente do hardware.
Remover o hardware da equação e mover os testes para o host beneficia os desenvolvedores. Primeiro, é mais rápido. Você não precisa se preocupar com todos aqueles ciclos lentos de apagar e escrever na peça. Em segundo lugar, você não precisa se preocupar com o tamanho do seu equipamento de teste ou com quantos testes você tem. Em vez de tentar ajustar seu código e testes no microcontrolador, você apenas testa primeiro todo o código do aplicativo em seu host. Em seguida, mover para testar fora do alvo permite que você utilize a integração contínua e até mesmo a implantação contínua, se desejar. O resultado será detectar bugs mais cedo e mais rápido, diminuindo custos e melhorando a qualidade.
Quando você tira o hardware da equação usando um bom HAL, ele permite que você coloque qualquer implementação por trás dele. Isso significa que você pode ter uma implementação para seu destino, seu equipamento de teste e um ambiente de simulação! Em muitos casos, os desenvolvedores de software embarcado devem começar a escrever o software antes que o hardware esteja disponível. Portanto, embora possamos usar placas de desenvolvimento para começar, com um bom HAL, podemos executar simulações em nosso código de aplicativo!