Como expandir a memória do programa em um arduino?

Às vezes, fico sem espaço do tamanho do programa para o programa C embutido que desejo colocar em um arduino. Então, qual chip eu preciso para expandir a memória do programa do arduino para que eu possa usar programas C maiores com meu arduino?

Comentários

  • Considerando que um colega de nome Petri H ä kkinen put um jogo no estilo arcade em um Atmega328P, talvez você deva tentar economizar espaço em seu código? Se isso não for ‘ prático, como dizem algumas das respostas, você pode obter um chip maior com mais memória de programa. O Atmega644, por exemplo, vem em um pacote de chip DIP, entre outros.
  • Veja também forum.arduino.cc/index.php?topic= 226465.0
  • você pode explicar um pouco mais a sua resposta? 2) O Arduino possui SPI, portanto, um cartão SD pode ser acessado. Qualquer código no cartão SD precisa ser carregado na memória executável. Isso é complicado e não para iniciantes … Quer dizer que você pode alterar ou reprogramar a memória de instrução enquanto o programa está em execução? O programa em execução pode chamar o bootloader e carregar novas instruções em endereços diferentes? Isso ´ ganhou a memória do programa? Uma solução diferente pode ser identificar rutinas em seu programa e todas as ” chamar ´ s ” armazenados com os dados em uma memória externa spi … Obrigado!

Resposta

Um ATmega2560 é o chip para adicionar mais memória quando você ficar sem memória de programa em um Uno. Referindo-se à página da web Memória em arduino.cc, você “verá que tem Flash = 256 KB, SRAM = 8 KB, EEPROM = 4KB, onde o chip ATmega328 está ligado o Uno tem Flash = 32KB, SRAM = 2KB, EEPROM = 1KB.

Quando você fica sem memória de programa em um Uno, você tem cerca de três opções práticas: tornar o programa menor; remover o carregador de inicialização (para liberar um ou dois KB); use uma placa diferente com um processador mais capaz. A CPU em uma placa Uno não tem uma maneira de acessar os bytes do programa de outros lugares além do flash de 32 KB no chip. A CPU em uma placa Mega2560 começa com 8 vezes mais flash, então pode conter programas maiores do que um Uno.

Se você remover o carregador de inicialização, você pode programar usando uma placa USBASP, conforme descrito em um artigo “Programe o chip AVR usando um USBASP com cabo de 10 pinos” em learningaboutelectronics.com.

Comentários

  • mas se você liberar o bootloader, como eu usaria o IDE arduino para programar?
  • @ qwerty10, consulte o último parágrafo da edição. Arduino IDE suporta USBASP ok.
  • Não funcionaria com qualquer programador que possa fazer upload de código para ATMEGA? Em vez de apenas um USBASP. Pelo que entendi, não está realmente usando 10 pinos, mas um subconjunto desses pinos.
  • @ qwerty10, USPASP é um programador ISP (em programação de sistema). Geralmente, qualquer programador de ISP pode ser usado para programar um chip (com ou sem um bootloader nele), desde que os pinos MOSI, MISO, SCK, RST, VCC e GND estejam disponíveis no chip alvo.
  • O Unos atual usa o bootloader optiboot muito compacto. Removê-lo irá liberar apenas 512 bytes.

Resposta

Outra maneira (diferente de MCU com mais memória) é não usando o framework Arduino e suas bibliotecas. Esse nível de abstração é caro em ambos os sentidos – uso de memória e velocidade. Mas essa é a maneira muito mais difícil. Se você precisar de alguma biblioteca, deverá portá-la (se não encontrar uma nativa) ou pelo menos fornecer as funções necessárias do Arduino.

Por exemplo, no IDE do Arduino 1.6.11 esboço vazio está usando até 444 bytes de flash. Usar um pinMode e digitalWrite(13, ! digitalRead(13)); + delay(500); significa 964 bytes. Claro, estes são mais prováveis de uma única vez. Se você usar mais seis pinos e alterná-los, ele usará muito menos memória de programa do que o primeiro (1192B). Mas ainda cresce muito rápido.

Em C puro, um programa vazio tem cerca de 134 bytes. A mesma funcionalidade (alternar um pino a cada 500 ms) leva 158 bytes (e é muito mais rápido).

Mas para projetos de hobby, eu escolheria ATMega2560 ou ATMega644 / 1284.

E você pode usar o acesso direto ao hardware também. Alterne o esboço do pino com o uso de registros diretamente e _delay_ms das bibliotecas avr usa 468 bytes em vez de 964B. Com o atraso das bibliotecas principais do Arduino, é 602B.

Comentários h3>

  • Você quer dizer _delay_ms().
  • Isso tem o benefício adicional de realmente aprender sobre o mcu que você ‘ reutilizando. Os AVRs nesses Arduinos são muito mais capazes do que a ” biblioteca padrão ” faria você acreditar.++

Resposta

Que tal um raspberry pi zero ? Eu tenho alguns e os uso com frequência como arduinos.

Comentários

  • Outras arquiteturas devem ser consideradas, mas um sistema Linux embutido com inicialização obrigatória por cartão SD como o pi adiciona muita complexidade e é frágil de maneiras exclusivas, mesmo que não seja mais caro. Há muitas placas baseadas em MCUs ARM menores e mais integrados, que são muito mais semelhantes a um Arduino em termos de aplicativos, embora sejam drasticamente mais capazes. Mas se você precisa de muito processamento, ou megabytes de memória, então sim, essas complexidades começam a valer a pena.
  • Eu também prefiro o zero porque é muito flexível. Você pode adicionar mais armazenamento ou incorporá-lo em projetos ao mesmo tempo em que tem um processador grande o suficiente para fazer praticamente qualquer coisa.

Resposta

Você também pode pesquisar outras plataformas. Por exemplo, um Teensy 3.2 é compatível com Arduino e tem um eeprom de 2 KB e 64 KB de RAM.

Resposta

Quando perguntar uma ampla pergunta, é útil incluir alguns detalhes. Por exemplo, quanta memória e por que você acha que precisa.

Certa vez, especifiquei um processador com 2 KB de espaço de programa, 64 bytes de RAM e 1 KIPS. O engenheiro perguntou, MIPS, expliquei milhares por segundo. Ele respondeu, eles não vêm tão devagar. No final do projeto, uma enorme IU foi adicionada e a memória ficou apertada … mas ainda se encaixou sem problemas.

Portanto, considere ser mais cuidadoso sobre os recursos que estão sendo usados.

Para responder à pergunta:

1) O Arduino não fornece um barramento conveniente para buscar memória. Portanto, não há como conectar um chip para obter mais memória.

2) O Arduino tem SPI, portanto, um cartão SD pode ser acessado. Qualquer código no cartão SD precisaria ser carregado na memória executável. Isso é complicado e não para iniciantes …

3) Conforme sugerido, restrinja seu código. Esta é provavelmente uma boa maneira de aprender.

3) Mude para um Arduino maior.

Existem diferentes processadores Arduino. Alguns na linha ACR, outros na linha ARM. Mudar para um dispositivo diferente na mesma família é uma mudança relativamente modesta e pode fornecer até 368 bytes de FLASH de programa. Mas essas não são placas Arduino exatamente.

Os dispositivos baseados no Arduino ARM são muito diferentes e use bibliotecas diferentes.

Verifique o Arduino Mega 2560, é muito semelhante ao Uno, tem uma pegada semelhante, o código deve portar com relativa facilidade e é barato.

Existem dispositivos maiores na família AVR.

Observe, o AVR32 é um processador diferente e os periféricos são diferentes o suficiente para que seja um dispositivo diferente.

Se você deseja entrar em programas muito grandes ( gigabytes de memória) verifique o Beagleboard. Ele tem um Linux completo, com memória virtual (veja o nº 2 acima) e tem mecanismos de E / S mais poderosos.

Comentários

  • Talvez conserte alguns erros de digitação, como Wen, 3 e diferente
  • Quero dizer, se você corrigir esses erros de digitação, alguém pode votar em sua resposta …

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *