主要讲解CE_DIR/examples/ti/sdo/ce/examles/codecs文件夹:提供实现IVIDENC接口的视频编码器


codec engine代码阅读四---CE_DIR/examples/ti/sdo/ce/examles/codecs/videnc_copy下的文件:

当完成编辑上一篇code engine代码阅读三 所涉及的两个文件之后就可以编译程序了.

需要编译的程序主要涉及CE_INSTALL_DIR/examples/ti/sdo/ce/examples下面的四个文件夹,分别为apps,codecs,extensions,servers这四个文件夹分别为编解码算法,扩展,编解码服务器和应用程序.

首先编解码算法和扩展是编解码服务器和应用程序编译的前提条件,要先一步编译.应用程序通过服务器提供的接口来调用codecs下面的算法.

我们先从codecs中某一个算法videnc_copy下手:


ls
libpackage.bldpackage.xs videnc_copy_ti.h VIDENC_COPY.xdc
makefilepackage.xdc videnc_copy.c videnc_copy_ti_priv.h VIDENC_COPY.xs

其中lib是文件夹,编译生成的库文件会放到lib下面,而未编译之前lib是空的.从哪里开始看呢?
由于我们是用make命令编译的,所以我们先来看makefile文件:


# include the files that defines XDC package, paths and build rules //要包含定义XDC包,路径和创建规则的文件.
EXAMPLES_ROOTDIR:=$(CURDIR)/../../../../../..//示例代码根目录位置.

include $(EXAMPLES_ROOTDIR)/xdcpaths.mak//包含路径相关的文件,这里面是我们填的所有工具和包的路径.

# [CE] add the examples directory itself to the list of paths to packages//把示例代码文件夹本身填加到XDC_PATH中.
XDC_PATH:=$(EXAMPLES_ROOTDIR);$(XDC_PATH)

include $(EXAMPLES_ROOTDIR)/buildutils/xdcrules.mak//包含创建规则文件xdcrules.mak
#
# @(#) ti.sdo.ce.examples.codecs.videnc_copy; 1, 0, 0,188; 4-21-2009 18:17:11; /db/atree/library/trees/ce/ce-m06x/src/
#

可见这个makefile文件告诉我们一些文具在那里,一些路径在哪里,而真正怎么创建却要看CE根目录下的buildutils/xdcrules.mak.


#
# ======== xdcrules.mak ========
# definition of XDC rules //定义XDC规则
#

# If not set in the environment, set XDCOPTIONS to verbose (the 'v' option)//如果环境变量没设XDCOPTIONS,设为v,
//这个选项的意思是打印调试消息.
XDCOPTIONS?=v

# This command actually performs the build. //这个命令实际是执行创建(编译)
# Note that the "-PD ." says "build the package in this directory ("-P ."),
# and all of the packages it depends on ("-D"). //下面的-PD的选项意思是创建当前文件夹下的代码,及所依赖的代码.
//下面是实际的编译命令,make all和make都执行下面的语句:
all:
%::
//语句意思是,执行XDC_INSTALL_DIR下的xdc ,传数参数是XDCPATH="$(XDC_PATH)" XDCOPTIONS=$(XDCOPTIONS) $@ -PD
$(XDC_INSTALL_DIR)/xdc XDCPATH="$(XDC_PATH)"\
XDCOPTIONS=$(XDCOPTIONS)$@-PD.

make时,实际上只是完成了一些变量的设定,然后就调用xdc工具了,我们得知道xdc工具的工作过程.
xdc工具包括:

j@j-desktop:/home/pheobe/davinci/xdctools_3_10_05_61$ ls
bin examplespackageuninstall
bioscfg gmake packages vers
config.jar includepackage.xdc xdc
docs jre tconf xdctools_3_10_05_61_release_notes.html
eclipse libcdb.so tconfini.tcf xs
etc libncdb.so tconf.x86U xs.x86U



OK,我承认,上次我知识不足,写到这里写不下去了,又回头看了些东西,如果大家要接着往下看,恐怕得读一下:
XDC工具使用示例
http://www.usr.cc/thread-52037-1-1.html

重新清理思路:一楼的内容是正确的,一楼说到,makefile里就是要调用xdc来编译。xdc怎么干活,看完上面链接的内容大家也都了解了。

/*!
* ======== package.xdc ========
* Simple Codec Engine compatible video "encoder".
*简易与CE兼容的视频编码器
* This codec illustrates the simplest integration into the Codec从一楼可以知道,make时,实际上只是完成了一些变量的设定,然后就调用xdc工具了,我们得知道xdc工具的工作过程.
xdc工具包括:
[code]j@j-desktop:/home/pheobe/davinci/xdctools_3_10_05_61$ ls
bin examples package uninstall
bioscfg gmake packages vers
config.jar include package.xdc xdc
docs jre tconf xdctools_3_10_05_61_release_notes.html
eclipse libcdb.so tconfini.tcf xs
etc libncdb.so tconf.x86U xs.x86U

这时我们可以查看它的 release notes :

Introduction

介绍



RTSC / XDC (eXpanDed C) is a standard for reusable software components, optimized for real-time embedded systems. RTSC components have hardware-neutral formal interfaces, are configurable offline to optimize memory and performance, and support custom automation in the development environment via a scripting language.

RTSC/XDC(eXpanDed C)是一个标准的可重用软件组件(这里显然是把xdc称为eXpanDed C的简写,而其它的文档则视为Express DSP Component的缩写),它为实时嵌入式系统进程了优化. RTSC组件有硬件中立正规接口,可以离线进行配置以优化内存和性能,另外,它还支持通过脚本语言自定义的开发环境自己化.



XDCtools 3.10.05.61 is the General Availability release of XDCtools 3.10.05. It includes the following sets of packages:

XDC包括下列的包:

Core (xdc.*) - the xdc and xs command line utilities for building packages and execting scripts, together with the packages that implement the XDC standard;

核心模块(xdc.*)--xdc和xs命令行工具,用于构建包和执行脚本.

User tools (xdc.tools.*) - command-line and graphical utilities for working with packages and repositories;

用户工具(xdc.tools.*)--命令行和图形界面工具,用于包和库相关的工作.

Targets (*.targets.*) - definitions for using various TI and third-party compiler tool chains;

目标(*.targets.*)--各种TI和第三个编译工具的定义

Platforms (*.platforms.*) - definitions for linking and running code on various TI and third-party board-level hardware and simulator products.

平台(*.platforms.*)--各种TI和第三方板级硬件及仿真器上的代码的链接和执行所需的定义.


下面我们应该看的是 package.xdc和 package.bld,因为它们定义了这个包:

/*!

*  ======== package.xdc ========

*  Simple Codec Engine compatible video "encoder".

*简易与CE兼容的视频编码器

*  This codec illustrates the simplest integration into the Codec

*  Engine.  Only three files are required to integrate into the Codec Engine:

*这个编解码器描述了CE的最简单集成,它只需三个文件用于集成.

*  @p(dlist)

*      -`package.xdc`

*          This file is required to declare a name for this package and to

*          list all codec interfaces available.

*这个文件用于声明包的名字和列出可用的接口.

*      - `VIDENC_COPY.xdc`


*          This file specifies a codec (named VIDENC_COPY) that is

*          provided by this package.

*这个文件指定了这个包所提供的编解码器,名字为VIDENC_COPY.

*      -`VIDENC_COPY.xs`

*          This file implements the functions required by the ICodec

*          interface; these functions enable the codec to describe its

*          non-functional requirements such as stack size.

*这个文件实现了ICodec接口中的函数的实现,这个函数描述的是一些非功能性的需求,如栈大小等.

*  All other files in this package are simply the implementation of the codec

*  as specified by xDM.  Thus, integration into the Codec Engine requires

*  no change to the codecs sources.

*所有其他文件用于实现xDM.

*/

package ti.sdo.ce.examples.codecs.videnc_copy [1, 0, 0] {

    module VIDENC_COPY;

}

本文件实际上就是声明了一个包,包里有一个模块叫VIDENC_COPY,描述这个模块的文件是名为VIDENC的.c .xdc .xs文件.

再看 package.bld :

var Build = xdc.useModule('xdc.bld.BuildEnvironment');  //客户程序需要的模块.

var Pkg = xdc.useModule('xdc.bld.PackageContents'); //客户程序需要的模块.



/* when constructing a release, release everything */

Pkg.attrs.exportAll = true;



// Uncomment this to build debug binaries

//Pkg.attrs.profile = "debug";



/*

* Create an array containing the files to include in this package.  Note

* that the extension is added by XDC, so it need not be explicitly specified.

var SRCS = ["videnc_copy"];//这个包会编译成一个库,编译进这个库的文件在这里列出,扩展中的无需列出.

for (var i = 0; i < Build.targets.length; i++)

{   

        var targ = Build.targets;//枚举所有的targets,如果是C64P或C674则有DMA3,可以优化,编译优化版本videnc_copy_dma.

        if (targ.name == "C64P" || targ.name == "C674")

        {            

                Pkg.addLibrary("lib/videnc_copy_dma", targ, {copts: "-DUSE_ACPY3 ",}).addObjects(SRCS);

        }

        //否则编译普便版本

        Pkg.addLibrary("lib/videnc_copy", targ).addObjects(SRCS);

}

所以包里的主文件就是 videnc_copy.c :

/*
* ======== videnc_copy.c ========
* Video Encoder "copy" algorithm.
*
* This file contains an implementation of the deprecated IVIDENC interface
* as defined by xDM 0.9.
*/
#include<xdc/std.h>
#include<string.h>

#include<ti/xdais/dm/ividenc.h>
#include<ti/sdo/ce/trace/gt.h>

#include"videnc_copy_ti.h"
#include"videnc_copy_ti_priv.h"

这里只列了头文件,videnc_copy.c的头文件里没有package/internal/videnc_copy.xdc.h的字样,但是我们看到有VIDENC_COPY.XDC这个文件了,没找到真正包含它的地方.
然后我们看 Video_COPY.XDC 吧:

/*!

*  ======== VIDENC_COPY ========

*  VIDENC_COPY codec specification

*VIDENC_COPY编解码器说明手册

*  This file specifies information necessary to integrate with the Codec

*  Engine.

*本文件特别说明了与CE集成所必需的信息。

*  By inheriting ti.sdo.ce.video.IVIDENC, VIDENC_COPY declares that it "is

*  a" video encoder algorithm.  This allows the codec engine to automatically

*  supply simple stubs and skeletons for transparent execution of DSP

*  codecs by the GPP.

*  通过继承ti.sdo.ce.video.IVIDENC,VIDENC_COPY声明它自己为一个视频编码算法。

* 这使得CE可以自动提供一个stub们和skeleton们,以实现GPP调用DSP的算法.


*  In addition to declaring the type of the VIDENC_COPY algorithm, we declare the

*  external symbol required by xDAIS that identifies the algorithms

*  implementation functions.

*除了声明算法类型,还声明了xDAIS需求实现的一些函数的外部符号.

*/

metaonly module VIDENC_COPY inherits ti.sdo.ce.video.IVIDENC

{

    override readonly config String ialgFxns = "VIDENCCOPY_TI_VIDENCCOPY";//ialgFxns函数表名字.

    override readonly config String idma3Fxns = "VIDENCCOPY_TI_IDMA3";//DMA3接口的名字,useDMA为true才有用.

    config Bool useDMA = false;//用于支持某些芯片的DMA优化算法.

}

也就是说这里声明了两个String和个Bool型常量,给C语言及其他语言用,这个文件主要用来配置这三个常量的值.

下面接着看 videnc_copy.c 的代码,我把函数体内的内容去掉,只留一个声明,我们还看框架:

IVIDENC_Fxns VIDENCCOPY_TI_VIDENCCOPY = {

{IALGFXNS},

VIDENCCOPY_TI_process,

VIDENCCOPY_TI_control,

};  //这里是填充IVIDENC_Fxns框架.



IALG_Fxns VIDENCCOPY_TI_IALG = { /* module_vendor_interface */

IALGFXNS

};//这里是填充IALG_Fxns框架





// ======== dmaChangeChannels ========

Void VIDENCCOPY_TI_dmaChangeChannels()

// ======== dmaGetChannelCnt ========

Uns VIDENCCOPY_TI_dmaGetChannelCnt(Void)

//  ======== dmaGetChannels ========

Uns VIDENCCOPY_TI_dmaGetChannels()

// ======== maInit ========

Int VIDENCCOPY_TI_dmaInit()

这一部分是实现IDMA3_Fxns框架




IDMA3_Fxns VIDENCCOPY_TI_IDMA3 = { /* module_vendor_interface */

&VIDENCCOPY_TI_IALG, /* IALG functions */

VIDENCCOPY_TI_dmaChangeChannels, /* ChangeChannels */

VIDENCCOPY_TI_dmaGetChannelCnt, /* GetChannelCnt */

VIDENCCOPY_TI_dmaGetChannels, /* GetChannels */

VIDENCCOPY_TI_dmaInit /* initialize logical channels */

};//这里填充IDMA3_Fxns框架





//======== activate ========

VIDENCCOPY_TI_activate(IALG_Handle handle)

// ======== deactivate ========

VIDENCCOPY_TI_deactivate()

// ======== alloc ========

Int VIDENCCOPY_TI_alloc()

// ======== free ========

Int VIDENCCOPY_TI_free()

// ======== initObj ========

Int VIDENCCOPY_TI_initObj()

// ======== process ========

XDAS_Int32 VIDENCCOPY_TI_process()

// ======== control ========

VIDENCCOPY_TI_control()

这里是IVIDENC_Fxns框架的实现

最后看一下 videnc_copy.xs :

*  ======== VIDENC_COPY.xs ========

*  This file implements the functions specified in the ti.sdo.ce.ICodec

*  interface.  These functions enable the configuration tool to validate

*  user supplied configuration parameters (e.g., stack size for the

*  thread running this codec).

*这个文件实现了ti.sdo.ce.ICodec接口的函数,这些函数使配置功具可以验明用户提供的配置参数.

*如栈大小等.
*/

var verbose = false;   /* set to true to enable verbose output during config */

function getStackSize (prog)
{
return (1024);
}

/*
*  ======== getDaramScratchSize ========
*/
function getDaramScratchSize(prog)
{
return (0);
}

/*
*  ======== getSaramScratchSize ========
*/
function getSaramScratchSize(prog)
{
return (1024);
}

行文到这里,videnc_copy的代码就看得差不了,现在总结一下:
package.xdc声明了包了名字为videnc_copy,并且告拆xdc工具,包内有一个模块,名为VIDENC_COPY, 它里面就这一句话:

packageti.sdo.ce.examples.codecs.videnc_copy[1,0,0]{
moduleVIDENC_COPY;
}

VIDENC_COPY这个名字指示xdc工具去看VIDENC_COPY.xdc文件,VIDENC_COPY.xdc声明了这个模块,并且告诉xdc工具,说我这个模块是继承了IVIDENC接口。

metaonlymoduleVIDENC_COPY inherits ti.sdo.ce.video.IVIDENC
{
overridereadonlyconfigStringialgFxns="VIDENCCOPY_TI_VIDENCCOPY";
overridereadonlyconfigStringidma3Fxns="VIDENCCOPY_TI_IDMA3";
configBooluseDMA=false;
}

这里体现出来xdc有点类似于c语言头文件的作用,它一直在声明一些东西,说明了包和模块的结构。



说它相当于头文件,实际上在XDC工具使用示例中第六课的内容也讲了,videnc_copy.c中的函数定义也可以放在VIDENC_COPY.xdc中的,但也可以放在.h文件中,这个代码就是放在.h文件中的,可见videnc_copy_ti_priv.h中的代码。



另一方面是package.bld文件,这个文件说明了程序怎么编译,需要哪些依赖模块,编译哪些C语言文件,生成的什么可执行文件或库。简化一点就是下面的代码:

var Build = xdc.useModule('xdc.bld.BuildEnvironment');//需要这些模块

var Pkg = xdc.useModule('xdc.bld.PackageContents');

var SRCS = ["videnc_copy"];

Pkg.addLibrary("lib/videnc_copy", targ).addObjects(SRCS);//编译videnc_copy.c文件,用它来生成lib/videnc_copy库





第三类文件是.xs文件,一个是package.xs,即包的.xs文件,另一个模块的.xs文件 VIDENC_COPY.xs,他们里面都是些函数。用于向配置工具提供一些用户配置参数。如package.xs里有两个函数是一个是getlibs函 数,根据情况会返回lib/videnc_copy.a64P ,lib/videnc_copy_dma.a64P等字符串值,即返回库文件的名字,它在xdc生成包之后调用,用以生成与目标芯片相关的链接命令脚 本,而另一个函数则是close,这个函数在xdc生成包的最后阶段调用,将一些配置参数复位。

模块相关的.xs文件是VIDENC_COPY.xs文件,它里面是一些堆栈设置的函数,一般都是直接return一个数值,或是打印一些信息。




读到这里我们似乎也有了一些印象,xdc编译时似乎要先打包(其中打包的结尾要调用close,然后生成链接脚。



下面我们编译一下,看看都做了些什么:

ti/sdo/ce/examples/codecs/videnc_copy$ make

/home/pheobe/davinci/xdctools_3_10_05_61/xdc XDCPATH="/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../..;/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages;/home/pheobe/davinci/bios_5_33_03/packages" \

                XDCOPTIONS=v all -PD .

making all: Thu Nov 3 11:12:45 EDT 2011 ...

上面这段是翻译了makefile里面的话,传换成了完整的好长的xdc命令。

======== .interfaces [/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy] ========

#

# making package.mak (because of package.bld) ...//这里是根据package.bld生成package.mak文件

package.mak也是供make命令用的,用来编译的,你可以去看看里面是什么,大致意思是利用当前文件夹的文件和生成的pakage文件夹下的文件来编译目标代码


/home/pheobe/davinci/xdctools_3_10_05_61/tconf  -//调用tconf

Dxdc.path="/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../..;/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages;/home/pheobe/davinci/bios_5_33_03/packages;/home/pheobe/davinci/xdctools_3_10_05_61/packages;../../../../../.." -Dxdc.root=/home/pheobe/davinci/xdctools_3_10_05_61 -Dxdc.hostOS=Linux -Dconfig.importPath=".;/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../..;/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages;/home/pheobe/davinci/bios_5_33_03/packages;/home/pheobe/davinci/xdctools_3_10_05_61/packages;../../../../../..;/home/pheobe/davinci/xdctools_3_10_05_61;/home/pheobe/davinci/xdctools_3_10_05_61/etc" -Dxdc.bld.targets="" -DTOOLS=   /home/pheobe/davinci/xdctools_3_10_05_61/packages/xdc/bld/bld.js /home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../../config.bld package.bld package.mak

config.bld: Running the version from Codec Engine Examples.

config.bld: loading user build configuration file   /home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/user.bld  //加载这个用户脚本文件.

building for target C64P ...  //为DSP创建

building for target GCArmv5T ...//为ARM创建


#

# generating interfaces for package ti.sdo.ce.examples.codecs.videnc_copy (because package/package.xdc.inc is older than package.xdc) ...//生成vienc_copy接口

/home/pheobe/davinci/xdctools_3_10_05_61/xs-Dxdc.path="/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../..;/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages;/home/pheobe/davinci/bios_5_33_03/packages;/home/pheobe/davinci/xdctools_3_10_05_61/packages;../../../../../.." -Dxdc.root=/home/pheobe/davinci/xdctools_3_10_05_61 -Dxdc.hostOS=Linux -Dconfig.importPath=".;/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../..;/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages;/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages;/home/pheobe/davinci/bios_5_33_03/packages;/home/pheobe/davinci/xdctools_3_10_05_61/packages;../../../../../..;/home/pheobe/davinci/xdctools_3_10_05_61;/home/pheobe/davinci/xdctools_3_10_05_61/etc" -Dxdc.bld.targets="" -DTOOLS=  -f xdc/services/intern/cmd/build.xs  -m package/package.xdc.dep -i package/package.xdc.inc package.xdc

    translating VIDENC_COPY

.interfaces files complete: Thu Nov 3 11:12:50 EDT 2011.//接口文件搞定

======== .libraries [/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy] ========

rm -f package/lib/lib/videnc_copy/package/package_ti.sdo.ce.examples.codecs.videnc_copy.ov5T

#

# clv5T package/package_ti.sdo.ce.examples.codecs.videnc_copy.c ...

/usr/local/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-gcc开始编译了-c -MD -MF package/lib/lib/videnc_copy/package/package_ti.sdo.ce.examples.codecs.videnc_copy.ov5T.dep -x c  -fPIC -Wunused -Wall -fno-strict-aliasing  -march=armv5t -Dfar=  -Dxdc_target_name__=GCArmv5T -Dxdc_target_types__=gnu/targets/arm/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_4_2_0 -O2  -I. -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../.. -I/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages -I/home/pheobe/davinci/bios_5_33_03/packages -I/home/pheobe/davinci/xdctools_3_10_05_61/packages -I../../../../../..  -o package/lib/lib/videnc_copy/package/package_ti.sdo.ce.examples.codecs.videnc_copy.ov5T package/package_ti.sdo.ce.examples.codecs.videnc_copy.c

rm -f package/lib/lib/videnc_copy/videnc_copy.ov5T

#

# clv5T videnc_copy.c ...

/usr/local/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-gcc-c -MD -MF package/lib/lib/videnc_copy/videnc_copy.ov5T.dep -x c  -fPIC -Wunused -Wall -fno-strict-aliasing  -march=armv5t -Dfar=  -Dxdc_target_name__=GCArmv5T -Dxdc_target_types__=gnu/targets/arm/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_4_2_0 -O2  -I. -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../.. -I/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages -I/home/pheobe/davinci/bios_5_33_03/packages -I/home/pheobe/davinci/xdctools_3_10_05_61/packages -I../../../../../..  -o package/lib/lib/videnc_copy/videnc_copy.ov5T videnc_copy.c

rm -f lib/videnc_copy.av5T类似的句子是删除临时文件

#

# archiving package/lib/lib/videnc_copy/package/package_ti.sdo.ce.examples.codecs.videnc_copy.ov5T package/lib/lib/videnc_copy/videnc_copy.ov5T into lib/videnc_copy.av5T ...

/usr/local/montavista/pro/devkit/arm/v5t_le/armv5tl-montavista-linux-gnueabi/bin/ar  cr lib/videnc_copy.av5T   package/lib/lib/videnc_copy/package/package_ti.sdo.ce.examples.codecs.videnc_copy.ov5T package/lib/lib/videnc_copy/videnc_copy.ov5T

rm -f package/lib/lib/videnc_copy/package/package_ti.sdo.ce.examples.codecs.videnc_copy.o64P

#

# cl64P package/package_ti.sdo.ce.examples.codecs.videnc_copy.c ...

/home/pheobe/davinci/cg6x_6_0_21_1/bin/cl6x -c这是为DSP编译-qq -pdsw225 -pden -pds=195  -mv64p -eo.o64P -ea.s64P  -Dxdc_target_name__=C64P -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_6_0_21 -O2  -I. -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../.. -I/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages -I/home/pheobe/davinci/bios_5_33_03/packages -I/home/pheobe/davinci/xdctools_3_10_05_61/packages -I../../../../../.. -I/home/pheobe/davinci/cg6x_6_0_21_1/include -fs=./package/lib/lib/videnc_copy/package -fr=./package/lib/lib/videnc_copy/package -fc package/package_ti.sdo.ce.examples.codecs.videnc_copy.c

/home/pheobe/davinci/xdctools_3_10_05_61/bin/mkdep -a package/lib/lib/videnc_copy/package/package_ti.sdo.ce.examples.codecs.videnc_copy.o64P.dep -p package/lib/lib/videnc_copy/package -s o64P package/package_ti.sdo.ce.examples.codecs.videnc_copy.c -C   -qq -pdsw225 -pden -pds=195  -mv64p -eo.o64P -ea.s64P  -Dxdc_target_name__=C64P -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_6_0_21 -O2  -I. -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../.. -I/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages -I/home/pheobe/davinci/bios_5_33_03/packages -I/home/pheobe/davinci/xdctools_3_10_05_61/packages -I../../../../../.. -I/home/pheobe/davinci/cg6x_6_0_21_1/include -fs=./package/lib/lib/videnc_copy/package -fr=./package/lib/lib/videnc_copy/package

rm -f package/lib/lib/videnc_copy/videnc_copy.o64P

#

# cl64P videnc_copy.c ...

/home/pheobe/davinci/cg6x_6_0_21_1/bin/cl6x -c  -qq -pdsw225 -pden -pds=195  -mv64p -eo.o64P -ea.s64P  -Dxdc_target_name__=C64P -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_6_0_21 -O2  -I. -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../.. -I/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages -I/home/pheobe/davinci/bios_5_33_03/packages -I/home/pheobe/davinci/xdctools_3_10_05_61/packages -I../../../../../.. -I/home/pheobe/davinci/cg6x_6_0_21_1/include -fs=./package/lib/lib/videnc_copy -fr=./package/lib/lib/videnc_copy -fc videnc_copy.c

/home/pheobe/davinci/xdctools_3_10_05_61/bin/mkdep -a package/lib/lib/videnc_copy/videnc_copy.o64P.dep -p package/lib/lib/videnc_copy -s o64P videnc_copy.c -C   -qq -pdsw225 -pden -pds=195  -mv64p -eo.o64P -ea.s64P  -Dxdc_target_name__=C64P -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_6_0_21 -O2  -I. -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../.. -I/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages -I/home/pheobe/davinci/bios_5_33_03/packages -I/home/pheobe/davinci/xdctools_3_10_05_61/packages -I../../../../../.. -I/home/pheobe/davinci/cg6x_6_0_21_1/include -fs=./package/lib/lib/videnc_copy -fr=./package/lib/lib/videnc_copy

rm -f lib/videnc_copy.a64P

#归档

# archiving package/lib/lib/videnc_copy/package/package_ti.sdo.ce.examples.codecs.videnc_copy.o64P package/lib/lib/videnc_copy/videnc_copy.o64P into lib/videnc_copy.a64P ...

/home/pheobe/davinci/cg6x_6_0_21_1/bin/ar6x  rq lib/videnc_copy.a64P   package/lib/lib/videnc_copy/package/package_ti.sdo.ce.examples.codecs.videnc_copy.o64P package/lib/lib/videnc_copy/videnc_copy.o64P

rm -f package/lib/lib/videnc_copy_dma/package/package_ti.sdo.ce.examples.codecs.videnc_copy.o64P

#

# cl64P package/package_ti.sdo.ce.examples.codecs.videnc_copy.c ...

/home/pheobe/davinci/cg6x_6_0_21_1/bin/cl6x -c  -qq -pdsw225 -pden -pds=195  -mv64p -eo.o64P -ea.s64P  -Dxdc_target_name__=C64P -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_6_0_21 -O2 -DUSE_ACPY3   -I. -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../.. -I/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages -I/home/pheobe/davinci/bios_5_33_03/packages -I/home/pheobe/davinci/xdctools_3_10_05_61/packages -I../../../../../.. -I/home/pheobe/davinci/cg6x_6_0_21_1/include -fs=./package/lib/lib/videnc_copy_dma/package -fr=./package/lib/lib/videnc_copy_dma/package -fc package/package_ti.sdo.ce.examples.codecs.videnc_copy.c

/home/pheobe/davinci/xdctools_3_10_05_61/bin/mkdep -a package/lib/lib/videnc_copy_dma/package/package_ti.sdo.ce.examples.codecs.videnc_copy.o64P.dep -p package/lib/lib/videnc_copy_dma/package -s o64P package/package_ti.sdo.ce.examples.codecs.videnc_copy.c -C   -qq -pdsw225 -pden -pds=195  -mv64p -eo.o64P -ea.s64P  -Dxdc_target_name__=C64P -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_6_0_21 -O2 -DUSE_ACPY3   -I. -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../.. -I/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages -I/home/pheobe/davinci/bios_5_33_03/packages -I/home/pheobe/davinci/xdctools_3_10_05_61/packages -I../../../../../.. -I/home/pheobe/davinci/cg6x_6_0_21_1/include -fs=./package/lib/lib/videnc_copy_dma/package -fr=./package/lib/lib/videnc_copy_dma/package

rm -f package/lib/lib/videnc_copy_dma/videnc_copy.o64P

#

# cl64P videnc_copy.c ...

/home/pheobe/davinci/cg6x_6_0_21_1/bin/cl6x -c  -qq -pdsw225 -pden -pds=195  -mv64p -eo.o64P -ea.s64P  -Dxdc_target_name__=C64P -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_6_0_21 -O2 -DUSE_ACPY3   -I. -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../.. -I/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages -I/home/pheobe/davinci/bios_5_33_03/packages -I/home/pheobe/davinci/xdctools_3_10_05_61/packages -I../../../../../.. -I/home/pheobe/davinci/cg6x_6_0_21_1/include -fs=./package/lib/lib/videnc_copy_dma -fr=./package/lib/lib/videnc_copy_dma -fc videnc_copy.c

/home/pheobe/davinci/xdctools_3_10_05_61/bin/mkdep -a package/lib/lib/videnc_copy_dma/videnc_copy.o64P.dep -p package/lib/lib/videnc_copy_dma -s o64P videnc_copy.c -C   -qq -pdsw225 -pden -pds=195  -mv64p -eo.o64P -ea.s64P  -Dxdc_target_name__=C64P -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_6_0_21 -O2 -DUSE_ACPY3   -I. -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../.. -I/home/pheobe/davinci/dvsdk_2_00_00_22/local_power_manager_1_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/xdais_6_23/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/linuxutils_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/framework_components_2_23_01/packages -I/home/pheobe/davinci/dvsdk_2_00_00_22/biosutils_1_01_00/packages -I/home/pheobe/davinci/bios_5_33_03/packages -I/home/pheobe/davinci/xdctools_3_10_05_61/packages -I../../../../../.. -I/home/pheobe/davinci/cg6x_6_0_21_1/include -fs=./package/lib/lib/videnc_copy_dma -fr=./package/lib/lib/videnc_copy_dma

rm -f lib/videnc_copy_dma.a64P

#

# archiving package/lib/lib/videnc_copy_dma/package/package_ti.sdo.ce.examples.codecs.videnc_copy.o64P package/lib/lib/videnc_copy_dma/videnc_copy.o64P into lib/videnc_copy_dma.a64P ...

/home/pheobe/davinci/cg6x_6_0_21_1/bin/ar6x  rq lib/videnc_copy_dma.a64P   package/lib/lib/videnc_copy_dma/package/package_ti.sdo.ce.examples.codecs.videnc_copy.o64P package/lib/lib/videnc_copy_dma/videnc_copy.o64P

.libraries files complete: Thu Nov 3 11:12:52 EDT 2011.

======== .dlls [/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy] ========

.dlls files complete: Thu Nov 3 11:12:52 EDT 2011.

======== .executables [/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy] ========

.executables files complete: Thu Nov 3 11:12:52 EDT 2011.

======== all [/home/pheobe/davinci/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy] ========

#

# all files complete.

all files complete: Thu Nov 3 11:12:52 EDT 2011.

codec engine代码阅读四---CE_DIR/examples/ti/sdo/ce/examles/codecs/videnc_copy相关推荐

  1. 编译 /home/nzm/dvsdk_3_00_02_44/codec_engine_2_24/examples/ti/sdo/ce/examples/apps/video_copy 【part2】

    关键是设置 /home/nzm/dvsdk_3_00_02_44/codec_engine_2_24/examples 里的 xdcpaths.mak文件 设置好之后,先到 /home/nzm/dvs ...

  2. codec engine 编译

    来自http://code.google.com/p/opencv-dsp-acceleration/wiki/GettingStarted1 Introduction Installing DSP/ ...

  3. Codec Engine 概要

    本文翻译自TI的手册,该手册是学习GPP+DSP开发的金典文档,希望对各位入门有所帮助,有理解不当之处望请赐教. Codec Engine Application Developer User's G ...

  4. DAVINCI开发原理之三----达芬奇编解码引擎Codec Engine(CE)

    DaVinci是DSP和ARM 双核架构的SOC芯片.对芯片与外界的交互通过ARM端的Montavista Linux和相关驱动与应用程序来管理, DSP端只处理编解码相关的算法.DSP和ARM之间的 ...

  5. 达芬奇编解码引擎Codec Engine(CE)【转】ceapp.cfg

    DaVinci是DSP和ARM双核架构的SOC芯片.对芯片与外界的交互通过ARM端的Montavista Linux和相关驱动与应用程序来管理,DSP端只处理编解码相关的算法.DSP和ARM之间的通讯 ...

  6. 达芬奇编解码引擎Codec Engine(CE)

    DaVinci是DSP和ARM双核架构的SOC芯片.对芯片与外界的交互通过ARM端的Linux和相关驱动与应用程序来管理,DSP端只处理编解码相关的算法.DSP和ARM之间的通讯和交互是通过引擎(En ...

  7. 【DSP开发】帮您快速入门 TI 的 Codec Engine

    德州仪器半导体技术(上海)有限公司 通用DSP 技术应用工程师 崔晶 德州仪器(TI)的第一颗达芬奇(DaVinci)芯片(处理器)DM6446已经问世快三年了.继DM644x之后,TI又陆续推出了D ...

  8. VINS-Mono代码阅读笔记(十四):posegraph的存储和加载

    本篇笔记紧接着VINS-Mono代码阅读笔记(十三):posegraph中四自由度位姿优化,来分析位姿图的存储和加载. 完整(也是理想的)的SLAM的使用应该是这样的:搭载有SLAM程序的移动设备在一 ...

  9. Davinci DM6446 Codec Engine双核通信环境的搭建

    根据前几篇文章,一个DM6446的系统已经架构完成.但是有很多人都喜欢TI的机制,毕竟双核软件开发对很多工程师来说是非常麻烦的事情,既然TI提供开发套件和开发包,那么直接做OEM就可以了,底层的东西不 ...

  10. ORB_SLAM2代码阅读(1)——系统入口

    ORB_SLAM2代码阅读(1)--系统简介 1.说明 2.简介 3.stereo_kitti.cc 4.SLAM系统文件(System.cc) 4.1 构造函数System() 4.2 TrackS ...

最新文章

  1. c语言加减乘除算术程序,求一个计算加减乘除的C语言程序
  2. 今日头条 Go 建千亿级微服务的实践
  3. jquery 判断手势滑动方向(上下左右)
  4. 如何使用VIM的Help
  5. 域名商2014年度报告:35互联域名总量增至33.4万
  6. 虚拟机的ip地址为什么会发生变化
  7. c++ map iterator 获取key_Java遍历Map的4种方法
  8. 数据分析--使用Web API(应用编程接口)以自动请求GitHub网站的特定信息为例爬取数据,附完整的Python代码详解
  9. vuex语法精简(方便开发查阅)
  10. 腾讯云服务器的环境配置与使用
  11. PyTorch 入坑八:卷积与转置卷积
  12. PLC 有哪几种常用编程语言
  13. 微信开发(六):微信卡券
  14. 桌面计算机图标双击打不开了,双击打不开图标怎么办 双击打不开图标解决方法【详解】...
  15. Restful API设计指南
  16. php 字符c二进制文件内容,科学网—C读写二进制文件与文本文件 - 张凌的博文
  17. 日本語トレーニング(二十一)
  18. 组装台式计算机的过程,学习电脑装机全过程 组装台式机图解教程(6)
  19. 双色汉诺塔算法的证明——数学归纳法
  20. 解决pnpm 不是内部或外部命令的问题(pnpm安装教程)

热门文章

  1. php 登陆微博,用新浪微博账号登录(第三方登录)
  2. 手写文本 matlab 识别,手写汉字识别matlab
  3. python手写汉字识别_python实现简单的文字识别
  4. python usb摄像头 截图_python实现摄像头远程截图功能
  5. 网络爬虫:Scrapy爬虫框架
  6. win10的计算机 桌面图标不见了怎么办,Win10我的电脑怎么放在桌面?Win10此电脑图标不见了的解决方法...
  7. Ubuntu 中文转换成英文方法
  8. ABAPDEMO批量更改BOM组件_SAP刘梦_新浪博客
  9. JPA注解@Enumerated映射枚举字段
  10. VSLAM算法(二):PnP求解 3D-2D 相机位姿及 BA优化算法