www.pudn.com > Echo_Cancel.rar > ADSP-2191.ldf


 
ARCHITECTURE(ADSP-2191) 
 
SEARCH_DIR( $ADI_DSP\219x\lib ) 
 
// Example interrupt vector table 
$INTTAB    = 219x_int_tab.doj; 
 
// libsim provides fast, mostly host emulated IO only supported by 
// the simulator. The libio library provides IO processing mostly 
// done by the 219X target that is supported by the emulator and 
// simulator. Libio is the default used, but if __USING_LIBSIM is 
// defined libsim will be used. 
//   from the driver command line, use options, 
//          "-flags-link -MD__USING_LIBSIM=1" 
//   in the ide, add -MD__USING_LIBSIM=1 to the linker additional 
//   options 
 
#ifdef __USING_LIBSIM 
$IOLIB     = libsim.dlb; 
#else  // !__USING_LIBSIM 
$IOLIB     = libio.dlb; 
#endif //  __USING_LIBSIM 
 
 
// When an object that was compiled as C++ is included on the 
// link line the __cplusplus macro is defined to link with the 
// C++ libraries and runtime mechanisms. The compiler driver 
// (cc219x) should be used to link C++ compiled objects to 
// ensure that any static initialisations and template C++ 
// matters are resolved. 
 
#ifdef __cplusplus 
$CLIBS     = libc.dlb, libdsp.dlb, libcpp.dlb, libcpprt.dlb; 
$START     = 219x_cpp_hdr.doj; 
#else  // !__cplusplus 
$CLIBS     = libc.dlb, libdsp.dlb; 
$START     = 219x_hdr.doj; 
#endif //  __cplusplus 
 
 
// Libraries from the command line are included in COMMAND_LINE_OBJECTS. 
 
$OBJECTS   =	$COMMAND_LINE_OBJECTS; 
$LIBRARIES = $IOLIB, $CLIBS; 
 
// This memory map is set up to facilite testing of the tool 
// chain -- code and data area are as large as possible. Code 
// is placed in page 0, starting with space reserved for the 
// interrupt table. All data is placed in page 1. Note that 
// the run time header must initialize the data page registers 
// to 1 to match this placement of program data. All pages are 
// 64K words. 
 
MEMORY 
{ 
       // The memory section where the reset vector resides 
   mem_INT_RSTI     { TYPE(PM RAM) START(0x000000) END(0x00001f) WIDTH(24) } 
 
       // The memory sections where the interrupt vector code and an 
       // interrupt table used by library functions resides. The 
       // library functions concerned include signal(), interrupt(), 
       // raise(), and clear_interrupts() 
   mem_INT_PWRDWN   { TYPE(PM RAM) START(0x000020) END(0x00003f) WIDTH(24) } 
   mem_INT_KERNEL   { TYPE(PM RAM) START(0x000040) END(0x00005f) WIDTH(24) } 
   mem_INT_STKI     { TYPE(PM RAM) START(0x000060) END(0x00007f) WIDTH(24) } 
   mem_INT_INT4     { TYPE(PM RAM) START(0x000080) END(0x00009f) WIDTH(24) } 
   mem_INT_INT5     { TYPE(PM RAM) START(0x0000a0) END(0x0000bf) WIDTH(24) } 
   mem_INT_INT6     { TYPE(PM RAM) START(0x0000c0) END(0x0000df) WIDTH(24) } 
   mem_INT_INT7     { TYPE(PM RAM) START(0x0000e0) END(0x0000ff) WIDTH(24) } 
   mem_INT_INT8     { TYPE(PM RAM) START(0x000100) END(0x00011f) WIDTH(24) } 
   mem_INT_INT9     { TYPE(PM RAM) START(0x000120) END(0x00013f) WIDTH(24) } 
   mem_INT_INT10    { TYPE(PM RAM) START(0x000140) END(0x00015f) WIDTH(24) } 
   mem_INT_INT11    { TYPE(PM RAM) START(0x000160) END(0x00017f) WIDTH(24) } 
   mem_INT_INT12    { TYPE(PM RAM) START(0x000180) END(0x00019f) WIDTH(24) } 
   mem_INT_INT13    { TYPE(PM RAM) START(0x0001a0) END(0x0001bf) WIDTH(24) } 
   mem_INT_INT14    { TYPE(PM RAM) START(0x0001c0) END(0x0001df) WIDTH(24) } 
   mem_INT_INT15    { TYPE(PM RAM) START(0x0001e0) END(0x0001ff) WIDTH(24) } 
   mem_itab         { TYPE(PM RAM) START(0x000200) END(0x000241) WIDTH(24) } 
 
       // The default program memory used by the compiler. 
   mem_code         { TYPE(PM RAM) START(0x000242) END(0x000fff) WIDTH(24) } 
       // The default PM data memory used by the compiler. 
   mem_data2        { TYPE(PM RAM) START(0x001000) END(0x001fff) WIDTH(24) } 
 
 
       // The default DM data memory used by the compiler. 
#ifdef __cplusplus 
   mem_ctor         { TYPE(DM RAM) START(0x008000) END(0x0080FF) WIDTH(16) } 
   mem_data1        { TYPE(DM RAM) START(0x008100) END(0x00f1ff) WIDTH(16) } 
#else 
   mem_data1        { TYPE(DM RAM) START(0x008000) END(0x00f1ff) WIDTH(16) } 
#endif 
 
 
       // The memory section used for dynamic allocation routines. 
   mem_heap         { TYPE(DM RAM) START(0x00f200) END(0x00f9ff) WIDTH(16) } 
 
       // The memory section used for the software stack pointed to by  
       // STACKPOINTER(I4) and FRAMEPOINTER(I5). 
   mem_stack        { TYPE(DM RAM) START(0x00fa00) END(0x00ffff) WIDTH(16) } 
} 
 
 
 
PROCESSOR p0 
{ 
    LINK_AGAINST( $COMMAND_LINE_LINK_AGAINST) 
    OUTPUT( $COMMAND_LINE_OUTPUT_FILE ) 
 
    SECTIONS 
    { 
 
     sec_INT_RSTI { 
        INPUT_SECTIONS ( $OBJECTS( IVreset ) $LIBRARIES( IVreset ) ) 
     } > mem_INT_RSTI 
 
     sec_INT_PWRDWN { 
        INPUT_SECTIONS ( $OBJECTS( IVpwrdwn ) $LIBRARIES( IVpwrdwn ) ) 
     } > mem_INT_PWRDWN 
 
     sec_INT_STKI { 
        INPUT_SECTIONS( $OBJECTS( IVstackint ) $LIBRARIES( IVstackint ) ) 
     } > mem_INT_STKI 
 
     sec_INT_KERNEL { 
        INPUT_SECTIONS( $OBJECTS( IVkernel ) $LIBRARIES( IVkernel ) ) 
     } > mem_INT_KERNEL 
 
     sec_INT_INT4 { INPUT_SECTIONS( $OBJECTS( IVint4 ) $LIBRARIES( IVint4 ) )  
     } > mem_INT_INT4 
     sec_INT_INT5 { INPUT_SECTIONS( $OBJECTS( IVint5 ) $LIBRARIES( IVint5 ) )  
     } > mem_INT_INT5 
     sec_INT_INT6 { INPUT_SECTIONS( $OBJECTS( IVint6 ) $LIBRARIES( IVint6 ) )  
     } > mem_INT_INT6 
     sec_INT_INT7 { INPUT_SECTIONS( $OBJECTS( IVint7 ) $LIBRARIES( IVint7 ) )  
     } > mem_INT_INT7 
     sec_INT_INT8 { INPUT_SECTIONS( $OBJECTS( IVint8 ) $LIBRARIES( IVint8 ) )  
     } > mem_INT_INT8 
     sec_INT_INT9 { INPUT_SECTIONS( $OBJECTS( IVint9 ) $LIBRARIES( IVint9 ) )  
     } > mem_INT_INT9 
     sec_INT_INT10 { INPUT_SECTIONS( $OBJECTS( IVint10 ) $LIBRARIES( IVint10 ) ) 
     } > mem_INT_INT10 
     sec_INT_INT11 { INPUT_SECTIONS( $OBJECTS( IVint11 ) $LIBRARIES( IVint11 ) ) 
     } > mem_INT_INT11 
     sec_INT_INT12 { INPUT_SECTIONS( $OBJECTS( IVint12 ) $LIBRARIES( IVint12 ) ) 
     } > mem_INT_INT12 
     sec_INT_INT13 { INPUT_SECTIONS( $OBJECTS( IVint13 ) $LIBRARIES( IVint13 ) ) 
     } > mem_INT_INT13 
     sec_INT_INT14 { INPUT_SECTIONS( $OBJECTS( IVint14 ) $LIBRARIES( IVint14 ) ) 
     } > mem_INT_INT14 
     sec_INT_INT15 { INPUT_SECTIONS( $OBJECTS( IVint15 ) $LIBRARIES( IVint15 ) ) 
     } > mem_INT_INT15 
 
     sec_itab { 
         INPUT_SECTIONS( $OBJECTS(lib_int_table) $LIBRARIES(lib_int_table)) 
     } > mem_itab 
 
     sec_code { 
         INPUT_SECTIONS( $OBJECTS(program) $LIBRARIES(program) ) 
     } > mem_code 
 
     sec_data1 { 
         INPUT_SECTIONS( $OBJECTS(data1) $LIBRARIES(data1) ) 
     } > mem_data1 
 
     sec_data2 { 
         INPUT_SECTIONS( $OBJECTS(data2) $LIBRARIES(data2) ) 
     } > mem_data2 
 
 
        // provide linker variables describing the stack (grows down) 
        //   ldf_stack_limit is the lowest address in the stack 
        //   ldf_stack_base is the highest address in the stack 
     sec_stack { 
         ldf_stack_limit = .; 
         ldf_stack_base = . + MEMORY_SIZEOF(mem_stack) - 1; 
     } > mem_stack 
 
     sec_heap { 
         .heap = .; 
         .heap_size = MEMORY_SIZEOF(mem_heap); 
         .heap_end = . + MEMORY_SIZEOF(mem_heap) - 1; 
     } > mem_heap 
 
#ifdef __cplusplus 
     sec_ctor { 
         __ctors = .;    /* points to the start of the section */ 
         INPUT_SECTIONS( $OBJECTS(ctor) $LIBRARIES(ctor)) 
         INPUT_SECTIONS( $OBJECTS(ctor_end) $LIBRARIES(ctor_end)) 
     } > mem_ctor 
#endif 
 
    } // SECTIONS 
} // PROCESSOR p0 
 
// end of file