Bom dia,

estou fazendo um projeto onde tenho que guardar 10 strings de 5000 caracteres, em uma memoria nao volatil. (sera um banco de dados que pode ser modificado, por comando. )

como nao tenho espaco nem na eeprom e nem na ram, pensei em utilizar a flash.

só que o progmem nao oferece uma funcao para gravar e somente para ler.

alguem sabe onde eu encontro esta informacao? pelo que vi so é possivel com o bootloader. eu nao tenho outra saida a nao ser toda vez que for modificar, regravar o programa inteiro??

Exibições: 901

Responder esta

Respostas a este tópico

Cartão SD, pode ser uma alternativa para vc?

como tem espaco na flash, queria colocar tudo la.

mas vou dar uma pesquisada nas placas de SD

A melhor biblioteca de acesso à flash do Arduino que eu conheço é essa: http://arduiniana.org/libraries/flash/

Com ela vc declara variáveis que serão automaticamente salvas na memória flash, se livrando da amolação de lidar com ela diretamente.

Abracadabraço,

Mauro Assis

eu posso usar isso quando eu tiver rodando o programa??! 

ex:

se chegar '1' pela serial, eu leio os 100 proximos valores e gravo na flash.

se chegar '2' imprimo o que foi guardado em todos os arrays.

Cara... não sei, só testando para ver. Eu usei só como leitura.

Tempos atrás eu fiz uma rotina que lê e grava long usando a lib EEPROM.h que vem no Arduino. Vc poderia adaptá-la para string, aí vai:

void WriteLongEEPROM(byte addr, long val)
{
    for(int long offset=0;offset < sizeof(long); offset++)
    {
       long b = (val >> (offset * 8)) & B11111111;
       EEPROM.write(addr+offset,b);
    } 
}

long ReadLongEEPROM(byte addr)
{
     long result = 0;
     for(int long offset=0;offset < sizeof(long); offset++)
     {
         long b=EEPROM.read(addr+offset);
         result = result | (b (offset * 8));
     }
     return result;
}

o unico problema é que a EEPROM só cabe 4k.

vou tentar ver com a flash..se nao der, verei com o SD mesmo....

 obrigado.

PS: um shield com cartão SD também seria uma alternativa.

Acredito que seja possível, porém não sei como seria com o IDE do Arduíno pois você precisaria mudar o Linker. Assim como o Bootloader, o seu programa também pode reescrever a memória do Atmega. Esta escrita é feita em páginas e não byte a byte. De forma ao compilador não utilizar tais páginas reservadas para código você precisa modificar o linker que é o arquivo que define tudo isto. Tendo feito isto basta modificar a memória como descrito na página 269 do datasheet. 

Porém o Arduino convencional não tem memória suficiente para 50KB ou seja 5000 x 10 bytes.

O mais simples é usar uma eeprom externa ou uma flash externa.

Abraços

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço