Estou transportando o assunto de um outro tópico.
FernandoGarcia:
bubulindo:
Não existe diferença no consumo de memória, mas o tipo de dados que estava a ser usado anteriormente era int... não boolean.Se olhar no último post da primeira página vai perceber que a sugestão que dei usando "boolean" é a mesma coisa que você sugeriu. Por isso perguntei se tinha diferença.
Quanto a diferença entre "const int " e "const byte", eu tenho um código muito grande e consequentemente com muitas variáveis.
Percebi uma grande diferença no consumo de memória quando troquei "const int" por "const byte".Pode ver o meu código aqui:
https://github.com/FernandoGarcia/Ferduino_Portuguese/tree/master/Ferduino_Portuguese
Ele é bastante "marretado" por isso, estou sempre procurando meios de diminuir o tamanho do "sketch".
No momento ele tem este tamanho:
Binary sketch size: 234.468 bytes (of a 258.048 byte maximum)
Abraço.
bubulindo:
Ahhhh...Mas estás a falar de Flash... não de RAM. Eu falei de RAM.
Na flash, já experimentaste trocar o const int por define??
HugoPT:
Pode ver o meu código aqui:
https://github.com/FernandoGarcia/Ferduino_Portuguese/tree/master/Ferduino_Portuguese
Qual deles?
Estao lá tantosPercebi uma grande diferença no consumo de memória quando troquei "const int" por "const byte".
Sim , uma é metade de outra logo poupas-te 50 % de RAM ao trocares int por byte.
Atenção também deve ser dada ao facto da variável ser signed ou unsigned já que isso faz uma diferença enorme (2X para ser mais preciso).
Como assim 2X?
Ser signed ou unsigned apenas afeta a dimensão da variável,onde ela começa e onde acaba em termos de valor e não o que ela ocupa de RAM já que ela ao ser declarada ira ocupar sempre 2 bytes de ram quer seja signed ou unsigned
FernandoGarcia:
Olá!bubulindo:
Ahhhh...Mas estás a falar de Flash... não de RAM. Eu falei de RAM.
Na flash, já experimentaste trocar o const int por define??
Eu estava falando de RAM e depois falei de FLASH. Desculpe provoquei uma pequena confusão.
Eu tive problema com falta de RAM mas, depois que mudei as mais de 200 "strings" para PROGMEM, consegui mais de 3.000 byte livres.HugoPT:
Qual deles?
Estao lá tantosTodos os arquivos desta pasta compõem um único programa.
O programa tem mais de 15.000 linhas por isso, tive que dividir para facilitar as alterações e o entendimento.
Abraço.
Fernando Garcia
HugoPT:
Todos os arquivos desta pasta compõem um único programa.
Nós cá em Portugal ao ver uma coisa dessas dizemos: "dassssss"
Por que raio é que tens cada funçao em um ficheiro há parte tipo:
Ficheiro Senha.ino//coloca a senha em uma string
void updateStr(int val)
{
stCurrent[stCurrentLen]=val;
stCurrent[stCurrentLen+1]='\0';
stCurrentLen++;
myGLCD.setFont(BigFont);
setFont(LARGE, 0, 255, 0, 0, 0, 0);
myGLCD.print("*", 110 +((stCurrentLen -1)*16), 210);
}
Primeiro a quereres avançar com isto eu faria ficheiro.h ou .c e não os .ino já que cada ficheiro isso não é um projecto mas sim uma parte do teu programa. Depois me parece exagero fazer isso para cada função Já agora como estas a juntar essa paparoca toda?
FernandoGarcia:
A própria IDE junta.Para abrir é só clicar no arquivo que tem o mesmo nome da pasta onde estão todos.
bubulindo:
Eu não vi o teu código... hoje de manhã tinha planeado dar uma olhada e tentar espremer um pouco mais...Mas o dia descarrilou com umas obras que tenho aqui em casa.
Dito isto, porque é que não crias uma classe para usares nos teus sketches? Em vez de teres tudo separado assim... ficava tudo limpo em alguns ficheiros e os teus sketches muito mais bonitos chamando a classe que criaste.
Já pensaste nisso?
HugoPT:
Estive a olhar para algumas partes do teu codigo e devo dizer que gosto da forma como tens o codigo, mas nao da forma como estas a lidar com ele.
Isso pode até funcionar como esta mas foge as regras da boa programação.Ou crias uma class c++ como o Bubulindo te falou e com isso passas a ter métodos e variveis de instância no teu objeto com tudo o que tens ou moves isso tudo para ficheiros de extensao.h separados.
Eu criaria uma classe o que também não será difícil de fazer face ao que ja tens feito ...
No entanto há um senão, tu usas imensas variáveis que ao migra-las para uma classe elas irão ser alocadas na heap memory e não na stack o que ira comer te uma enorme RAM.
Este file EEPROM.ino ate mete medo á RAM que vai oucpar com todas estas estruturas ...
Ja agora o que esse projecto no seu todo faz?
É bem complexo