Como otimizar o meu código.

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á tantos :grin:

Percebi 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á tantos :grin:

Todos 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... :blush: 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

Eu não vi o teu código... hoje de manhã tinha planeado dar uma olhada e tentar espremer um pouco mais... :blush: 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?

Já pensei mas, apesar da complexidade do meu código, não sei por onde começar.

Não sou programador. Sou engenheiro civil.

No momento estou precisando melhorar este código para poder acrescentar um webserver para poder usar um app.

sso 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 nunca estudei programação, aprendi sozinho revirando a internet e olhando códigos.

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

O programa controla boa parte do que se pode controlar em um aquário marinho.

Obrigado pela vossa participação.

Acho que você estão se referindo a este tipo de código.

Eu dou uma vista de olhos no teu código e se vir algo, proponho uma alteração ou outra.

Algures na net havia métodos de optimizar o código em tamanho e velocidade para AVRs... experimenta procurar por AVR e não Arduino. Muito mais informação e bem mais especifica.

Olá!

Por favor quando tiverem um pouco de tempo analisem o meu projeto.

Abraço.

DEsculpa, o trabalho tem a mania de se intrometer nestas coisas... :frowning: