Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
chacalgbi

[Resolvido] Out of Rom, A segment or the program is too large MAIN

Recommended Posts

Out of Rom, A segment or the program is too large MAIN.

Compilador PCWHD Compiler 4.078.

Olá, eu sei que essa mensagem acontece quando um segmento do programa fica muito grande.

Aconteceu isso no meu código, ai eu tirei uns dois DELAYS e ele compilou corretamente.

A minha dúvida é: Com meu código "quase" do tamanho total do segmento, ele pode ficar instável? Ou isso não tem nada a ver?

Pode acontecer dele travar ou funcionar incorretamente? Ou as variáveis criadas no compilador já reservam espaço para seu tamanho total?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste, se possível o código que talvez alterando os tipos de variaveis o mesmo pode ficar ainda menor.

Falou

Compartilhar este post


Link para o post
Compartilhar em outros sites
A minha dúvida é: Com meu código "quase" do tamanho total do segmento, ele pode ficar instável? Ou isso não tem nada a ver?

Não ficará instavél,eu mesmo tenho códigos em ASM que preenchem totalmente a memoria de um 16F628A,deixando zero bytes sem uso.

Pode acontecer dele travar ou funcionar incorretamente? Ou as variáveis criadas no compilador já reservam espaço para seu tamanho total?

Isso vai depender de cada compilador,mas no geral,não reservam espaço.

Tenta fazer as rotinas fora do Main,de preferência deixar o Main por ultimo para o compilador tentar alocar espaço na memória.

voce pode tambem usar a diretiva #SEPARATE,antes das rotinas.

Cada segmento do pic é de 255 bytes,e isso equivale a 255 instruções ASM em sequencia,que é o que o compilador gera na verdade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na é uma isntrução,é uma diretiva,cada vez que o compilador encontra uma,ele sabe que é para tentar gravar o código em partes não contíguas,mas não é 100%...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo, coloquei a diretiva antes do VOID que eu achava que tava grande, acrescentei vários comandos que antes dava o problema e ele compilou beleza!:)

Outra coisa, durante uma interrupção externa, eu posso colocar um delay dentro dela?

Ex:


#int_EXT
void EXT_isr(void)
{
controle=250;
modo++;
delay_ms (300);
if (modo > 10 )
{
modo = 0;
}
}

Quando eu coloco o delay aparece o seguinte alerta ao compilar:

Interrupts disabled during call to prevent re-entrancy (@delay_ms1)

Como faço pra fazer a interrupção ser executada apenas 1 vez a cada clique? As vezes a variável incrementa 2 ou 3 vezes, a única saída que conheço é o delay. Tem outras?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste a parte do código que usou esta diretiva...

È bom ir acostumando,programar para microcontroladores não envolver saber linguagem C,tem que conhecer a arquitetura do Micro e como o compilador irá gerar o código.

Apneas códigos curtos e simples não vão apresentar erros.

Compartilhar este post


Link para o post
Compartilhar em outros sites
tb tive um problema parecido comentado no topico > http://forum.clubedohardware.com.br/limite-cases-switch/1102644

resolvi utilizar esse #SEPERATE, funcionou em cima do erro , mas teve a seguinte msg:

"error 7 ... invalid pre-processor directive"

e ai?

Qual compilador você usa? Eu usei no CCS e deu certo.

Outra coisa, coloque antes do VOID, se colocar no meio dele, dá erro!

Compartilhar este post


Link para o post
Compartilhar em outros sites
"error 7 ... invalid pre-processor directive"

Peço desculpas pelo meu erro de digitação...

A palavra reservada é :

 #SEPARATE  

Compartilhar este post


Link para o post
Compartilhar em outros sites
Peço desculpas pelo meu erro de digitação...

A palavra reservada é :

 #SEPARATE  

Rs... imaginei mesmo, testei como você postou, depois coloquei #SEPARATE e deu certo.

Pode fechar o tópico!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×