当前位置:网站首页>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是什么意思

边栏推荐
- Autowired注解与Resource注解的区别
- ScholarOne Manuscripts submits journal LaTeX file and cannot convert PDF successfully!
- SCI期刊最权威的信息查询步骤!
- micro-ros arduino esp32 ros2 笔记
- 吴恩达机器学习系列课程笔记——第八章:神经网络:表述(Neural Networks: Representation)
- nr部分计算
- 数据可视化之百变柱状图
- 吴恩达机器学习系列课程笔记——第九章:神经网络的学习(Neural Networks: Learning)
- 吴恩达机器学习系列课程笔记——第七章:正则化(Regularization)
- 多主复制的适用场景(1)-多IDC
猜你喜欢
随机推荐
EasyCVR视频广场切换通道,视频播放协议异常的问题修复
jetracer_pro_2GB AI Kit系统安装使用说明
树莓派上QT连接海康相机
列表总结
arr的扩展方法、数组的遍历及其他方法
QT+OPENCV+FFTW内存问题
MySQL读写分离mysql-proxy部署
科研笔记(七) 基于路径规划和WiFi指纹定位的多目的地室内导航
CaDDN代码调试
ScholarOne Manuscripts提交期刊LaTeX文件,无法成功转换PDF!
BOM学习
The CCF brush topic tour - the first topic
DOM系列之 click 延时解决方案
复制延迟案例(3)-单调读
无主复制系统(1)-节点故障时写DB
轮询和长轮询的区别
面试官:大量请求 Redis 不存在的数据,从而打倒数据库,有什么方案?
v-bind动态绑定
强化学习(西瓜书第16章)思维导图
详解CAN总线:什么是CAN总线?