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. 应用程序正常初始化(0xc0150002)失败的终极解决方案

    转自VC错误:http://www.vcerror.com/?p=62 最近做一个项目写了一个VC6下的MFC程序,结果传到别人的机子上(WIN7)出现了应用程序正常初始化(0xc0150002)失败 ...

  2. Activity详解三 启动activity并返回结果 转载 https://www.cnblogs.com/androidWuYou/p/5886991.html

    首先看演示: 1 简介 .如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int ...

  3. fastjson 过滤不需要序列化的属性

    JSON JSON英文全称为JavaScriptObject Natation,采用key:value键值对的方式存贮数据,与xml格式相比,JSON是一种轻量级的数据交换格式:不要被JavaScri ...

  4. MT Call来电流程分析????

  5. 16.ajax_case06

    # 抓取华尔街见闻实时快讯 # https://wallstreetcn.com/live/global?from=navbar import requests import json header ...

  6. java_迭代器

    java的迭代器(Iterator): 一个可迭代的对象调用iterator可以得到一个迭代器对象 HasNext:判断是否还有下一个元素 next:返回迭代的元素 步骤: public static ...

  7. 使用Flume+Kafka+SparkStreaming进行实时日志分析

    每个公司想要进行数据分析或数据挖掘,收集日志.ETL都是第一步的,今天就讲一下如何实时地(准实时,每分钟分析一次)收集日志,处理日志,把处理后的记录存入Hive中,并附上完整实战代码 1. 整体架构 ...

  8. FileCloud 的原理简述&自己搭建文件云

    FileCloud 的原理简述&自己搭建文件云 copyright(c) by zcy 关于如何使用IIS创建asp服务,请读者自行研究 注:不要忘记添加入站规则 代码的存储: 根目录 fil ...

  9. react+redux+react-redux练习项目

    一,项目目录 二.1.新建pages包,在pages中新建TodoList.js: 2.新建store包,在store包中新建store.js,reducer.js,actionCreater.js, ...

  10. bzoj2209 括号序列

    题意:给你一个括号序列.操作1:询问需要更改多少个括号使之匹配. 操作2:反转序列,左括号变成右括号. 操作3:翻转序列,倒置. 标程: #include<cstdio> #include ...