[an error occurred while processing this directive]
ldf для желающих. Но проблема, IMHO, не в линковщике, а в лоадере.
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено eugene_brad 13 декабря 2002 г. 12:10
В ответ на: Может bootstream для uart криво создаётся, Вы анализировали секции (+) отправлено MIR 13 декабря 2002 г. 10:19


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

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru