Digamos que você esteja iniciando um projeto incorporado com algumas funcionalidades conhecidas. Quando você seleciona um microcontrolador, como seleciona a quantidade de RAM necessária?
Você usa uma placa de desenvolvedor e codifica seu projeto primeiro e depois vê quanta memória você usou e depois seleciona um microcontrolador apropriado que se encaixa nessa memória?
Você apenas escolhe um microcontrolador robusto para um protótipo e depois reduz o tamanho depois de ter um produto em funcionamento?
Você escolhe apenas algo que tem certeza de que será suficiente e, se ficar sem espaço, basta atualizar para uma densidade de memória mais alta, caso contrário, apenas manterá o microcontrolador existente?
O que é considerado uma boa prática?
microcontroller
embedded
design
memory
efox29
fonte
fonte
Respostas:
Pessoalmente, para projetos de hobby, costumo usar o microcontrolador mais poderoso da família, com a pegada correta. Em seguida, desenvolvo o PCB, escrevo um código e produzo um protótipo.
Isso tem a vantagem de eu conhecer bem o pequeno número de microcontroladores, para que eu possa prototipar rapidamente sem ter que ler uma folha de dados inteira. Eu também tenho quadros de fuga e modelos de código para eles.
Se funcionar e eu estiver ganhando mais do que um punhado, então comprarei o microcontrolador mais barato, com os periféricos certos e memória suficiente para o que eu codifiquei anteriormente. Isso pode ser irritante se os registros internos mudarem (acontece no PIC) ou se um microcontrolador tiver periféricos extras que precisam ser desativados para que o código funcione.
No entanto, para fins de produção, isso permitirá que você corte uma quantidade razoável de cada unidade.
fonte
Obviamente, para um único protótipo caseiro, pode ser uma boa recomendação começar com o mais poderoso de todos os micros compatíveis e diminuir a escala posteriormente.
No entanto, se você deseja obter uma cotação, precisa informar um preço ao seu cliente antes de ter dinheiro para implementar qualquer coisa.
Portanto, a boa prática é anotar algum tipo de especificação antes de iniciar a programação. Você sabe o que quer fazer e deve escrever como vai fazê-lo.
Esse "como" também inclui pensar em um design de software, respondendo a perguntas como:
Resumir todos esses valores fornece uma estimativa aproximada. Até que ponto você pode confiar, depende de quão detalhada é a sua análise e da sua experiência :-)
Adicionar uma margem de pelo menos 30 a 50% da sua estimativa é certamente uma boa ideia.
Depois que seu produto terminar e você tiver cerca de 80 a 90% de RAM em uso, poderá ter certeza de que sua seleção foi correta - pelo menos em relação à RAM.
fonte
Se ao menos fosse possível codificar seu sistema incorporado primeiro e depois construir o hardware. Isso facilitaria a vida de todos. Infelizmente, isso também significa que seus prazos estão fora da janela. Normalmente, o hardware precisa ser projetado muito antes de o software ser concluído, porque as peças de hardware frequentemente têm longos prazos de entrega.
Assim, os desenvolvedores de software embarcado geralmente precisam estimar as necessidades de memória e CPU do programa. Seu primeiro passo deve ser convencer o pessoal do hardware a fornecer o microcontrolador / CPU mais poderoso com o máximo de RAM possível. Isso raramente funciona porque eles têm objetivos próprios, mas de vez em quando você tem sorte.
Se isso não funcionar, a próxima coisa a fazer é criar um software de alto nível e dividir os módulos em funcionalidade. Você estimaria as linhas de código de cada função para cada módulo no sistema. Você pode usar uma fórmula para converter linhas de código em uma estimativa aproximada da memória de código. Você também investigaria quaisquer requisitos de memória incomuns (como matrizes grandes) e adicionaria algumas estimativas para acomodar isso. Em seguida, adicione uma porcentagem acima desse total para cobrir tudo o que você perdeu. Em seguida, dobre isso para atender aos requisitos típicos de utilização de 50%.
Sim, isso leva tempo. Sim, é necessário pular todos os bastidores, pois a troca do hardware é realmente difícil depois de construída.
fonte
Geralmente, os fornecedores de microcontroladores colocam em seus dispositivos uma gama de memória adequada para aplicações típicas. Portanto, se você precisar apenas de alguns pinos de E / S e um SPI em um dispositivo pequeno, provavelmente não encontrará nada que seja fornecido com 500 kBytes de Flash e 64 kBytes de RAM. Com dispositivos maiores, que estão mais próximos dos pacotes SoC, até o menor é quase certamente grande o suficiente, a menos que você esteja planejando fazer um processamento sério de números, como o processamento de imagens.
Em um ambiente profissional, a chave para escolher o microcontrolador certo é usar dados históricos. Você terá um registro dos outros projetos que desenvolveu e saberá que memória e outros recursos de silício são necessários para implementar cada recurso. Você saberá o que o produto deve fazer e, portanto, possui uma boa lista de recursos e pode calcular com rapidez e precisão os recursos que o microcontrolador precisará fornecer. Tentar adivinhar os requisitos de recursos de uma especificação de projeto inicial (desenvolvida no início do projeto quando houver menos informações sobre o sistema) não é confiável o melhor dos tempos e apenas engenheiros muito experientes, que construíram uma ampla banco de dados de dados históricos em suas próprias cabeças, terá algum tipo de sucesso ao usar esse método.
Muitas empresas adotaram uma abordagem 'Ágil' ao design de software e eletrônico, que envolve a construção de uma 'biblioteca' de pequenas placas de recursos (por exemplo, placas RS-485, placas ADC, etc.) junto com placas de plataforma genéricas que hospedam os microcontroladores , de maneira semelhante ao uso de um kit de desenvolvimento e plug-ins. Um produto pode ser prototipado rapidamente (em poucas horas), selecionando e conectando o conjunto de placas necessário para os recursos. O software é montado de forma semelhante a partir de módulos de biblioteca e pode ser portado e testado rapidamente. Uma vez que o tamanho da parte específica do hardware do código é conhecido, geralmente é suficiente selecionar a menor parte que o conterá. A exceção é a mencionada acima, onde a funcionalidade do dispositivo envolve big data ou algoritmos muito complexos. Este método fornece uma precisão,
(Outra vantagem da abordagem Agile é que ela permite o desenvolvimento de software e eletrônico em paralelo, com o design da elctronics sendo um exercício para integrar o conjunto de placas de recursos e executar a EMC relevante e outras coisas difíceis ao mesmo tempo que o O software do aplicativo está sendo desenvolvido nos conjuntos protoype. Ainda é necessária alguma portabilidade e integração, mas isso é feito quando o software e a eletrônica de trabalho estão disponíveis.)
fonte