DM642应用程序移植pdf
DSP应用程序的移植和软件架构体系
一.基于X86(Pentium4)平台的VC++应用程序
如何移植到DM642平台?有哪些关键点?
关键点一:分析并提取VC++应用程序中与
算法相关的代码
算法移植的第一步就是分析并提取VC++应用程序中与算法相
关的代码,并参考VC++应用程序,重新建立算法验证的程序框架和
测试环境。
关键点二:编译器&平台相关的基本数据
类型之间的差别:
double 64-bit 64-bit
float 32-bit 32-bit
long 32-bit 40-bit
int 32-bit 32-bit
short 16-bit 16-bit
char 8-bit 8-bit
DATA TYPE VC&x86 CCS&Dm642
注:1. CCS&Dm642体系中,long型数据的取值范围是按40-bit
来计算的,而占用的存储空间却是按照64-bit来计算的; 2.VC&
x86体系中定义了bool数据类型,它占用8-bit(VC5.0 and later);
而CCS&D m642体系中并未定义bool数据类型,用户使用之前应
该自己定义;3.CCS&DSP/BIOS系统中也定义适用于不同应用场
合的数据类型预定义,具体参见头文件std.h和csl_stdinc.h;
关键点三:编译器&平台相关的序的问题
(LittleEndian/BigEndian):
31~24 23~16 15~8 7~0
31~24
23~16
15~8
7~0
7~0
15~8
23~16
31~24
高地址
LittleEndian 低地址
BigEndian
1. Dm642硬件平台的序是由Dm642芯片复
位时管脚TOUT1/LENDIAN的电平决定
(0-BigEndian/1-LittleEndian);
2. CCS编译工程之前,需要手工指定工程的
一编译设置以确定输出的模式(Project??
BuildOptions ??Compiler ??Advanced??
Endianness和CDB中);
3. X86硬件平台序的默认设置为BigEndian;
VC编译器的输出默认为BigEndian模式;
关键点四:汇编程序的处理(通常在.asm类
文件中)
很多被移植的开源项目中,譬如Xvid(Mpeg4)/X264(H.264),
很多运算量比较集中的函数,譬如FDCT/IDCT/Quant/Dequant
/SAD,都是使用mmx汇编指令来优化实现的。mmx指令是依赖于
X86平台的,所以在移植的时候要用功能完全等同的C函数来替代,
进而做算法的功能验证。(这些汇编函数也是我们以后进行汇编级
优化的重点对象.)
关键点五:二进制库调用的处理(.lib/.dll)
如果被移植的项目中调用了二进制库(.lib/.dll)中的函数,那么:
1.如果被调用的函数包括在随CCS提供的库中(rts.lib),那么无需
-修改;例如getchar()/printf()/fread()等待;
2.如果被调用的函数不包括在随CCS提供的库中,那么根据该函数
-的性质加以处理:直接删除/用功能完全等同的C函数来替代.
关键点六:存储系统的合理配置
开发VC++应用程序时,程序员无需关心堆(heap)和栈(stack)大小
的配置,因为它是由操作系统来分配管理的。而在嵌入式系统的开发
中,程序员必须根据系统的需求来合理地配置系统的存储系统。
基于DSP/BIOS(A Realtime OS)的系统中,程序员必须合理配
置如下几个内存块的大小:
1)系统堆栈--用于C环境的建立、系统的初始化、中断服务程序;
2)任务堆栈--用于任务切换时上下文环境的保存、临时变量;
3)系统的堆--用于内存的动态分配(malloc-free/MEM_alloc-free);
基于实时库+main-loop的系统中,程序员必须合理配置如下两个
内存块的大小:
1)系统堆栈--用于C环境的建立、中断服务程序;
2)系统的堆--用于内存的动态分配(malloc-free);
在算法的移植过程中,3)显得尤其需要注意,因为它比较隐蔽。
在系统的稳定性测试过程中,1)和2)显得尤其需要注意,因为它出现
比较偶然(有时也是必然)和隐蔽。
0