Olá pessoal,

Alguém sabe como escrever na flash do ATmega328 em tempo de execução? Eu consigo gravar durante o carregamento do programa usando PROGMEM, depois acesso normalmente usando o pgm_read_byte. Mas como eu altero essa memória gravada em tempo de execução?

digamos assim...

PROGMEM prog_char dados[3] = { 'a', 'b' ,'c' };

void setup(){
Serial.begin(9600);
Serial.write("valores antigos = ");
Serial.write(pgm_read_byte(dados + 0));
Serial.write(pgm_read_byte(dados + 1));
Serial.write(pgm_read_byte(dados + 2));
}

void loop(){
// como mudar valor dados[0] para 'd'?
// como mudar valor dados[1] para 'e'?
// como mudar valor dados[2] para 'f'?
Serial.write("valores novos = ");
Serial.write(pgm_read_byte_near(dados + 0));
Serial.write(pgm_read_byte_near(dados + 1));
Serial.write(pgm_read_byte_near(dados + 2));

while(1);
}

Valeu!!!

Exibições: 3931

Responder esta

Respostas a este tópico

Legal. Desta forma num seria possível por exemplo carregar parte do programa por exemplo gravado em um SDCard?

O meu software residiria na memoria, e este software teria a possibilidade de carregar bytes que estão gravado no SDCard e inserir na memoria flash em seguinda fazer o jmp para esta posição de memoria.

Seria possível sim Rodrigo. ó único requisito para fazer isso e usar um código encarregado de fazer  a leitura no SDCard e gravar na área da Flash indicada por você, esse tipo de código é chamado de bootloader.

Na minha mensagem anterior neste tópico estou indicando o link de um 'application note' da Atmel no qual é implementado um bootloader.

Boa sorte,

Samuel

Sensacional

Samuel,

Muito obrigado pelos links, vou dar uma estudada e ver se consigo implementar. :)

Abraço!!

Boa sorte na implementação Marcelo,

Sugiro fazer download da versão gratuita (com restrição de tamanho do código compilado) do IAR para AVR, com isso você conseguira testar inicialmente sem necessidade de implementar nenhum código, já testado, você poderá modificar conforme suas necessidades.

Uma atividade interessante seria a migração dessa biblioteca para Arduíno, assim o pessoal poderia implementar sem maiores complicações.

Abs,

Samuel

Olá pessoal.

Caí neste tópico porque estou procurando uma solução para o seguinte problema:

Tenho um protótipo de sistema que utiliza vários arduínos, e cada um deles se comporta da memsa maneira, ou seja, o software é idêntico a todos. No entanto, cada um deles envia um código único, espécie de mac address com 24 bits, que diferencia cada um dos arduinos.

Minha idéia é facilitar a inserção deste código único através do terminal serial, ao invés de ter que modificar o código em cada um dos arduínos. Com isso, basta conectar a primeira vez o arduíno da porta serial, inserir o código nele e este código seria gravado na flash do atmega, mantendo-se mesmo quando desligado o arduíno.

Alguém tem uma idéia?

Obrigado.

Oi JSF, boa tarde,

sugiro que voce faça assim:

Verifique se tem dados na serial através da função if (Serial.available() > 0),

Se tiver algo, grave este valor na EEPROM e utilise ele, 

se não tiver então busca o que tiver na EEPROM do arduino e use.

Rui

Oi Rui.

Então eu utilizaria esta biblioteca PROGMEM para permitir a escrita na ROM, certo?

Valeu pela ajuda!

Oi JSF, 

eu recomendo a biblioteca EEPROM do site do Arduino.

https://www.arduino.cc/en/Reference/EEPROM

Rui

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2017   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço