Memória no Arduino

As observações desse artigo são válidas para todas as placas exceto a Due, que possui uma arquitetura diferente

Existem três locais de memória no microcontrolador usado em placas Arduino baseados no AVR:

  • Memória Flash (espaço do programa), é onde o sketch do Arduino é armazenado.
  • SRAM (memória de acesso aleatório estático) é onde os sketchs criam e manipulam as variáveis quando estão em execução.
  • EEPROM é o espaço de memória que os programadores podem usar para armazenar informações de longo termo.

A memória Flash e a EEPROM são de natureza não-volátil (a informação persiste nelas mesmo depois que a energia é desligada). A memória SRAM é volátil e será perdida quando a energia é alterada entre ligada/desligada.

O chip ATmega328 encontrado na placa Uno possui as seguintes quantidades de memória:

Flash  32k bytes (of which .5k is used for the bootloader)
SRAM   2k bytes
EEPROM 1k byte

O chip ATmega2560 da placa Mega2560 possui um espaço de memória maior:

Flash  256k bytes (of which 8k is used for the bootloader)
SRAM   8k bytes
EEPROM 4k byte

Observe que não há muita memória SRAM disponível no Uno. É fácil usar toda a memória quando se tem muitas strings em seu programa. Por exemplo, uma declaração como:

char message[] = "I support the Cape Wind project.";

coloca 33 bytes na memória SRAM (cada caractere usa 1 byte, mais o ‘\0’ que indica o fim da string). Isso pode não parecer muito, mas não é preciso muito para se chegar em 2048, especialmente se você tiver uma grande de texto para ser exibida em uma tela, ou uma tabela de pesquisa grande, por exemplo.

Se você ficar sem memória RAM, seu programa pode falhar de formas inesperadas; pode parecer que foi carregada com sucesso, mas nãoser executada, ou ser executada de forma estranha. Para verificar se isso está acontecendo, pode tentar comentar or abreviar as strings ou outras estruturas de dados de seu sketch (sem alterar o código). Se dessa forma ele executar perfeitamente, você provavelmente está usando muita SRAM. Abaixo temos algumas dicas do que você pode fazer para lidar com esse problema:

  • Se o seu sketch conversa com um programa que é executado em um computador (desktop/laptop), pode tentar mudar os dados ou os cálculos para o computador, diminuindo a carga no Arduino.
  • Se você possuir tabelas de pesquisa ou outros array muito grandes, use o menor tipo de dados possível para armazenar os valores que você precisa; por exemplo, um int usa 2 bytes, enquanto um byte usa apenas um (mas pode armazenar uma faixa menor de valores).
  • Se você não precisar modificar as strings ou dados de seu programa durante a execução do mesmo, pode armazena-los na memória flash ao invés da SRAM; para fazer isso, use a palavra chave PROGMEM.

Para usar a EEPROM, veja a biblioteca EEPROM.

traduzido de arduino.cc