当前位置:网站首页>ADSP21489工程中LDF文件配置详解
ADSP21489工程中LDF文件配置详解
2022-08-02 03:43:00 【ToneChip】
一直都没有搞懂LDF文件是怎么回事,后续翻到这个文档<cces-LinkerUtilities-manual.pdf>才认真的看了一下
存储空间分布表
MEMORY
{
/* ADSP-21489 MEMORY MAP.
**
** The SHARC 21489 has 5Mbit RAM in total.
**
** -------------------------- BLOCK 0 ---------------------------------------
** 0x0008 C000 to 0x0009 3FFF Normal word (48) Space (1.5 Mbit RAM)
** 0x0009 2000 to 0x0009 DFFF Normal word (32) Space (1.5 Mbit RAM)
** 0x0012 4000 to 0x0013 BFFF Short word (16) Space (1.5 Mbit RAM)
**
** Notes:
** 1) The interrupt Vector Table (IVT) code is placed in internal memory
** by default and has to use ISA (NW, 48 bit) instructions.
** 2) The loader kernel uses 256 ISA instructions from the start of the
** IVT. The final action it does is to load the application code to these
** address overwriting it's own code. The application code in these
** addresses therefore must also be ISA instructions. Do not put
** VISA (SW) instructions in these 256 locations.
*/
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) }
/*
** -------------------------- BLOCK 1 ---------------------------------------
** 0x000A C000 to 0x000B 3FFF Normal word (48) Space (1.5 Mbit RAM)
** 0x000B 2000 to 0x000B DFFF Normal word (32) Space (1.5 Mbit RAM)
** 0x0016 4000 to 0x0017 BFFF Short word (16) Space (1.5 Mbit RAM)
*/
mem_block1_dm32 { TYPE(DM RAM) START(0x000B2000) END(0x000BDFFF) WIDTH(32) }
/*
** -------------------------- BLOCK 2 ---------------------------------------
** 0x000C 0000 to 0x000C 5554 Normal word (48) Space (1 Mbit RAM)
** 0x000C 0000 to 0x000C 7FFF Normal word (32) Space (1 Mbit RAM)
** 0x0018 0000 to 0x0018 FFFF Short word (16) Space (1 Mbit RAM)
*/
mem_block2_pm32 { TYPE(PM RAM) START(0x000C0000) END(0x000C7FFF) WIDTH(32) }
/*
** -------------------------- BLOCK 3 ---------------------------------------
** 0x000E 0000 to 0x000E 5554 Normal word (48) Space (1 Mbit RAM)
** 0x000E 0000 to 0x000E 7FFF Normal word (32) Space (1 Mbit RAM)
** 0x001C 0000 to 0x001C FFFF Short word (16) Space (1 Mbit RAM)
*/
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) }
/*$VDSG<insert-new-memory-segments> */
/* Text inserted between these $VDSG comments will be preserved */
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) }
/*$VDSG<insert-new-memory-segments> */
} /* MEMORY */问题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是什么意思



边栏推荐
猜你喜欢
随机推荐
8月1日“海豹数藏”将全网首发民族英雄林则徐《四行行书》数字藏品!
科研笔记(五) SLAC WiFi Fingerprint+ Step counter融合定位
多主复制下处理写冲突(1)-同步与异步冲突检测及避免冲突
ClickHouse的客户端命令行参数
Excel skills daquan
MySQL read-write separation mysql-proxy deployment
CC1101魔幻的收发切换机制
多主复制的适用场景(2)-需离线操作的客户端和协作编辑
吴恩达机器学习系列课程笔记——第十四章:降维(Dimensionality Reduction)
三维目标检测之ROS可视化
CaDDN代码调试
The CCF brush topic tour - the first topic
CaDDN paper reading of monocular 3D target detection
QObject: Cannot create children for a parent that is in a different thread.
使用Ansible编写playbook自动化安装php7.3.14
无主复制系统(3)-Quorum一致性的局限性
HyperLynx中层叠设计实例
使用 Fastai 构建食物图像分类器
Reinforcement Learning (Chapter 16 of the Watermelon Book) Mind Map
多主复制下处理写冲突(4)-多主复制拓扑









