一直都没有搞懂LDF文件是怎么回事,后续翻到这个文档
存储空间分布表
MEMORY
{
mem_iv_code { TYPE(PM RAM) START(0x0008C000) END(0x0008C0A7) WIDTH(48) }
mem_block0_nwco { TYPE(PM RAM) START(0x0008C0A8) END(0x0008C0FF) WIDTH(48) }
mem_block0_sw16 { TYPE(SW RAM) START(0x00124300) END(0x0013BFFF) WIDTH(16) }
mem_block1_dm32 { TYPE(DM RAM) START(0x000B2000) END(0x000BDFFF) WIDTH(32) }
mem_block2_pm32 { TYPE(PM RAM) START(0x000C0000) END(0x000C7FFF) WIDTH(32) }
mem_block3_dm32 { TYPE(DM RAM) START(0x000E0000) END(0x000E7FFF) WIDTH(32) }
mem_sram { TYPE(DM RAM ASYNCHRONOUS) START(0x0C000000) END(0x0C01FFFF) WIDTH(8) }
mem_flash { TYPE(DM RAM ASYNCHRONOUS) START(0x04000000) END(0x043FFFFF) WIDTH(8) }
mem_block0_dm32 { TYPE(DM RAM) START(0x0009DA00) END(0x0009DFFF) WIDTH(32) }
mem_block3_dm48 { TYPE(DM RAM) START(0x000E0000) END(0x000E17FF) WIDTH(48) }
mem_sdram_dmda1 { TYPE(DM RAM) START(0x00660000) END(0x00666BFF) WIDTH(16) }
}
问题1:mem_block0_sw16的含义
表示片上空间block0段定义为16bit时的存储空间,ADSP21489片上的5Mbit RAM大小一共被分配成4个block,存储分配如下
BLOCK 0 = 1.5Mbit
BLOCK 1 = 1.5Mbit
BLOCK 2 = 1Mbit
BLOCK 3 = 1Mbit
合计5Mbit
问题2:DM和PM的表面意义就是数据和程序空间的意思,但是数据空间是指的存储数据,那么程序空间是指在RAM上存储程序代码吗?
问题3:解释一下在ldf中的section是啥意思
#pragma section("ss_fw_code_fast")
void DelayMs(int nCount)
{
int i = 0;
for (i = 0; i < nCount; i++)
{
NOP;
}
}
在LDF文件中又经常看见如下
INPUT_SECTIONS( $OBJECTS(iv_code) ) INPUT_SECTIONS( $OBJS_LIBS(seg_int_code seg_init seg_pmco) )
这里个人理解借用TI DSP的cmd文件进行理解一下
{ input_sections } —— 输入段,其语法如下:花括号“{}”中是输入段名。这里对输入段和输出段做一个区分,每一个C语言文件经过编译都会生成若干个段,多个汇编语言或C语言文件生成的段大都是同名的,常见的的段有如.cinit、.ebss等,这些都属于输入段。这些归属于不同文件的输入段,在CMD文件的指示下,会被链接器链接在一起生成输出段。
问题4:解释一下在ldf中的INPUT_SECTIONS( $OBJS_LIBS(seg_int_code_sw seg_int_code) )中各种美元符$后的标志的意思
$OBJS_LIBS(seg_int_code seg_init seg_pmco)
$OBJECTS(ss_block0_data) $LIBRARIES(ss_block0_data)
os_mem1 {
INPUT_SECTIONS($OBJECTS(program))
} >mem1
os_mem2 {
INPUT_SECTIONS($OBJECTS(program))
} >mem2
找了一下原文解释
In the above example, if some of the input sections included in $OBJECTS(program) do not fit in os_mem1, the linker will try to map them into os_mem2.
在上述示例中,如果$OBJECTS(program)中包含的一些输入部分不适合os_mem1,链接器将尝试将它们映射到os_mem2。
问题5:PM和SW是什么意思
• PM - program memory, contains 6 bytes per word. • DM - data memory, contains 4 bytes per word. • DATA64 - contains 8 bytes per word. • SW - contains 2 bytes per word. ---- __SHORT_WORD_CODE__ 问题6:ldf中一些关键的段,不可修改



