Пришлось перелезать с 2181 на 21160 и возникает куча вопросов.
В среде VDSP 2.0 SHARK появилось очень многое. Например карта памяти (*.LDF)
Теперь, возникает простейшая задача, нужно разместить в памяти массив и с ним работать долгое время. Достался мне в наследство проект со статическими адресами. Теперь меня интересует, когда я пишу нечто:
double* v=(double *)malloc(KOL_ANGLE*urr[URR_KKD]);
, где он разместит переменную v?
Привожу листинг LDF файла:
Код
ARCHITECTURE(ADSP-21160)
// ADSP-21160 Memory Map:
// ------------------------------------------------
// Internal memory 0x0000 0000 to 0x000f ffff
// ------------------------------------------------
// 0x0000 0000 to 0x0000 0?ff IOP Regs
// 0x0000 0?00 to 0x0001 ffff (reserved)
// Block 0 0x0002 0000 to 0x0002 7fff Long Word (64) Addresses
// Block 1 0x0002 8000 to 0x0002 ffff Long Word (64) Addresses
// 0x0003 0000 to 0x0003 ffff (reserved)
// Block 0 0x0004 0000 to 0x0004 ffff Normal Word (32/48) Addresses
// Block 1 0x0005 0000 to 0x0005 ffff Normal Word (32/48) Addresses
// 0x0006 0000 to 0x0007 ffff (reserved)
// Block 0 0x0008 0000 to 0x0009 ffff Short Word (16) Addresses
// Block 1 0x000a 0000 to 0x000b ffff Short Word (16) Addresses
// 0x000c 0000 to 0x000f ffff (reserved)
// ------------------------------------------------
// Multiproc memory 0x0010 0000 to 0x007f ffff
// ------------------------------------------------
// 0x0010 0000 to 0x001f ffff Hammerhead ID=001 Internal memory
// 0x0020 0000 to 0x002f ffff Hammerhead ID=010 Internal memory
// 0x0030 0000 to 0x003f ffff Hammerhead ID=011 Internal memory
// 0x0040 0000 to 0x004f ffff Hammerhead ID=100 Internal memory
// 0x0050 0000 to 0x005f ffff Hammerhead ID=101 Internal memory
// 0x0060 0000 to 0x006f ffff Hammerhead ID=110 Internal memory
// 0x0070 0000 to 0x007f ffff Hammerhead ID=all Internal memory
// ------------------------------------------------
// External memory 0x0080 0000 to 0xffff ffff
// ------------------------------------------------
//
SEARCH_DIR( $ADI_DSP\211xx\lib )
$LIBRARIES = system.dlb, libdsp160.dlb, lib160.dlb, libc160.dlb, libio160_32.dlb , libsdsp1.dlb, libsdsp2.dlb, libsdsp3.dlb;
$OBJECTS = $COMMAND_LINE_OBJECTS;
MEMORY
{
seg_rth { TYPE(PM RAM) START(0x00040000) END(0x000400ff) WIDTH(48) }
seg_init { TYPE(PM RAM) START(0x00040100) END(0x000401FF) WIDTH(48) }
seg_pmco { TYPE(PM RAM) START(0x00040200) END(0x00049000) WIDTH(48) }
seg_pmda { TYPE(PM RAM) START(0x0004e800) END(0x0004f3df) WIDTH(32) }
seg_pm_cfdn_um{ TYPE(PM RAM) START(0x0004F3E0) END(0x0004F3FF) WIDTH(32) }
seg_pm_cfdn { TYPE(PM RAM) START(0x0004F400) END(0x0004F5FF) WIDTH(32) }
seg_pm_bs { TYPE(PM RAM) START(0x0004F600) END(0x0004F7FF) WIDTH(32) }
seg_idat { TYPE(PM RAM) START(0x0004f800) END(0x0004ffff) WIDTH(32) }
seg_in { TYPE(DM RAM) START(0x00051000) END(0x000517ff) WIDTH(32) }
seg_rdat { TYPE(DM RAM) START(0x00051800) END(0x00051bff) WIDTH(32) }
seg_dm_isr { TYPE(DM RAM) START(0x00054000) END(0x00054000) WIDTH(32) }
seg_dm_cmd { TYPE(DM RAM) START(0x00054001) END(0x00054001) WIDTH(32) }
seg_dm_state { TYPE(DM RAM) START(0x00054002) END(0x00054002) WIDTH(32) }
seg_dm_source{ TYPE(DM RAM) START(0x00054003) END(0x00054003) WIDTH(32) }
seg_dm_link_buf{ TYPE(DM RAM) START(0x00054004) END(0x00054004) WIDTH(32) }
seg_dm_recieve_ack{ TYPE(DM RAM) START(0x00054005) END(0x00054005) WIDTH(32) }
seg_dm_urr { TYPE(DM RAM) START(0x00054006) END(0x00054041) WIDTH(32) }
seg_dm_akkr { TYPE(DM RAM) START(0x00054042) END(0x00054061) WIDTH(32) }
seg_dm_aksr { TYPE(DM RAM) START(0x00054062) END(0x00054071) WIDTH(32) }
seg_dm_upor { TYPE(DM RAM) START(0x00054072) END(0x000540B1) WIDTH(32) }
seg_dm_apap { TYPE(DM RAM) START(0x000540B2) END(0x000540F1) WIDTH(32) }
seg_dm_warning_excess { TYPE(DM RAM) START(0x000540F2) END(0x000540F2) WIDTH(32) }
seg_dm_link_r{ TYPE(DM RAM) START(0x000545F3) END(0x000545F3) WIDTH(32) }
seg_dm_adr_buf{ TYPE(DM RAM) START(0x000545F4) END(0x000545F4) WIDTH(32) }
seg_dmda { TYPE(DM RAM) START(0x000545F5) END(0x00055FFF) WIDTH(32) }
seg_twid { TYPE(DM RAM) START(0x00056000) END(0x00056fff) WIDTH(32) }
seg_heap { TYPE(DM RAM) START(0x0005c000) END(0x0005dfff) WIDTH(32) }
seg_addition { TYPE(DM RAM) START(0x0005e000) END(0x0005efff) WIDTH(32) }
seg_stak { TYPE(DM RAM) START(0x0005f000) END(0x0005ffff) WIDTH(32) }
}
PROCESSOR p0
{
LINK_AGAINST( $COMMAND_LINE_LINK_AGAINST)
OUTPUT( $COMMAND_LINE_OUTPUT_FILE )
SECTIONS
{
// .text output section
seg_rth
{
INPUT_SECTIONS( $OBJECTS(seg_rth) $LIBRARIES(seg_rth))
} >seg_rth
seg_init
{
INPUT_SECTIONS( $OBJECTS(seg_init) $LIBRARIES(seg_init))
} >seg_init
seg_pmco
{
INPUT_SECTIONS( $OBJECTS(seg_pmco) $LIBRARIES(seg_pmco))
} >seg_pmco
seg_addition
{
INPUT_SECTIONS( $OBJECTS(seg_addition) $LIBRARIES(seg_addition))
} > seg_addition
seg_pmda
{
INPUT_SECTIONS( $OBJECTS(seg_pmda) $LIBRARIES(seg_pmda))
} >seg_pmda
seg_pm_cfdn
{
INPUT_SECTIONS( $OBJECTS(seg_pm_cfdn) $LIBRARIES(seg_pm_cfdn))
} >seg_pm_cfdn
seg_pm_cfdn_um
{
INPUT_SECTIONS( $OBJECTS(seg_pm_cfdn_um) $LIBRARIES(seg_pm_cfdn_um))
} >seg_pm_cfdn_um
seg_pm_bs
{
INPUT_SECTIONS( $OBJECTS(seg_pm_bs) $LIBRARIES(seg_pm_bs))
} >seg_pm_bs
seg_dm_isr
{
INPUT_SECTIONS( $OBJECTS(seg_dm_isr) $LIBRARIES(seg_dm_isr))
} > seg_dm_isr
seg_dm_cmd
{
INPUT_SECTIONS( $OBJECTS(seg_dm_cmd) $LIBRARIES(seg_dm_cmd))
} > seg_dm_cmd
seg_dm_state
{
INPUT_SECTIONS( $OBJECTS(seg_dm_state) $LIBRARIES(seg_dm_state))
} > seg_dm_state
seg_dm_source
{
INPUT_SECTIONS( $OBJECTS(seg_dm_source) $LIBRARIES(seg_dm_source))
} > seg_dm_source
seg_dm_link_buf
{
INPUT_SECTIONS( $OBJECTS(seg_dm_link_buf) $LIBRARIES(seg_dm_link_buf))
} > seg_dm_link_buf
seg_dm_link_r
{
INPUT_SECTIONS( $OBJECTS(seg_dm_link_r) $LIBRARIES(seg_dm_link_r))
} > seg_dm_link_r
seg_dm_adr_buf
{
INPUT_SECTIONS( $OBJECTS(seg_dm_adr_buf) $LIBRARIES(seg_dm_adr_buf))
} > seg_dm_adr_buf
seg_dm_recieve_ack
{
INPUT_SECTIONS( $OBJECTS(seg_dm_recieve_ack) $LIBRARIES(seg_dm_recieve_ack))
} > seg_dm_recieve_ack
seg_dm_urr
{
INPUT_SECTIONS( $OBJECTS(seg_dm_urr) $LIBRARIES(seg_dm_urr))
} > seg_dm_urr
seg_dm_akkr
{
INPUT_SECTIONS( $OBJECTS(seg_dm_akkr) $LIBRARIES(seg_dm_akkr))
} > seg_dm_akkr
seg_dm_aksr
{
INPUT_SECTIONS( $OBJECTS(seg_dm_aksr) $LIBRARIES(seg_dm_aksr))
} > seg_dm_aksr
seg_dm_upor
{
INPUT_SECTIONS( $OBJECTS(seg_dm_upor) $LIBRARIES(seg_dm_upor))
} > seg_dm_upor
seg_dm_apap
{
INPUT_SECTIONS( $OBJECTS(seg_dm_apap) $LIBRARIES(seg_dm_apap))
} > seg_dm_apap
seg_dm_warning_excess
{
INPUT_SECTIONS( $OBJECTS(seg_dm_warning_excess) $LIBRARIES(seg_dm_warning_excess))
} > seg_dm_warning_excess
seg_dmda
{
INPUT_SECTIONS( $OBJECTS(seg_dmda) $LIBRARIES(seg_dmda))
} > seg_dmda
seg_twid
{
INPUT_SECTIONS( $OBJECTS(seg_twid) $LIBRARIES(seg_twid))
} > seg_twid
seg_in
{
INPUT_SECTIONS( $OBJECTS(seg_in) $LIBRARIES(seg_in))
} > seg_in
seg_rdat
{
INPUT_SECTIONS( $OBJECTS(seg_rdat) $LIBRARIES(seg_rdat))
} > seg_rdat
seg_idat
{
INPUT_SECTIONS( $OBJECTS(seg_idat) $LIBRARIES(seg_idat))
} > seg_idat
stackseg
{
// allocate a stack for the application
ldf_stack_space = .;
ldf_stack_length = MEMORY_SIZEOF(seg_stak);
} > seg_stak
heap
{
// allocate a heap for the application
ldf_heap_space = .;
ldf_heap_end = ldf_heap_space + MEMORY_SIZEOF(seg_heap) - 1;
ldf_heap_length = ldf_heap_end - ldf_heap_space;
} > seg_heap
}
}
// ADSP-21160 Memory Map:
// ------------------------------------------------
// Internal memory 0x0000 0000 to 0x000f ffff
// ------------------------------------------------
// 0x0000 0000 to 0x0000 0?ff IOP Regs
// 0x0000 0?00 to 0x0001 ffff (reserved)
// Block 0 0x0002 0000 to 0x0002 7fff Long Word (64) Addresses
// Block 1 0x0002 8000 to 0x0002 ffff Long Word (64) Addresses
// 0x0003 0000 to 0x0003 ffff (reserved)
// Block 0 0x0004 0000 to 0x0004 ffff Normal Word (32/48) Addresses
// Block 1 0x0005 0000 to 0x0005 ffff Normal Word (32/48) Addresses
// 0x0006 0000 to 0x0007 ffff (reserved)
// Block 0 0x0008 0000 to 0x0009 ffff Short Word (16) Addresses
// Block 1 0x000a 0000 to 0x000b ffff Short Word (16) Addresses
// 0x000c 0000 to 0x000f ffff (reserved)
// ------------------------------------------------
// Multiproc memory 0x0010 0000 to 0x007f ffff
// ------------------------------------------------
// 0x0010 0000 to 0x001f ffff Hammerhead ID=001 Internal memory
// 0x0020 0000 to 0x002f ffff Hammerhead ID=010 Internal memory
// 0x0030 0000 to 0x003f ffff Hammerhead ID=011 Internal memory
// 0x0040 0000 to 0x004f ffff Hammerhead ID=100 Internal memory
// 0x0050 0000 to 0x005f ffff Hammerhead ID=101 Internal memory
// 0x0060 0000 to 0x006f ffff Hammerhead ID=110 Internal memory
// 0x0070 0000 to 0x007f ffff Hammerhead ID=all Internal memory
// ------------------------------------------------
// External memory 0x0080 0000 to 0xffff ffff
// ------------------------------------------------
//
SEARCH_DIR( $ADI_DSP\211xx\lib )
$LIBRARIES = system.dlb, libdsp160.dlb, lib160.dlb, libc160.dlb, libio160_32.dlb , libsdsp1.dlb, libsdsp2.dlb, libsdsp3.dlb;
$OBJECTS = $COMMAND_LINE_OBJECTS;
MEMORY
{
seg_rth { TYPE(PM RAM) START(0x00040000) END(0x000400ff) WIDTH(48) }
seg_init { TYPE(PM RAM) START(0x00040100) END(0x000401FF) WIDTH(48) }
seg_pmco { TYPE(PM RAM) START(0x00040200) END(0x00049000) WIDTH(48) }
seg_pmda { TYPE(PM RAM) START(0x0004e800) END(0x0004f3df) WIDTH(32) }
seg_pm_cfdn_um{ TYPE(PM RAM) START(0x0004F3E0) END(0x0004F3FF) WIDTH(32) }
seg_pm_cfdn { TYPE(PM RAM) START(0x0004F400) END(0x0004F5FF) WIDTH(32) }
seg_pm_bs { TYPE(PM RAM) START(0x0004F600) END(0x0004F7FF) WIDTH(32) }
seg_idat { TYPE(PM RAM) START(0x0004f800) END(0x0004ffff) WIDTH(32) }
seg_in { TYPE(DM RAM) START(0x00051000) END(0x000517ff) WIDTH(32) }
seg_rdat { TYPE(DM RAM) START(0x00051800) END(0x00051bff) WIDTH(32) }
seg_dm_isr { TYPE(DM RAM) START(0x00054000) END(0x00054000) WIDTH(32) }
seg_dm_cmd { TYPE(DM RAM) START(0x00054001) END(0x00054001) WIDTH(32) }
seg_dm_state { TYPE(DM RAM) START(0x00054002) END(0x00054002) WIDTH(32) }
seg_dm_source{ TYPE(DM RAM) START(0x00054003) END(0x00054003) WIDTH(32) }
seg_dm_link_buf{ TYPE(DM RAM) START(0x00054004) END(0x00054004) WIDTH(32) }
seg_dm_recieve_ack{ TYPE(DM RAM) START(0x00054005) END(0x00054005) WIDTH(32) }
seg_dm_urr { TYPE(DM RAM) START(0x00054006) END(0x00054041) WIDTH(32) }
seg_dm_akkr { TYPE(DM RAM) START(0x00054042) END(0x00054061) WIDTH(32) }
seg_dm_aksr { TYPE(DM RAM) START(0x00054062) END(0x00054071) WIDTH(32) }
seg_dm_upor { TYPE(DM RAM) START(0x00054072) END(0x000540B1) WIDTH(32) }
seg_dm_apap { TYPE(DM RAM) START(0x000540B2) END(0x000540F1) WIDTH(32) }
seg_dm_warning_excess { TYPE(DM RAM) START(0x000540F2) END(0x000540F2) WIDTH(32) }
seg_dm_link_r{ TYPE(DM RAM) START(0x000545F3) END(0x000545F3) WIDTH(32) }
seg_dm_adr_buf{ TYPE(DM RAM) START(0x000545F4) END(0x000545F4) WIDTH(32) }
seg_dmda { TYPE(DM RAM) START(0x000545F5) END(0x00055FFF) WIDTH(32) }
seg_twid { TYPE(DM RAM) START(0x00056000) END(0x00056fff) WIDTH(32) }
seg_heap { TYPE(DM RAM) START(0x0005c000) END(0x0005dfff) WIDTH(32) }
seg_addition { TYPE(DM RAM) START(0x0005e000) END(0x0005efff) WIDTH(32) }
seg_stak { TYPE(DM RAM) START(0x0005f000) END(0x0005ffff) WIDTH(32) }
}
PROCESSOR p0
{
LINK_AGAINST( $COMMAND_LINE_LINK_AGAINST)
OUTPUT( $COMMAND_LINE_OUTPUT_FILE )
SECTIONS
{
// .text output section
seg_rth
{
INPUT_SECTIONS( $OBJECTS(seg_rth) $LIBRARIES(seg_rth))
} >seg_rth
seg_init
{
INPUT_SECTIONS( $OBJECTS(seg_init) $LIBRARIES(seg_init))
} >seg_init
seg_pmco
{
INPUT_SECTIONS( $OBJECTS(seg_pmco) $LIBRARIES(seg_pmco))
} >seg_pmco
seg_addition
{
INPUT_SECTIONS( $OBJECTS(seg_addition) $LIBRARIES(seg_addition))
} > seg_addition
seg_pmda
{
INPUT_SECTIONS( $OBJECTS(seg_pmda) $LIBRARIES(seg_pmda))
} >seg_pmda
seg_pm_cfdn
{
INPUT_SECTIONS( $OBJECTS(seg_pm_cfdn) $LIBRARIES(seg_pm_cfdn))
} >seg_pm_cfdn
seg_pm_cfdn_um
{
INPUT_SECTIONS( $OBJECTS(seg_pm_cfdn_um) $LIBRARIES(seg_pm_cfdn_um))
} >seg_pm_cfdn_um
seg_pm_bs
{
INPUT_SECTIONS( $OBJECTS(seg_pm_bs) $LIBRARIES(seg_pm_bs))
} >seg_pm_bs
seg_dm_isr
{
INPUT_SECTIONS( $OBJECTS(seg_dm_isr) $LIBRARIES(seg_dm_isr))
} > seg_dm_isr
seg_dm_cmd
{
INPUT_SECTIONS( $OBJECTS(seg_dm_cmd) $LIBRARIES(seg_dm_cmd))
} > seg_dm_cmd
seg_dm_state
{
INPUT_SECTIONS( $OBJECTS(seg_dm_state) $LIBRARIES(seg_dm_state))
} > seg_dm_state
seg_dm_source
{
INPUT_SECTIONS( $OBJECTS(seg_dm_source) $LIBRARIES(seg_dm_source))
} > seg_dm_source
seg_dm_link_buf
{
INPUT_SECTIONS( $OBJECTS(seg_dm_link_buf) $LIBRARIES(seg_dm_link_buf))
} > seg_dm_link_buf
seg_dm_link_r
{
INPUT_SECTIONS( $OBJECTS(seg_dm_link_r) $LIBRARIES(seg_dm_link_r))
} > seg_dm_link_r
seg_dm_adr_buf
{
INPUT_SECTIONS( $OBJECTS(seg_dm_adr_buf) $LIBRARIES(seg_dm_adr_buf))
} > seg_dm_adr_buf
seg_dm_recieve_ack
{
INPUT_SECTIONS( $OBJECTS(seg_dm_recieve_ack) $LIBRARIES(seg_dm_recieve_ack))
} > seg_dm_recieve_ack
seg_dm_urr
{
INPUT_SECTIONS( $OBJECTS(seg_dm_urr) $LIBRARIES(seg_dm_urr))
} > seg_dm_urr
seg_dm_akkr
{
INPUT_SECTIONS( $OBJECTS(seg_dm_akkr) $LIBRARIES(seg_dm_akkr))
} > seg_dm_akkr
seg_dm_aksr
{
INPUT_SECTIONS( $OBJECTS(seg_dm_aksr) $LIBRARIES(seg_dm_aksr))
} > seg_dm_aksr
seg_dm_upor
{
INPUT_SECTIONS( $OBJECTS(seg_dm_upor) $LIBRARIES(seg_dm_upor))
} > seg_dm_upor
seg_dm_apap
{
INPUT_SECTIONS( $OBJECTS(seg_dm_apap) $LIBRARIES(seg_dm_apap))
} > seg_dm_apap
seg_dm_warning_excess
{
INPUT_SECTIONS( $OBJECTS(seg_dm_warning_excess) $LIBRARIES(seg_dm_warning_excess))
} > seg_dm_warning_excess
seg_dmda
{
INPUT_SECTIONS( $OBJECTS(seg_dmda) $LIBRARIES(seg_dmda))
} > seg_dmda
seg_twid
{
INPUT_SECTIONS( $OBJECTS(seg_twid) $LIBRARIES(seg_twid))
} > seg_twid
seg_in
{
INPUT_SECTIONS( $OBJECTS(seg_in) $LIBRARIES(seg_in))
} > seg_in
seg_rdat
{
INPUT_SECTIONS( $OBJECTS(seg_rdat) $LIBRARIES(seg_rdat))
} > seg_rdat
seg_idat
{
INPUT_SECTIONS( $OBJECTS(seg_idat) $LIBRARIES(seg_idat))
} > seg_idat
stackseg
{
// allocate a stack for the application
ldf_stack_space = .;
ldf_stack_length = MEMORY_SIZEOF(seg_stak);
} > seg_stak
heap
{
// allocate a heap for the application
ldf_heap_space = .;
ldf_heap_end = ldf_heap_space + MEMORY_SIZEOF(seg_heap) - 1;
ldf_heap_length = ldf_heap_end - ldf_heap_space;
} > seg_heap
}
}
Я конечно могу писать в статические адреса, но не хочется так делать...........