Ir ao conteúdo
  • Cadastre-se

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


chacalgbi

Posts recomendados

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?

Link para o comentário
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.

Link para o comentário
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?

Link para o comentário
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.

Link para o comentário
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!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...