LusoRobótica - Robótica em Português
Software => C/C++ => Tópico iniciado por: DanBar em 28 de Janeiro de 2009, 16:28
-
Existem três categorias de memória no Arduino (ATmega168):
Memória flash, é onde o Arduino armazena o "sketch".
SRAM (memória estática de acesso aleatório) é o esboço que cria e manipula variáveis quando ele é executado.
Memória EEPROM é que os programadores podem utilizar para armazenar informação a longo prazo.
Memória Flash e EEPROM memória são não-volátil (a informação persiste após o poder é desligado). SRAM é volátil e será perdido quando o poder é cíclico.
O ATmega168 chip possui as seguintes quantidades de memória:
Flash 16k bytes (2k de que é utilizado para o gestor de arranque)
SRAM 1024 bytes
EEPROM 512 bytes
Aqui fica um link muito util, de como gravar informação na memória Flash do Arduino.
http://www.arduino.cc/en/Reference/PROGMEM (http://www.arduino.cc/en/Reference/PROGMEM)
Já experimentei o seguinte projecto:
#include <avr/pgmspace.h>
prog_char string_0[] PROGMEM = "FLASH"; // "String 0" etc are strings to store - change to suit.
prog_char string_1[] PROGMEM = "Arduino";
prog_char string_2[] PROGMEM = "by";
prog_char string_3[] PROGMEM = "Daniel";
prog_char string_4[] PROGMEM = "Barradas";
prog_char string_5[] PROGMEM = "(2009)";
// Then set up a table to refer to your strings.
PGM_P string_table[] PROGMEM = // change "string_table" name to suit
{
string_0,
string_1,
string_2,
string_3,
string_4,
string_5 };
char buffer[30]; // make sure this is large enough for the largest string it must hold
void setup()
{
Serial.begin(19200); // A velocidade que eu gosto !!!
}
void loop()
{
/* Using the string table in program memory requires the use of special functions to retrieve the data.
The strcpy_P function copies a string from program space to a string in RAM ("buffer").
Make sure your receiving string in RAM is large enough to hold whatever
you are retrieving from program space. */
for (int i = 0; i < 6; i++)
{
strcpy_P(buffer, (char*)pgm_read_word(&(string_table[i]))); // Necessary casts and dereferencing, just copy.
Serial.println( buffer );
delay( 500 );
}
}
-
Muito muito interessante!!!
Poder por exemplo gravar os dados dos últimos segundos após uma falha de energia ou isso para depois ir ver o que se passou!!!
-
se falha a energia como é que guardas a info? (pergunta estupida?)
-
A fonte de alimentação pode não ser única, podes ter um condensador que aguente uns milisegundos para guardares a informação assim que detecta o corte, ou até mesmo uma mini bateria caso seja necessário ;)
-
pôr uma pilha tipo pc só pa backups.. é bem..
-
Ou então estar a gravar os dados a todo o segundo, assim quando falhasse tinha-se tudo até ao último segundo! Guardava-se tudo num buffer FIFO por exemplo.
-
Ou então estar a gravar os dados a todo o segundo, assim quando falhasse tinha-se tudo até ao último segundo! Guardava-se tudo num buffer FIFO por exemplo.
Tem o inconveniente de desgastar o chip para não falar que ao tares a fazer isso não estás a fazer outras coisas :D
-
É Verdade! :P
-
pois.. podes sp ir ao baixo nível do assembly pa o forçar a fazer duas coisas (quase) ao mesmo tempo, mas acho mt mais simples pôr a pilha.. :)
-
acho bem mais interessante ter uma pilha ou até mesmo condensador, quando falta a energia um chip externo lança uma interruption que faz mudarmos para o método que guarda essa informação enquanto há bateria.
-
kd falas de interrupções tem alguma coisa a ver com assembly? :)
-
Está-me a apetecer fazer um "black screen of death" para o LCD do nokia :P
Provocar erros propositados so para fazer mockery ao BSD!
Black screen, 3 segundos e o LCD desliga-se! Só pa testar a ideia... aaahah Mesmo inútil, mas era giro :D
-
tem a ver com cpus... hum.. o assembly também processa interrupções, ou melhor só ele é que processa pois é a única linguagem que o cpu (micro) sabe.
Contudo podes também gera-las e trabalha-las em C ou C++ que os compiladores passam para assembly. Hoje em dia ninguém precisa de descer a baixo nível a menos que queira optimizar tamanho ou velocidade de código. ;)
Está-me a apetecer fazer um "black screen of death" para o LCD do nokia :P
Provocar erros propositados so para fazer mockery ao BSD!
Black screen, 3 segundos e o LCD desliga-se! Só pa testar a ideia... aaahah Mesmo inútil, mas era giro :D
ahaha era genial :D
-
eu sei que sim, gostei mt de trabalhar com assembly.. (há dois anos, salvo erro)
black screens? tipo os azuis do windows?
-
eu sei que sim, gostei mt de trabalhar com assembly.. (há dois anos, salvo erro)
black screens? tipo os azuis do windows?
Yep yep :P
Era so pa gozar com os do windows!
-
black screens? tipo os azuis do windows?
Exactamente, mas versão nokia lcd.. ;D ;D
-
dizer k tá com pouca bateria era bom.. (tipo wall-e - eu adoro akele caixote)