PUPANVR-Estabeleça ambiente de desenvolvimento e diário, adicione algumas funções básicas da ferramenta (3)

Configuração do ambiente de desenvolvimento

Sistema de ambiente de compilação

ubuntu-20.04.2.0-desktop

hardware:

Controle principal: Hi3536C;

FLASH: 16 MB SPI nem FLASH;

DDR: 512 MB

        O hardware correspondente é uma placa NVR de 16 canais de uma empresa de soluções que comprei antes. Não consigo programar facilmente seu uboot e kernel. Receio não ser capaz de fazer isso!!! Não há correspondente informações de hardware!

Versão BSP:

Hi3536C V100R001C02SPC040

Gerenciamento de diário

        O diretório de log no diretório do projeto.

Primeiro adicione a função de impressão do diário para facilitar a depuração. A biblioteca glog já foi usada em muitos projetos antes. Parece ser muito fácil de usar e as funções usadas são relativamente simples. Vamos usar esta biblioteca aqui.

        Geralmente, o armazenamento em sistemas embarcados é muito limitado. Não escreveremos arquivos aqui primeiro. Em seguida, escreveremos um coletor glog e adicionaremos algumas estratégias de gerenciamento de arquivos diários.

        Adicione um diretório separado para gerenciar o log de operação e use uma classe de instância singleton para gerenciar essa função de log.

        Existe uma função relativamente fácil de usar no glog, que é configurar o InstallFailureWriter. Ou seja, quando ocorre um erro ou o programa trava, algumas pilhas simples serão impressas. No entanto, em muitos casos não pode ser impresso Às vezes, o programa ainda tem um core dump. Forneça algumas informações para encontrar problemas no programa.

Asserções em código

        Em meus hábitos de desenvolvimento anteriores, eu adicionaria mais asserções em locais onde é improvável que a lógica e o negócio do programa apareçam, ou onde a ocorrência seria um erro. Ao mesmo tempo, pensei em digitar as asserções no diário, então eu adicionou um ASSERT. A definição da macro apenas adiciona uma afirmação ao diário quando ocorre um problema.

Veja assertdef.h

Compilação e gerenciamento de ferramentas de biblioteca de terceiros

        As ferramentas da biblioteca de terceiros são todas colocadas no diretório third_party do projeto. Originalmente, eu queria usar buildroot para construir o sistema de arquivos e bibliotecas de ferramentas de terceiros, então usei meu hábito anterior e simplesmente coloquei-os em third_party e criei um diretório tarball nele. Os códigos-fonte de todas as bibliotecas de terceiros usadas no projeto são colocados aqui. Ao mesmo tempo, um diretório é criado para diferentes soluções de chip e os scripts de compilação correspondentes são escritos. No passado, isso era principalmente feito para compilar todas as bibliotecas de terceiros com um clique. , os patches modificados correspondentes das bibliotecas de terceiros também são colocados nele, de modo que, quando as pessoas subsequentes vierem mantê-lo, não entenderão como foi compilado e quais patches eles se candidataram.

Uso de objeto singleton

        Para muitos tipos de objetos e módulos, eles existem basicamente como singletons em aplicativos, como gerenciamento de diário, gerenciamento de armazenamento, etc. Se você usar C++, ele será basicamente abstraído em uma classe e uma instância correspondente será criada assim. estar mais acostumado a construir esses objetos em um singleton, de modo que, quando usado em tarefas, eu só precise citar o arquivo de cabeçalho desta classe, declarar o construtor e o destruidor da classe como privados e chamar a função get do singleton correspondente do aula. É isso! Como o método getInstance no TLog.

        Este método de operação poderá ser usado em mais lugares no futuro. No passado, era costume no ambiente da linguagem C criar uma estrutura superior e inferior de contexto para todo o negócio e colocar todos os ponteiros de objeto nesta estrutura de contexto. Isso também é conveniente.O gerenciamento centralizado, seja em C ou C++, é muito bom. No entanto, sinto que em aplicativos incorporados, muitos singletons são obtidos diretamente usando um método getInstance da classe, o que é muito legal (desde que no aplicativo, esta classe crie apenas esta instância, e o construtor e o destruidor não sejam permitidos a ser chamado pelo usuário). ), é mais fácil escrever código dessa maneira!

Acho que você gosta

Origin blog.csdn.net/jhting/article/details/121708882
Recomendado
Clasificación