AnsweredAssumed Answered

Using CW to build vector tables for the HCS12x, Linker Error L1108

Question asked by Fred Flintstone on Dec 1, 2006
Latest reply on Jan 7, 2008 by Eman Ashraf
I am using CW to create a program in C for the 9S12XDP512.  This program uses interrupts, but I have not been able to figure out how to build the vector table.  I have searched this website but not found any documentation that explains the compliation process for this particular microcontroller.  The closest I have come is document AN2216/D but that covers a different chip.  I have been trying to use the information provided there since I expect them to be similar, but nothing has worked.
Building an interrupt routine should consist of two parts: getting the ISR located at a known memory address and then getting this address loaded into the vector table position for the interrupt it is handling.  To do this I have this code:
// inside main.c
#pragma CODE_SEG __NEAR_SEG ROM_C000
#pragma TRAP_PROC
void ISR(void) { /* interesting code here */ }
// inside the PRM file
    ROM_C000 = READ_ONLY 0xC000 TO 0xFEFF
    /* other defined segments */
VECTOR 0 _Startup // provided by the project wizard tool
There is a formula to calculate 'n' in order to get the correct entry in the vector table.  However, ANY value I have tried so far produces the following error during the linking stage:
Link Error   : L1108: Initializing of Vector ISR failed because of over- or underflow of vector value
Link Error   : Link failed
I get this error whether I use the true value that I calculate from the formula or even something small like 2.  What is the real way to get your vector table built?  I cannot tell if this error is produced by trying to use a value that genuinely falls outside the range of entries in the vector table, or if I stored the function at a memory address that is too large to store as an entry in the table.  Since the function is in non-paged memory I don't see how the latter would be true.