por BFCardoso » 17 Set 2009 15:46
Galera....DESCOBRI O PROBLEMA....
Acho que quase a maioria quando cria um projeto no Codewarrior, isso se aplica a mim também, só se preocupa em selecionar o uC correto e depois clicar em NEXT até poder clicar em FINISH.
Quando escolhi o uC MC9S12NE64, por default o Codewarrior selecionava a opção "BANKED" quando aparecia a pergunta: "Wich memory model shall be used?".
Essa opçao faz o uC trabalhar com sua total capacidade de memória, criando um espaço chamado NON BANKED, que é acessada com 16 bits de endereço, e não 24 bits como o resto a memória.
Sendo assim é necessário selecionar a área NON BANKED para funcionar a função de interrupção. Segue um exemplo:
#pragma CODE_SEG NON_BANKED
interrupt 20 void SCI (VOID){}
#pragma CODE_SEG DEFAULT
Podemos ver o NON_BANKED declarado no arquivo .PRM.
Estas informações eu consegui depois que liguei e pedi suporte técnico em uma empresa distribuidora.
O fato de prestar atenção que ficou selecionada "BANKED" e não "SMALL" foi pura sorte.
Depois que descobri a resposta, encontrei no help do Codewarrior, em FAQ's a seguinte definição do meu problema:
QUESTION
I try to implement an interrupt routine and don't know what the following linker error means?
Link Error: L1907: Fixup overflow in _Vector_8, to my_interrupt_func type 1, at offset 0x0
ANSWER
Interrupt routines must be located in a non banked area, by using #pragma CODE_SEG NON_BANKED the interrupt routine will be located in a non banked area. Also make sure that the sectionNON_BANKED does exist in the .prm file. At the end of the interrupt routine you will need to add #pragma CODE_SEG DEFAULT, otherwise all following functions will also land in the non banked area.
RESUMINDO:
Nunca achei que um help de algum programa iria me ajudar, basta procurarmos direito.
Agora, tenho que entender direito o que é memória "bankeada" e "não bankeado".
Quem já souber, já pode postar aqui. Hehehe.
Obrigado pela ajuda de todos e espero que alguem tenha aprendido como eu.
Abraços.
Ps.: Como isso é uma informação nova para mim, posso ter escrito algo errado.