Linux下ColdFire片内SRAM的应用程序优化设计

欢迎进入IT技术社区论坛,与200万技术人员互动交流 >>进入

  本文以MP3解码器为例,介绍了一种在嵌入式Linux系统下配置使用处理器片内SRAM的应用方案,有效提高了代码的解码效率,降低了执行功耗。该方案不论在性能还是成本上都得到了很大改善。

  1 硬件平台和软件架构

  硬件平台采用Freescale公司的MCF5329EVB开发板。终端硬件包括ColdFire5329处理器、32 KB的片内SRAM、1 800×600矩阵LCD显示屏、9×3阵列矩阵键盘、I2S音频解码芯片、64 MB的SDRAM、10/100M以太网接口,以及3个UART接口。软件构架如图1所示,主要包括MP3解码器、音频驱动、键盘驱动和用户图形界面(GUI)等模块。采用μClinux作为操作系统。μClinux针对嵌入式应用的特点作了较大的简化和修改,支持多种文件系统和多任务处理,而且具有相对完整的网络体系协议,因而特别适合嵌入式应用。

  2 MP3解码算法分析

  本文选用MP3解码程序作为方案验证代码。MPEG-1/2 Audio Layer 3是专门针对音乐和语音数据设计的有损压缩算法。该算法的解码过程比较复杂,主要包括反向修正离散余弦变换(IMDCT)、逆量化、Huffman解码、子带综合等功能模块。读入一段MP3数据后,首先要检测数据流中的同步字,以确定一帧数据的开始;然后提取帧头信息,特别是解码所需要的一些参数,同时分离出帧边信息和主数据;之后对边信息数据解码得到Huffman解码信息和逆量化信息,再经过重新排序、立体声处理、反混叠处理、IMDCT变换和子带综合滤波器组后,就可以得到PCM输出。

  MP3解码流程如图2所示。大致分为两个阶段,即数据流控制阶段和数值计算阶段。数据流控制阶段包括帧同步、边带信息解码和Huffman解压缩等过程。其中,Huffman解压缩是对编码数据进行操作,其他过程则是对帧控制部分进行操作。

  3 基于片内SRAM的优化设计方案

  3.1 方案分析

  SRAM指令执行速度要比DRAM快得多。Cold-Fire5329处理器内部集成了32 KB的SRAM,本设计方案将充分利用处理器片内SRAM来对解码程序进行优化。首先对源代码中的主要解码函数进行分析,如表1所列。可以看到驱动写函数(write)、子带综合(MPEGSUB_synthesis)、反向修正离散余弦变换(imdct_I)和快速离散余弦变换(fast_dct)对处理器资源消耗较大,几乎占用80%的解码时间。根据分析结果,分别把音频驱动程序和上述解码函数放进SRAM中执行,以提高流媒体解码器的执行速度,降低其对处理器资源的消耗。

  3.2 配置音频驱动程序到片内SRAM中执行

  Linux操作系统把内核和运行在其上的应用程序分成两个管理层次,也就是常说的“内核态”和“用户态”。内核态具有较高的应用权限,可以控制处理器内存的映射和分配方式。音频驱动程序是系统内核的重要组成部分,工作在内核态,实现不断从用户空间解码文件中读取音频信息,以及驱动音频芯片播放声音等相关功能。通过修改μClinux-2.6内核代码,可以将音频驱动程序配置到片内SRAM中执行,主要通过修改系统链接文件来实现。系统链接文件用于将输入文件根据一定的规则合并成一个输出文件,并对符号与地址进行绑定。

  为了在修改内核代码的同时不影响系统其他文件的正常运行,要在内核链接脚本中添加新的段区定义(.sramcode),指定该段区链接加载地址为处理器片内SRAM,并在.sramcode段区内定义代码段(.sramtext)和数据段(.sramdata),分别用于存储驱动中的代码和数据。对齐方式采用ALIGN(4),因为对32位微处理器来说,该对齐方式将有效减少处理器执行周期,提高执行效率。然后,使用2个指针_lsramcode和_lsramcodeend分别指向,sramcode段区的段首和段尾,具体实现如下:

[1][2]

擒龙要下海,打虎要上山。

Linux下ColdFire片内SRAM的应用程序优化设计

相关文章:

你感兴趣的文章:

标签云: