Precisa de ajuda para escolher o tamanho do Flash em um microcontrolador

9

Preciso decidir selecionar o tamanho do Flash e a RAM para um projeto. O microcontrolador que eu prefiro usar é a série TI MSP430. Devido ao seu baixo consumo de energia e custo da série de linhas de valor. No entanto, sou um novato completo em decidir sobre a coleta de requisitos. A maior parte da minha experiência em programação é em sistemas baseados em desktop, onde geralmente o tamanho do programa, a RAM e a velocidade do processador não são uma preocupação para tarefas algorítmicas comuns.

Tenho as seguintes perguntas:

  1. Existem diretrizes ou práticas padrão relativas à decisão do tamanho da RAM e do Flash para um micro controlador?
  2. Quantas linhas de código (C) se traduzem em qual quantidade de tamanho do Flash no MCU?
  3. A linguagem assembly é a única saída se o tamanho do Flash precisar ser mantido no mínimo?

Em relação à seleção geral de um microcontrolador para um projeto, como os profissionais dessa área decidem o microcontrolador mais apropriado para a tarefa? Quais recursos eles pesquisam? Quais diretrizes eles seguem?

Daniel Grillo
fonte

Respostas:

7

As respostas para todas as suas perguntas dependerão do que você deseja fazer.

Como você disse, você é um novato, então eu sugiro que você use o maior microcontrolador e tente fazer o projeto. Depois disso, você pode visualizar quanto código você usa e depois escalá-lo de acordo com o que foi usado.

Daniel Grillo
fonte
Acordado. Comece com algo grande e, se necessário, reduza a parte menor que atenda aos seus requisitos finais.
W5VO 14/02
"Maior" precisa ser qualificado com "Na série que você está segmentando". Encontre os periféricos necessários e a classe de velocidade necessária, escolha uma arquitetura / família e desenvolva com o maior processador dessa família. Não comece com algo com 512kB de Flash e 64kB de RAM, porque é o maior microcontrolador que você pode encontrar; reduza-o para Cortex-M3 vs. AVR vs. PIC18 vs. MSP430 (por exemplo) antes de começar a se preocupar com o tamanho. Eu suspeito que Daniel esperava isso, mas apenas pensei que precisava ser declarado em algum lugar.
Kevin Vermeer
7

No que diz respeito ao msp430, é uma boa arquitetura, boas ferramentas por aí mspgcc e mspgcc4 e llvm. binutils sem remendar. Você pode obter uma barra de lançamento por menos de US $ 5 a esse preço e comprar algumas (eventualmente você vai fabricar algo ou fazer um curto-circuito e derreter, ter um sobressalente, especialmente por esse preço) ...

Faça o download das ferramentas, todas gratuitas, escreva algumas linhas de código, aprenda a vinculá-lo, veja o tamanho do binário, sinta-se incorporado, linhas de código em tamanho de ROM, etc.

Como os profissionais fazem isso. Praticamente de todas as maneiras que você pode imaginar:

Em algumas empresas, o mandato é alto e não há nada que você possa fazer além de sair. E você pode nunca saber por que essa plataforma foi escolhida.

Às vezes, o contratado / cliente favorito dita a plataforma, às vezes você pode educar / negociar, às vezes não.

Algumas pessoas apenas têm um favorito, o medo do desconhecido, qualquer que seja. A mesma razão pela qual algumas pessoas compram apenas uma marca de carro, porque meu pai comprou e o pai dele comprou antes disso, e esse poderia ser o motivo todo.

Algumas pessoas se concentram nas ferramentas. Aqui, novamente, você tem pessoas leais à marca, limitando-se à sua empresa de compiladores favorita e aos alvos que eles suportam, ou à ferramenta de código aberto favorita e ao que ela suporta. Sistema operacional incorporado favorito e limite aos destinos que suportam.

Em alguns casos, trata-se de ferramentas, mas de uma maneira diferente, com o tempo, você pode ter investido muito dinheiro em contratos de suporte anual com um fornecedor (por exemplo, braço ou xilinx ou motorola, por exemplo) e pode ser que você tenha gostado do suporte deles. e não quer mudar, ou o diabo que você conhece é melhor que o diabo que você não. Ou pode ser que, como os outros 5 projetos ativos da empresa usem esse recurso e já tenhamos um contrato de suporte e continuemos pagando ano após ano, você precise escolher uma dessas soluções de fornecedores.

Às vezes, trata-se de salvar os milipênios. Esta peça é 1,5% mais barata que a peça, faça com que ela funcione, não se preocupe com o NRE, pense nas economias de fabricação em volume.

Às vezes é sobre os negativos. Um fornecedor pode ter ferrado sua empresa de uma maneira ou de outra. Falha no atendimento ao fornecimento anunciado de peças, causando atrasos ou cancelamento de seus produtos. Fraudes de isca e troca (a taxa de US $ 50.000 para o software não incluía a taxa de US $ 1200 para o dongle necessário para desbloquear a licença, que é um item de custo extra. Ah, e isso era por usuário para a licença flutuante). Depois de assinar o NDA para ver o manual de referência dos programadores ou o guia de design de referência, você descobre o quão terrível é a engenharia deles e pode optar por colocar na lista negra todos os seus produtos por toda a vida. História passada com suporte técnico horrível. Qualquer número de razões pode fazer com que você nunca permita que o pessoal de vendas deles entre na porta da frente ou impeça que você nunca volte a olhar para o site deles.

Às vezes, isso tem a ver com desempenho, interfaces, etc. Caso em questão, digamos que você tenha uma interface com fio ou que precise de um pull up, a marca de microcontroladores XYZ por US $ 3 por peça possui um conjunto de pinos de E / S que podem ser usados sem nenhum outro hardware externo necessário, a marca ABC possui uma parte de US $ 3 que exigirá um transistor e um resistor externos para fazê-lo funcionar no mínimo. Seu exemplo do msp430, diz que é sobre consumo de energia, a parte A pode exigir apenas que o usuário use uma bateria AAA e funcione por meses, a parte B pode precisar de duas baterias AAA e funcione por semanas.

O caso mais raro de tudo é realmente fazer a engenharia, pesquisar todos os fornecedores, calcular o consumo de energia, o preço por unidade de cálculo do produto, o tamanho de uma ROM que precisamos e com que frequência executar o chip, cola lógica, e assim por diante. Geralmente alguém (chefe / cliente / engenheiro sênior) tira seus anos de experiência e dispara do quadril (geralmente usando uma ou mais das opções acima) para escolher o caminho (geralmente um bom caminho, economizando muito tempo na programação e em dólares) e o a engenharia é feita uma vez para ajustar a plataforma escolhida.

Minha recomendação pessoal é ser flexível. A maioria das marcas / famílias de microcontroladores, de alguma forma ou moda, pode ser adquirida em uma placa de avaliação por menos de US $ 50. Sparkfun, olimex ou direto do fornecedor (ti para msp430 ou stellaris, etc). Experimente um ou mais de cada um, sinta o que é comum e o que é diferente: ferramentas, carregadores, quão difícil é desmarcar etc. Você obtém duas coisas disso, pelo menos, uma é que, quando você é forçado a seguir um caminho do alto ou do cliente, você pode começar a correr, o segundo é que, quando é a sua vez de escolher a plataforma, você é mais instruído sobre o que é e o que não está lá fora, e pode escolher a plataforma (palavra carregada) certa com base no problema para ser resolvido.

Mesmo se você não puder gastar esse tipo de dinheiro com o hardware, a maioria possui ferramentas que você pode baixar (gratuitamente); em casos como microchip, agora você pode obter o compilador C (que costumava ser de alta tecnologia), mas precisa se inscrever (abra seu endereço de e-mail). O gcc gosta ou odeia no seu futuro, desktop ou incorporado, sujar as mãos e aprender a usá-lo como um compilador cruzado. Experimente o llvm também, ele estará disponível por um tempo e dará ao gcc uma competição séria. De qualquer forma, escreva ou encontre alguns emuladores, mame tem muitos, gdb tem alguns etc. Eu escrevi um chamado thumbulator no github, apenas no modo ARM thumb, semelhante a um córtex-m3, exceto que eu não apóio o thumb2 (ainda posso aprender um pouco e execute os programas nos dois antes de mudar apenas para o hardware). Eu criei um emulador msp430, mas meio que parei com isso. O conjunto de instruções é tão pequeno que a maior parte do trabalho é uma noite ou talvez um projeto de sábado. O mesmo vale para o PIC, uma longa tarde e você tem um simulador de conjunto de instruções com o qual praticar incorporado. Se nada mais puder, basta escrever os programas compilados e vincular para ter uma ideia de como fazer isso e qual o tamanho dos programas, como ajustar os programas para produzir um código mais rígido etc.

Quanto ao C vs assembler, alguns conjuntos de instruções são amigáveis ​​ao C e outros não. Alguns compiladores são médios e outros são muito ruins e apenas alguns são realmente bons (e geralmente custam alguns milhares de dólares uma vez ou por ano). Tal como acontece com o desempenho em qualquer lugar, se você realmente deseja empurrá-lo, pode ser necessária uma mistura de linguagem de alto nível (digamos C) e assembler. Portanto, a habilidade não está gravando o aplicativo inteiro no assembler, mas está determinando qual código está causando o incumprimento de tempo / desempenho e, em seguida, sabendo como resolvê-lo por meio de C, opções do compilador, escolha do compilador certo ou gravador do assembler.

Eu recomendo que você conheça o assembler para todas as plataformas que optar por usar, se nada mais for legível, como no incorporado, recomendo que você desmonte com frequência (enquanto descobre onde estão seus problemas de desempenho). Em muitas plataformas, algum montador é necessário ou desejado para o código de inicialização de qualquer maneira.

Se você deseja economizar 10-20% no preço por unidade e deseja comprar o microcontrolador ou oscilador mais barato / mais lento ou a parte flash de 32Kb em vez da parte flash de 64KB e pode cobrir o custo de desenvolvimento com volume de vendas, e talvez uma longa lista de outras coisas que você pode muito bem escolher escrever em assembléia, clientes rápidos, de baixa potência, baixo custo e satisfeitos.

Dependendo do seu histórico até agora, talvez você não deva se preocupar em escrever em todos os montadores e talvez nos aspectos de engenharia elétrica incorporados aos microcontroladores, ler esquemas, saber qual coletor aberto, estado tri, push pull, pwm, adc, dac e um lista longa de outros termos e como usá-los. bit bang i2c, spi, mdio, dallas one wire, etc. Usando um escopo como depurador de software. Embora os escopos possam destacar coisas para você hoje (um item de custo extra), você deve poder observar o i2c e o spi e alguns outros protocolos sem os destaques.

Também recomendo que, para cada uma das plataformas com as quais você joga, saia da caixa de areia de outra pessoa (o ambiente de programação / ide do Arduino, por exemplo). Escreva o código de inicialização que leva o processador da redefinição para o seu programa main (), faça o máximo possível para entender como carregar / programar o flash até o ponto que possa envolver a gravação do seu próprio carregador, mesmo que os de prateleira estejam há. É uma questão de educação pessoal, quanto mais você souber e puder retirar do bolso de trás e usar mais controle sobre a sua carreira e mais zeros no final do número do seu salário.

Faça o que fizer, NÃO, tente aprender x86 como seu primeiro montador em uma área de trabalho, escolha praticamente qualquer outra coisa e compile e simule, ARM, THUMB, MSP430, PIC, AVR, até 6502, 8051. x86 é uma instrução horrível definido e, como resultado, foi transformado e modelado de várias maneiras: microcodificado, não microcodificado, multicore, etc. Mantenha o x86 em idiomas de alto nível e sistemas operacionais volumosos. Use-o para o seu editor de texto e compiladores e mire em outra coisa.

Desculpe pela resposta longa ... espero que tenha sido útil.

old_timer
fonte
hmmm, se a pergunta era como os profissionais escolhem o tamanho do flash. Às vezes, escreva algum código que se assemelhe à solução, compile e veja qual o tamanho. Se um rtos for usado, pegue algumas amostras e dimensione-as e adicione um fator de correção para o código que você adicionará. Muito disso tem a ver com a experiência pessoal na estimativa. Freqüentemente, você pode optar por estimar e dobrá-lo para o caso de seu chefe poder dobrar sua estimativa para que ele / ela não tenha problemas e assim por diante. E isso pode ajudar porque, uma vez implementado, você pode mudar para a parte menor e ser um herói com a economia.
old_timer 25/02
11
Apesar de comprimento I encontrar esta resposta muito boa
Sarrk
3

A melhor maneira de determinar os requisitos de flash / RAM para o seu projeto é criar um protótipo e medi-lo.

Implemente os algoritmos principais em um PC e calcule o tamanho do código do objeto e do uso da RAM. Isso lhe dará uma estimativa aproximada para trabalhar.

Não se esqueça de adicionar mais ao seu orçamento se você estiver utilizando recursos do sistema operacional, como stdio ou gerenciamento de memória.

Não há uma maneira direta de comparar Linhas de Código com o tamanho do código compilado. Mas você pode comparar arquiteturas de processador em termos de densidade de código.

Toby Jaffey
fonte
3

Acho que a melhor maneira de entender quais são seus requisitos, neste caso em termos de memória, é obter algumas amostras de um MCU, programá-lo e ver quantas memórias estão sendo usadas. De fato, isso dependerá do compilador usado. Se for a primeira vez que você programa um MCU, não se preocupe muito com as especificações. Basta selecionar um com muita memória, muitos periféricos, etc. Dessa forma, você pode aprender muito com apenas um MCU. Quando você faz seu primeiro projeto com esse MCU, terá uma noção melhor de memória necessária para outros projetos.

O MCU mais apropriado para uma tarefa? Quantos canais ADC você precisa? E o DAC? O que é mais importante em sua aplicação: desempenho ou baixo consumo de energia? É esse tipo de pergunta que você precisa responder ao selecionar um MCU específico.

msr
fonte
3

Escolha um microcontrolador com o conjunto de periféricos que você precisa. Provavelmente, haverá uma família de micros com periféricos iguais / similares, mas com quantidades diferentes de RAM e Flash. Comece com o chip com a maior RAM / Flash. Depois de ter um protótipo funcional, você poderá usar um micro mais barato se o seu programa for adequado.

Robert
fonte
0

Profissionais reais não escolhem um microcontrolador isoladamente, eles executam um projeto para obter lucro máximo. Dependendo dos critérios do projeto que podem fazer com que um microcontrolador seja selecionado, parece ser muito caro, mas por acaso se encaixa bem com os conhecimentos, ferramentas, bibliotecas, etc. disponíveis. Não tome decisões isoladas, lembre-se do quadro geral , especialmente a soma (custos de desenvolvimento + custos de produção)!

A maioria dos fabricantes de microcontroladores oferece faixas de chips, com o tamanho do flash um dos parâmetros que diferem entre os vários chips. Uma opção 'segura' é selecionar inicialmente o chip com o maior tamanho de flash, para que você possa reduzir se o aplicativo se encaixar em um chip menor. Mas os aplicativos tendem a crescer para se ajustar a todos os tamanhos disponíveis (e mais).

O tamanho do flash IME não é mais um grande fator de custo, mesmo o número de pinos é um fator menor, o tamanho da RAM parece ser o maior fator de custo.

Wouter van Ooijen
fonte