Linux下ColdFire片内SRAM的应用程序优化设计 03
![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
Linux下ColdFire片内SRAM的应用程序优化设计 03
完成对操作系统链接文件的修改之后,使用宏定义在音频驱动程序中把相关函数和数据分别指定链接到,sramcode代码段和数据段,并由copy函数把相关函数复制到SRAM中执行。编译、链接完成后,可以在系统内核存储映射文件Sys-tem.map中查看驱动函数和数据在内存中的地址。图3显示了音频驱动函数在处理器片内SRAM中的映射地址。
![](http://embed.chinaitlab.com/UploadFiles_4615/201002/20100206103535284.jpg) 3.3 配置实时数据和函数到片内SRAM中执行
把用户空间的实时数据和函数放置到片内SRAM中执行,由于处理器可以直接从片内SRAM中存取数据和指令,减少了处理器存取数据和指令的周期,提高了程序的执行效率。首先,放置实时数据到处理器片内SRAM中。通过S_malloc和S_free函数来实现:S_malloc用来申请处理器内存空间,S_free用来对这一申请的空间进行释放。为了灵活使用定义的S_malloc和S_free函数,需要定义一个结构体和地址指针:
![](http://embed.chinaitlab.com/UploadFiles_4615/201002/20100206103535129.jpg) 然后,通过动态内存分配方式可以把MP3解码程序中的实时数据放入处理器内存中执行。加载函数到SRAM中与加载实时数据不同,需要通过指针和枚举变量来实现。首先通过一个宏定义设置每个函数大小为4 KB,并使用枚举变量为函数分配处理器片内SRAM执行的起始地址。
![](http://embed.chinaitlab.com/UploadFiles_4615/201002/20100206103535196.jpg) SRAMFUNC2=SRAM_BIG_FUNC1+BIG_FUNC_SIZE,…};
在定义完函数运行时加载的存储地址之后,把MP3解码程序中的MPEGSUB_synthesis和imdct_1等函数通过字符串拷贝的方式复制到处理器片内SRAM中执行,经过编译、链接这些函数在执行时将会加载到相应的SRAM单元块中。这样就减少了处理器执行解码函数所需的时间,提高了程序的执行效率。 |
|
|
|
|
|