TI公司提供了用于C语言开发的CCS(Code Composer Studio),该平台包括了优化的ANSI编译器,使之可以使用C语言开发DSP程序。这种方法不仅使DSP开发的速度大大加快,而且DSP程序的可读性和可移植性大大增加,程序修改也很方便。由于CCS是DSP的专用开发环境,因此CCS下的C与一般计算机使用的C又有所区别,主要表现在:DSP的C语言不包括同外设联系的扩展部分;DSP的C语言的编译过程分两步:首先把C编译为汇编(asm)代码,再把汇编代码编译为可执行(obj)代码,C和汇编代码直接对应,关系非常明确,便于人工优化;DSP的代码需要绝对定位,主机的C的代码由操作系统定位;DSP的C代码效率较高,非常适合于嵌入式系统。

移植过程中主要应解决如下问题:

1. 库文件的改动

因为CCS是对应DSP专用的开发环境,其支持库也和DSP硬件相联系,所以对VC的部分库函数包含的头文件要做相应的改变,使其适应CCS运行环境。例如VC中支持的malloc,calloc等动态存储分布函数,在CCS中都包含在stdlib库中,因此,必须对原来的include文件进行修改。

2. 变量存取方式的调整

在CCS中程序按段式存储,各主要段存放内容如下:

.text:存放可执行代码

.cinit:存放初始化全局变量和静态变量表

.switch:用于存放分支跳转表

.bss:存放静态和全局变量

.far:用于存放声明为far调用的全局和局部变量

.stack:存放系统栈

.system:存放动态存储空间分配堆

CCS的C编译器支持两种内存模式:小模式和大模式。不同的内存模式影响对.bss段变量的访问。程序中的全局和静态变量都分布在.bss段内,小模式下,其总和不能超过32K。

3. 数据类型的调整

CCS没有定义long long类型,long表示40长整型,double表示64位浮点型;而在VC中long和int都表示32位整型。因为C64系列通用寄存器均为32位,访问40位数据时,要对两个寄存器进行读写操作,从节约CPU处理时间角度考虑,应对其进行相应的数据类型调整。

4. 存储空间的分配

在CCS中,存储空间的分配是通过配置.cmd文件实现的。存储空间分配前,必须了解芯片整个可用的内外存储空间大小。编译后程序跑飞一般是因为是对不存在的存储区访问造成的。一般来说,有些调用比较频繁的执行代码要放在片内,提高代码的执行速度。

其次,要重新分配堆(heap)和栈(stack)的大小。通过.cmd文件中设置-heap和-stack可以实现大小的配置。heap用于动态存储空间的分配,对应于.system段,stack用于保存函数的返回地址,对应于.stack段。在视频解码过程中,存储参考帧及其它结构体需要很大的动态存储开销,应尽量多分配heap空间,而DM642片内存储空间只有1M,所以heap空间只能开在片外32M的空间中。Stack空间的分配可以根据使用情况而定,程序不正常跑飞时应注意检查是否堆栈溢出。

5. 部分结构的初始化

未赋初值的结构体成员在VC中会被自动初始化为0,而在CCS中却不会被初始化,通常会是一个比较大的数,如果不进行初始化程序就容易出错。因此,要对一些结构进行必要的初始化。

6. 数据宽度的调整

在DM642中,寄存器都是32位大小,一次可以同时处理32bit数据。如果程序中的存储地址不是合法的32位字地址,在程序装入数据的时候,LDW指令会对这个地址自动进行调整使之成为一个合法的字地址。

7.冗余代码的删除

在PC机上实现的的代码里面有许多和DSP上实现无关的代码,可以进行删除处理,以提高代码执行效率。例如,原始代码中有大量debug信息,trace信息,assert信息以及printf函数等,这些都是代码编写过程中调试所需要的信息,在实现到DSP端时,可以删除掉。还有一些数据分析计算的函数,如计算SNR的函数以及大量的统计函数,运算量也颇大,而这些函数对于我们实现一个紧凑的编码系统则可以不予考虑,没必要由DSP来同步完成。

【DM642】H.264源代码在DM642上的移植的更多相关文章

  1. FFmpeg的H.264解码器源代码简单分析:环路滤波(Loop Filter)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  2. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  3. FFmpeg的H.264解码器源代码简单分析:熵解码(Entropy Decoding)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  4. FFmpeg的H.264解码器源代码简单分析:解码器主干部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  5. FFmpeg的H.264解码器源代码简单分析:解析器(Parser)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  6. FFmpeg的H.264解码器源代码简单分析:概述

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  7. 7. H.264的句法和语义

    1.句法 在编码器输出的码流中,数据的基本单位是句法元素,每个句法元素由若干比特组成,它表示某个特定的物理意义,例如:宏块类型.量化参数等. 句法表征句法元素的组织结构,语义阐述句法元素的具体含义. ...

  8. 新手学习FFmpeg - 调用API完成录屏并进行H.264编码

    Screen Record H.264 目前在网络传输视频/音频流都一般会采用H.264进行编码,所以尝试调用FFMPEG API完成Mac录屏功能,同时编码为H.264格式. 在上一篇文章中,通过调 ...

  9. FFmpeg的H.264解码器源代码简单分析

    本文简单记录FFmpeg中libavcodec的H.264解码器(H.264 Decoder)的源代码.这个H.264解码器十分重要,可以说FFmpeg项目今天可以几乎“垄断”视音频编解码技术,很大一 ...

随机推荐

  1. VS2010-MFC(对话框:一般属性页对话框的创建及显示)

    转自:http://www.jizhuomi.com/software/169.html 属性页对话框包括向导对话框和一般属性页对话框两类,上一节演示了如何创建并显示向导对话框,本节将继续介绍一般属性 ...

  2. .NETFramework:template

    ylbtech-.NETFramework: 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://y ...

  3. jedis3.1.0在weblogic(jdk1.6)中无法运行

    文章目录 错误 探索 总结 错误 在tomcat中运行是没有问题的,可是在weblogic中是不能够运行的,weblogic中的jdk客户要求是1.6的. 如果更换版本jedis2.9.0是没有问题的 ...

  4. 夏令营501-511NOIP训练17——蛇形矩阵

    传送门:QAQQAQ 题意:话说小X在孩提时,都会做标准的蛇形矩阵了,发现很好玩.现在的小X很想对其进行改版,变为如下类型的一个无限大蛇形数阵:令S(x)表示以1为左上角,x为右下角的矩形内所有数之和 ...

  5. service资源

    service的作用:帮助外界用户访问k8s内的服务,并且提供负载均衡 创建一个service vim k8s_svc.yml apiVersion: v1 kind: Service metadat ...

  6. shell脚本练习06

    ######################################################################### # File Name: -.sh # Author ...

  7. 2、Zookeeper原理及应用汇总

    1 Zookeeper简介-分布式服务框架 ZooKeeper为分布式应用程序提供高效且可靠的分布式协调服务,提供的服务:配置管理.统一命名服务.分布式同步.组服务等,是Google Chubby的开 ...

  8. springboot导入excel到mysql

    @Controller @RequestMapping(path = "/excel") public class ImportController { @Autowired pr ...

  9. intrinsicContentSize和Content Hugging Priority

    Mgen | 首页 | | 发新文章 | 联系 | 订阅  | 管理 iOS: 在代码中使用Autolayout (2) - intrinsicContentSize和Content Hugging ...

  10. PAT甲级——A1095 Cars on Campus

    Zhejiang University has 8 campuses and a lot of gates. From each gate we can collect the in/out time ...