Boa tarde a todos.

Estive recentemente "apanhando" do arduino no quesito memória RAM. Minha aplicação estava consumindo memória demais e quando eu tentei acrescentar mais algumas funcionalidades o programa não mais funcionou.

Depois de muita pesquisa descobri que quando utilizados funcões como Serial.println("teste"), a string "teste" á armazenada na memória RAM e na memória de programa, mesmo se tratando de uma constante. Isso certamente era a causa do meu estouro de memória, visto que eu utilizo bastante essa função.

A solução do meu problema foi encontrada aqui:

http://playground.arduino.cc/Learning/Memory

Quando fazemos a função da seguinte maneira: Serial.println(F("teste")), o arduino apenas aloca espaço na memória de programa e não mais utiliza a RAM para armazenar a string.

Fica a dica para mais alguém que esteja passando pelo problema de falta de memória RAM!

Abraço!

Exibições: 2077

Responder esta

Respostas a este tópico

Show de dica! A comunidade agradece!

Bruno, boa noite!

Sim. Essa é uma dica importantíssima para quem trabalha com pequenos dispositivos.

Escrevi um artigo aqui no LAB baseado neste link que você passou e em outros disponíveis na Internet:

http://labdegaragem.com/profiles/blogs/artigo-arduino-e-otimiza-o-d...

Se mesmo assim  enxugando o programa , faltar memória RAM,  pode acrescentar uma RAM externa. 

A comunicação com a RAM é feita através da interface SPI. 

http://playground.arduino.cc/Main/SpiRAM

Por exemplo :

23K256 - 256K SPI Bus Low-Power Serial SRAM ( 32 KBytes) 

http://www.microchip.com/wwwproducts/en/23K256

nossa, nao sabia que tem expansao. comprei essa RAM 23K256 e EEPROM 24LC256, agora sim!!! estava usando um Mega por causa de memoria mas vou usar o Nano com essa expansao.

23K256 explicado como usar

tem de usar um divisor de tensao 100 e 330ohms.

ensinado a usar EEPROM

vlw pela dica, Murta.

Mas atenção, tanto a  memória RAM como a EEPROM podem ser usadas como armazenamento de dados. 

Não sei se dá para acrescentar código na EEPROM externa. 

Talvez sim, mas não tenho certeza. Pois terá que redirecionar o endereçamento do código. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço