Página 1 de 1

Otimização da memoria no hitech

MensagemEnviado: 13 Dez 2007 08:49
por lafourcade
Amigos
Estou com o seguinte problema: Estou programando em c usando o hi-tech, utilizando 97% da memoria do meu microcontrolador e preciso fazer algumas atualizações. Eu percebi que conforme eu mudo as rotinas do meu codigo de lugar, trocando de lugar umas com as outras, dá diferença. sobra mais ou termina de vez. Pelo que eu entendi o hitech não vai dividir uma rotina meio grande em duas paginas, então da "estouro" quando ela começa em um end da flash no final da pagina. Eu tento trocar algumas de lugar mas as veses eu pego uma que eu escrevi no final do firmware e boto bem pra frente e não muda nada. Eu vou olhar no main.list e as grandes ainda estão no mesmo end delas. ou mudo uma rotina umas 5 linhas pra baixo e ja diz que estourou a memoria. Alguém sabe me dizer oque determina onde o Hi-tech vai alocar as rotinas na memória? Se eu consigo determinar qual o end de inicio de cada rotina eu consigo organizar melhor o meu codigo de modo a caber tudo.

Obrigado

MensagemEnviado: 13 Dez 2007 09:36
por ze
olá. que bom que não estou sozinho com estas inquietações. tive um probl. semelhante e usei a diretiva #pragma psect text=leepr. (o nome depois de text não é importante). Aparentemente isto obriga o compilador a colocar o código logo abaixo num início de página. Gentileza alguem confirmar ou não. Gostaria tbém de orientações sobre #pragma. (pregui de ler manual).
Otra cosa: por acaso está com TODOS os flags de otimzação ligados? (-o -zg9 = compilador antigo, o novo é um pouco+complicado. o mplab faz isso por caixa de verificação!)
A propósito, era o PIC18F252.

Abraço

MensagemEnviado: 13 Dez 2007 10:22
por lafourcade
Oi Amigo
Obrigado pela ajuda!
Poderia me explicar melhor como eu coloco essa diretiva no meu programa?

logo abaixo dos includes?
outra coisa: o meu compilador é a versão 9.5 e o mplab é a versão 8. Como eu uso as flags? Desculpe pela minha ignorancia, mas eu to começando agora com o hi-tech.

MensagemEnviado: 13 Dez 2007 10:53
por ze
Bem vindo ao melhor compilador do mundo!! Do universo!!
bem, no meu prog coloquei esta diretiva logo antes de uma função que suspeitei que ia ficar grande (leepr).
Assim:
#pragma psect text=leepr
void leeprom(void)
{
...
}
No mplab, vá em Project, Build Options..., Project, PICC Assembler, PICC Compiler de acione os "Enable Otimization" de todos os campos que aparecerem (1ou2).
Pode fazer o mesmo em Project, Build Options -> seu_arquivo.c
Obs: HITECH V.8.05 mas no 9.5 não deve ter mudado muito.

Para compilar via prompt (saudosismo) , veja meu c.bat:
picc18 -18f252 -o -zg9 %1.c. É só fazer c seu_arquivo (sem ext. .c)

Para a versão 9.x os comandos são 1 pouquinho só maiores. Se usa mplab, não vale a pena postar. (a não ser que insista MUITO, MUITO, MUITO)

Aprendamos juntos!!!
abraço

MensagemEnviado: 13 Dez 2007 11:19
por lafourcade
Cara
Muito Obrigado

Precisando...

abraço

MensagemEnviado: 13 Dez 2007 11:28
por LeandroPIC
Não mude suas rotinas de lugar.......!!!!!!!!!!

Fassa prototipos de todas as funções ai vc encolhe onde quer colocar as rotinas......

no arquivo.lst vc ve onde ela foi colocada ai é só mudar o prototipo.....

Resumindo..........

Otimização = prototipos das funções + arquivo.lst

MensagemEnviado: 13 Dez 2007 12:15
por ze
Lê (intimidade boiolística), gostei da idéia. Mai num tendi bem.
Pode tentar explicar melhor pra um burro véio? com ex.?
Obrigado!! (não, não! não é obrigado, é um agradecimento!)