Página 1 de 2

Memoria de programa cheia

MensagemEnviado: 20 Jun 2013 18:09
por Maffeis
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.

Re: Memoria de programa cheia

MensagemEnviado: 20 Jun 2013 18:50
por Rodrigo_P_A
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.

Re: Memoria de programa cheia

MensagemEnviado: 20 Jun 2013 21:25
por Maffeis
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

Re: Memoria de programa cheia

MensagemEnviado: 20 Jun 2013 22:01
por tcpipchip
e declarou como variaveis de 32 bits ?

Re: Memoria de programa cheia

MensagemEnviado: 20 Jun 2013 22:09
por Rodrigo_P_A
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

Re: Memoria de programa cheia

MensagemEnviado: 20 Jun 2013 22:11
por tcpipchip

Re: Memoria de programa cheia

MensagemEnviado: 21 Jun 2013 08:34
por Maffeis
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

Re: Memoria de programa cheia

MensagemEnviado: 21 Jun 2013 09:15
por Rodrigo_P_A
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.

Re: Memoria de programa cheia

MensagemEnviado: 21 Jun 2013 09:18
por xultz
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.

Re: Memoria de programa cheia

MensagemEnviado: 21 Jun 2013 09:52
por Maffeis
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

Re: Memoria de programa cheia

MensagemEnviado: 21 Jun 2013 13:05
por andre_luis
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


+++

Re: Memoria de programa cheia

MensagemEnviado: 21 Jun 2013 19:38
por tcpipchip
é o que esta no RESUMO.

Re: Memoria de programa cheia

MensagemEnviado: 21 Jun 2013 23:20
por vtrx
É interessante programar em Thumb Mode numa arquitetura 32k,não seria,digamos,disperdício?

Re: Memoria de programa cheia

MensagemEnviado: 21 Jun 2013 23:29
por KrafT
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..

Re: Memoria de programa cheia

MensagemEnviado: 22 Jun 2013 00:09
por Rodrigo_P_A
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.