原创 ADI DSP入门那点事儿--基于BF531/BF533开发板专题三【主讲LDF】

2012-5-3 10:19 2289 17 17 分类: MCU/ 嵌入式

 

 
 

LDF是ADI DSP处理器开发中的一个至关重要的技术点,也是困扰初学者的一个难点,我们为此做了一个LDF的专题,从简单易懂处入手,旨在稍微加快初学者对其的理解!

http://player.youku.com/player.php/sid/XMzI0OTcwMDMy/v.swf

优酷链接:http://v.youku.com/v_show/id_XMzI0OTcwMDMy.html

清晰版下载地址:http://115.com/file/dn8vtfbq      如需提取码,则是:dn8vtfbq

开发板链接:http://item.taobao.com/item.htm?spm=1103Qmdt.3-3dfNy.h-1Akvus&id=9026190872&

LDF专题先发布了,视频采集模块会延后,我们要再对该模块的内容进行一下调整。手把手视频即将进入高级应用代码讲解的部分。我们在讲完了Blackfin处理器的外设、各个模块驱动之后,以高级应用代码的讲解,把多个模块的驱动结合起来,以应用开发的方式展现给大家,我想这个节奏应该比较符合学习的常规过程吧

 

3.10 BF53x_LDF

3.101 模块功能介绍

ADSP上的LDF(Linker Description Files)连接器描述文件是处理器用来进行资源分配的文件,通过对LDF文件的修改,可以分配自己需要的空间片断。通常情况下,不需要对LDF文件进行修改,通过简单指令即可使用LDF文件分配的空间,本章介绍一下如何通过LDF文件指定代码使用内存。

3.102 LDF文件的生成

用Visual DSP++ 5.0  软件,连接好板卡,打开要添加LDF文件的工程,在工程名上按鼠标右键,选择“工程选项”。

1.jpg

 

在弹出窗口中选择“add Startup Code/LDF”

2.jpg

 

选择“Add an LDF and startup code”后,在左边窗口会出现关于LDF的选项操作。

3.jpg

 

如图,把使用外部SDRAM选项勾上,选择与板卡SDRAM容量匹配的选项,ADSP-EDU-BF533板卡的SDRAM容量为32MB。选好后点“确定”。

4.jpg

 

在弹出的选择框上选择“是”

5.jpg

 

在工程里会自动添加LDF及其相关文件
 

6.jpg

 

3.103 LDF文件说明

使用图形打开

在LDF文件上进行双击鼠标左键,或者按右键在弹出菜单中按下图选择,会弹出LDF文件的图形界面。

7.jpg

 

图形界面分左右两个窗口,左边为LDF文件分配的空间片断的标识符。右边为DSP整个空间的分配地址和使用情况。从左边的标识符中可以看到SDRAM区域分为sdram0,sdram0_bank1, sdram0_bank2, sdram0_bank3等区域,如果要使用SDRAM的空间,就可以通过这些描述符来定义。

8.jpg

 

可以点击右上角放大按钮,将内存分布放大,观察当前内存使用情况。

9.jpg

 

使用代码打开

在LDF文件上按右键在弹出菜单中按下图选择,会以代码方式打开文件。

10.jpg

 

在代码中,可以找到如下图代码,该代码是指定DSP所使用空间的大小分配表,可以根据需要修改其空间分配的大小。

11.jpg

 

搜索“MEM_SDRAM0_BANK1”,可以找到如下代码,该代码中调用了很多库函数,来定义空间功能,最后对该空间片断做了标识符映射,其标识符为“sdram0_bank1”,通过调用该标识符,可以使用该空间。如果自己定义一个空间片断,可以在上面的空间地址中定义一个空间片断的地址区域,注意不要使空间重复,然后复制下面的代码,建立一个自定义空间的功能描述,修改为自己定义的描述符即可。

12.jpg

 

 

在LDF文件定义空间时,常在空间片断描述符后面看到“ZERO_INIT”标志,该标志表示在编译代码时,将该段空间清为0,也可以不对该空间操作,其标识符写作“NO_INIT”

将sdram0_bank0 初始化时数据清为0:

13.jpg

 

将sdram0_bank0 初始化时保持原数据:

14.jpg

 

在正常使用时,原则上不建议大家来修改LDF的代码,以免因为LDF文件问题,为开发后期来带麻烦。

3.104 如何使用LDF文件定义的空间

要在代码中使用LDF文件定义的空间,可以通过“section(“  ***  ”)”指令来定义,“***”代表空间片断标识符,即用图形界面打开,在左边窗口中看到的空间片断名称。

如定义一个数组“buffer[10000]”,将其放到“sdram0_bank1”的空间地址中,可以定义如下:

15.jpg

 

在VDSP软件上,打开memory查看窗口

16.jpg

 

 

在窗口中输入定义的数组名称,按“回车”键,找到内存中该数组定义的位置。

17.jpg

 

从上图中可以看到,buffer这个数组被定义在了0x800000 这个地址区域,通过下图可以看出,这个地址位于sdram0_bank1的起始地址。

18.jpg

 

 

除了将一个数组定义在指定的空间片断,还可以指定一个函数,定义在指定的片断,其定义方法是在函数前面加入定义使用空间的指令。

通过memory查看器,可以看到在默认情况下,“Set_PLL” 函数是定义在地址0xffa00a1c地址,该代码断位于“L1_CODE”地址。

19.jpg

 

现指定“Set_PLL”函数将其放入“sdram0_bank2”空间

20.jpg

 

在Visual DSP++ 5.0 up 8软件上,如果定义的数组过大,超过了L1的空间,即使不使用“section”指令指定放置在SDRAM空间,系统也会自动将该数组放置在SDRAM空间中,但前提是必须使用该工程生成LDF文件。对于早期的VDSP软件版本,则没有该功能,必须指定数组放置的空间。

如果该工程没有自动生成LDF文件,也可以拷贝其他的LDF文件到该工程文件夹下,然后添加到该工程中,同样可以通过“section”指令指定使用。

3.105 代码实现功能

代码实现了通过工程生成LDF文件,通过“section”指令定义一个数组和一个函数的空间,通过memory查看器查看该数组和函数定义的空间地址。运行代码,代码会将变量i生成的数据写入buffer数组内。

3.106 测试结果

       可以看到通“section”指令指定的数组和函数位于内存中位置的变化。

文章评论0条评论)

登录后参与讨论
我要评论
0
17
关闭 站长推荐上一条 /2 下一条