Memoria de programa cheia

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

Memoria de programa cheia

Mensagempor Maffeis » 20 Jun 2013 18:09

Boa noite Pessoal

Consegui encher a memoria de programa do controlador
Estou usando um LPC1114 programando com o keil
Consegui encher a memoria dele 32K
Não sei se eu choro ou fico feliz
Nunca tinha feito nada tão complexo a ponto de encher a memoria
Ou choro por naum ser taum grande e eu ter feito muita cagada

Consegui ver algumas coisas q estavam meio zuadas (bem zuadas) liberei 4K agora estou com 28k utilizados.
Em vez de usar o clear do Display 16x2 eu escrevia espaço para apagar ele, tinha arquivo anexado no projeto só por teste, biblioteca com rotinas q eu naum usava (arquivo do timer tinha rotinas de pwm por exemplo estava consumindo código se necessidade).

Eu vi que repito muitas vezes a mesma coisa no programa, sobe desce entra e volta do display todo sub-menu eu pego a tecla pressionada e faço um switch e dou o mesmo tratamento.

Vou incluir esse switch dentro da rotina de ler o teclado.

O que fazer quando isso ocorre?
Quais as dicas pra economizar memoria?

Obrigado.
Maffeis
Word
 
Mensagens: 501
Registrado em: 07 Ago 2010 19:10

Re: Memoria de programa cheia

Mensagempor Rodrigo_P_A » 20 Jun 2013 18:50

Maffeis escreveu:Boa noite Pessoal

Consegui encher a memoria de programa do controlador
Estou usando um LPC1114 programando com o keil
Consegui encher a memoria dele 32K
Não sei se eu choro ou fico feliz
Nunca tinha feito nada tão complexo a ponto de encher a memoria
Ou choro por naum ser taum grande e eu ter feito muita cagada

Consegui ver algumas coisas q estavam meio zuadas (bem zuadas) liberei 4K agora estou com 28k utilizados.
Em vez de usar o clear do Display 16x2 eu escrevia espaço para apagar ele, tinha arquivo anexado no projeto só por teste, biblioteca com rotinas q eu naum usava (arquivo do timer tinha rotinas de pwm por exemplo estava consumindo código se necessidade).

Eu vi que repito muitas vezes a mesma coisa no programa, sobe desce entra e volta do display todo sub-menu eu pego a tecla pressionada e faço um switch e dou o mesmo tratamento.

Vou incluir esse switch dentro da rotina de ler o teclado.

O que fazer quando isso ocorre?
Quais as dicas pra economizar memoria?

Obrigado.


Qual compilador você está usando?

Você já tentou ativar o modo thumb?

Não use printf , sprintf do compilador, tente ver na internet tem outros códigos menores.

Uma outra saída, se nenhuma otimização der certo, é usar o LPC1115 que tem o dobro de memória e custa pouca coisa à mais.
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Re: Memoria de programa cheia

Mensagempor Maffeis » 20 Jun 2013 21:25

Então Rodrigo estou usando o Keil 4.7
Na msm janela das otimizações tem o check box do thumb mais está inativo
A otimização Level 2 foi a que reduziu mais
Tentei fazer as rotinas ao maximo eu mesmo, peguei coisa pronta porém estudei elas entendi e troquei os comentarios pelos meus printf esse tipo de função não usei
Fiz a rotina que comentei, deu uma redução de mais 4k retirar os swtich's case

Dei uma olhada num datasheet atualizado tem de 32 48 56 e 64K no mesmo encapsulamento, acredito que sejam pino a pino
Maffeis
Word
 
Mensagens: 501
Registrado em: 07 Ago 2010 19:10

Re: Memoria de programa cheia

Mensagempor tcpipchip » 20 Jun 2013 22:01

e declarou como variaveis de 32 bits ?
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Memoria de programa cheia

Mensagempor Rodrigo_P_A » 20 Jun 2013 22:09

Maffeis escreveu:Então Rodrigo estou usando o Keil 4.7
Na msm janela das otimizações tem o check box do thumb mais está inativo
A otimização Level 2 foi a que reduziu mais
Tentei fazer as rotinas ao maximo eu mesmo, peguei coisa pronta porém estudei elas entendi e troquei os comentarios pelos meus printf esse tipo de função não usei
Fiz a rotina que comentei, deu uma redução de mais 4k retirar os swtich's case

Dei uma olhada num datasheet atualizado tem de 32 48 56 e 64K no mesmo encapsulamento, acredito que sejam pino a pino


estranho essa história dos switchs.

Sobre os LPC1115 é pino compatível sim.

Tente o seguinte: habilite microlib no keil e veja se diminui o código:
keil1.png


Bom a otimização você já ativou, só toma cuidado pra num usar no debug pq senão vão aparecer coisas estranhas para você e você começar a ficar meio maluco tentando entender hehehe
keil2.png


Sobre o modo thumb, você pode mudar dentro do código, veja este documento:
http://www.keil.com/support/man/docs/ar ... FGCHBD.htm

Ou, para habilitar um código fonte para que ele seja compilado em modo thumb, clique com o botão direito no arquivo que está no projeto, depois clique em Options aí vai abrir uma janela e vc escolhe o modo thumb. assim:
keil3.png



Mas, eu começaria seriamente a pensar em usar um LPC com uma memória flash maior, como o LPC1115.

Boa sorte
Você não está autorizado a ver ou baixar esse anexo.
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil


Re: Memoria de programa cheia

Mensagempor Maffeis » 21 Jun 2013 08:34

Valeu Rodrigo e Tcpipchip

Vou tentar as dicas passadas

o Switch q eu estou falando era um monte de ctrl-c e ctrl-v q eu tinha feito no código.

As variaveis eu tentei usar as memores possiveis.

O sw está nos 90% vou tentar terminar no lpc1114 msm, porém ficou sem folga tenho certeza q na hora q apresentar para o cliente ele vai solicitar alguma coisa diferente.

devia ter escolhido melhor no inicio do projeto

acho q esse ideia de quanto código vai usar soh a experiencia vai dizer msm
Maffeis
Word
 
Mensagens: 501
Registrado em: 07 Ago 2010 19:10

Re: Memoria de programa cheia

Mensagempor Rodrigo_P_A » 21 Jun 2013 09:15

Maffeis escreveu:Valeu Rodrigo e Tcpipchip

Vou tentar as dicas passadas

o Switch q eu estou falando era um monte de ctrl-c e ctrl-v q eu tinha feito no código.

As variaveis eu tentei usar as memores possiveis.

O sw está nos 90% vou tentar terminar no lpc1114 msm, porém ficou sem folga tenho certeza q na hora q apresentar para o cliente ele vai solicitar alguma coisa diferente.

devia ter escolhido melhor no inicio do projeto

acho q esse ideia de quanto código vai usar soh a experiencia vai dizer msm



Pois é, é difícil mensurar quanto de código vai usar.
Eu faço assim:
pego a maioria das rotinas que eu sei que vou precisar, desativo as otimizações, e compilo pra ver o tamanho do código.
Agora em produto que tem margem maior, eu já coloco logo um micro com muita memória e pronto.
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Re: Memoria de programa cheia

Mensagempor xultz » 21 Jun 2013 09:18

O que fazer quando isso ocorre?
Quais as dicas pra economizar memoria?


É muito simples de resolver, muito simples, é só fazer:
- Planejamento
- Documentação de software (antes de escrever o código)
- Revisão de código por outras pessoas
- Engenharia de software

Super simples.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: Memoria de programa cheia

Mensagempor Maffeis » 21 Jun 2013 09:52

Eu pensei nisso mesmo Rodrigo
Ver o quanto as rotinas da 485 da I2C do teclado display

E ver qual delas está tomando a maior parde do código ( O debug mostra alguma coisa do tipo)

Eu comecei o projeto pelo programador display teclado memoria e seria

Esse programa até está organizado porém fui fazendo sem muito planejamento (Está funcional porém.......)

A placa que vai executar as funçoes está bem melhor o sw já.
- especifiquei as funções dela direitinho
- maquina de estados
- rotinas criticas
- tempo do loop
Maffeis
Word
 
Mensagens: 501
Registrado em: 07 Ago 2010 19:10

Re: Memoria de programa cheia

Mensagempor andre_luis » 21 Jun 2013 13:05

Se tiver muita conta de divisão ( "/" ) implicita em float por divisor constante, que não exiga muita precisão, dá ainda pra reduzir um pouco mais, porém nada muito significativo : Basicamente, podemos substituir uma divisão por uma multiplicação seguida de shift para a direita ( ou seja, divisão por potencia de dois ).

Exemplo :

Código: Selecionar todos
Milha = Kilometro / ( 1,6 )
Milha = ( 409 * Kilometro ) / 256
Milha = ( 409 * Kilometro ) >> 8


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Memoria de programa cheia

Mensagempor tcpipchip » 21 Jun 2013 19:38

é o que esta no RESUMO.
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Memoria de programa cheia

Mensagempor vtrx » 21 Jun 2013 23:20

É interessante programar em Thumb Mode numa arquitetura 32k,não seria,digamos,disperdício?
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Memoria de programa cheia

Mensagempor KrafT » 21 Jun 2013 23:29

Os fabricantes são bem espertinhos para pegar os desavisados:

- Lançam um chip bem pelado e barato. Aí vc se empolga e adota ele. Logo as parada não cabem mais nele e vc passa a usar os irmão mais caro da família.

Esse negócio de ARM é uma baita enganação, no aspecto Memória especificada x Memória utilizada. De fato nunca entendo se a memória divulgada é de 8 ou 32 bits, e se a CPU/Compilador permitem ter variaveis de 8 bits sem perder o restante dos 24 bits... Talvez por pura preguiça de estudar o assunto. Enfim, faço o software e se não cabe, tento dar uma arrumadinha básica que se não der jeito, meto um chip maior e faço certinho o jogo do fabricante.

Acho que vou protestar contra isso, aquí na minha rua..
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Memoria de programa cheia

Mensagempor Rodrigo_P_A » 22 Jun 2013 00:09

KrafT escreveu:Os fabricantes são bem espertinhos para pegar os desavisados:

- Lançam um chip bem pelado e barato. Aí vc se empolga e adota ele. Logo as parada não cabem mais nele e vc passa a usar os irmão mais caro da família.

Esse negócio de ARM é uma baita enganação, no aspecto Memória especificada x Memória utilizada. De fato nunca entendo se a memória divulgada é de 8 ou 32 bits, e se a CPU/Compilador permitem ter variaveis de 8 bits sem perder o restante dos 24 bits... Talvez por pura preguiça de estudar o assunto. Enfim, faço o software e se não cabe, tento dar uma arrumadinha básica que se não der jeito, meto um chip maior e faço certinho o jogo do fabricante.

Acho que vou protestar contra isso, aquí na minha rua..


Precisa protestar não, recebi cotação do 1115 e ele está mais barato do que o 1114, tudo bem q eu nem cotei o 1114 dessa vez.
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Próximo

Voltar para ARM

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x