XDC是TI公司为嵌入式实时系统可重用软件组件(在XDC里被成为packages,以下成为包)制定的一套标准。它包括一些有用的工具,标准的API函数,静态配置文件和打包(packaging)操作。XDC最主要的亮点在于它标准化了传递过程,并简化了在应用程序中引用目标平台下其他包的过程。

本文从一个简单的“Hello,World“入手,引领大家进入XDC开发世界。

在XDC开发世界中,首先需要明确两个概念,package和repository。

所谓package,类似与java里的jar文件或.net世界里的assembly,是开发者将源代码编译打包后交付给使用者使用的一组集合。和java里的package类似,XDC的Package也是按照一定层次的文件夹组织形式来存放的(这点和.net不同,.net仅仅是编译成一个dll),该目录的名字就是包的名字。

所谓repository,实际上是一个包含多个package的文件夹,例如在XDC里,我们使用packages来作为一个repository,该文件夹下包含很多ti.xdc.*的包。在XDC开发中,有一个很重要的变量XDCPATH,在XDCPATH中制定的路径就是repository。这有点类似于C++的包含文件目录。

安装和卸载XDC

你可以从TI的网站上下载,安装过程很简单,如果在Windows平台下,直接双击安装文件安装到特定目录就可以了,如果是在Linux平台,可能需要修改文件的属性将文件设置成可执行,然后双击安装。

至于卸载,找到uninstall文件,双击即可。

将XDC添加到你的环境变量

为了更方便地使用XDC(实际上就是不要在xs前加上一长串路径),需要将XDC添加到环境变量里。

如果开发平台为Windows,在安装完XDC后,需要环境变量的PATH中添加XDC安装目录(和JAVA一样),此外,顺便新建一个XDCPATH的环境变量,该变量用来制定repository的位置。

如果你用的是Linux,自己查文档吧:-)

测试

当你完成以上步骤后,恭喜你,你现在可以开始XDC编程之旅了,试试在命令行下键入:

xs –version

xs xdc.tools.echo hello world

很简单吧?广告之后我们开始编写第一个基于XDC的应用程序,下一节更精彩,不要走开哦。

下面介绍如何创建一个基于XDC的应用程序。

一般的我们使用传统的C语言进行XDC开发,在配置上还需要使用Javascript。不过总体来说,开发XDC还是很容易的,只需要遵循以下几个步骤:

配置应用程序(也就是写配置文件了啊)

写C语言

编译、链接

根据TI标准开发流程,XDC开发主要关注点还是编写C语言代码,至于其他的(主要是指1、3)很简单(文档上说的,我不觉得~~~),TI提供了一些工具。

废话少说,开始我们的“Hello,World”之旅吧!

配置应用程序

和Java、C不同,开发XDC应用程序需要使用javascript语法写一个配置文件,进行一些预先的配置工作以供应用程序使用(例如使用什么模块啊,设置一些常量啊)。当然,第二步也就是写C语言也可以进行一些动态的设置。

至于为什么写配置文件,TI给出的答案是:

在编译时就制定需要使用到哪些模块,以及生成哪些静态对象。

检查制定包和继承包

设置指定模块或对象的属性

下图展示了XDC编译的全过程:

XDC的配置文件是以cfg结尾的,在Codec Engine开发过程中,我们主要是Application端和server端使用XDC来编译。

如上图所示,CONFIG OUTPUT中为XDC编译器根据配置文件生成的一些中间文件(例如C代码、.cmd文件),这些文件不需要自己动手编写,甚至不需要知道他们是干什么的。

现在回到“Hello,World”开发,我们先在开发目录下建立一个名为hello的文件夹,然后在该文件夹中建立一个名为hello.cfg的文件:

接下来,在该文件中输入以下javascript表达式,声明一个xdc.runtime.System对象:

var System = xdc.useModule(“xdc.runtime.System”);

写C语言

创建一个名为hello.c的文件,在里面添加以下代码:

#include <xdc/std.h>
#include <xdc/runtime/System.h>

int main()
{
    System_printf(“Hello World!\n”);
    return (0);
}

编译

确定目标和平台

在编译前,我们首先需要明确我们的程序是运行在什么平台上的,以及使用什么编译起来进行编译。在TI的文档中,用目标(Target)和平台(Platform)、编译器来定义这些属性:

目标(-t):制定的编译器,例如TI ‘C6000 编译器。

平台(-p):运行的环境,例如DM6446 EVM。

编译器(-c):编译XDC的编译器,例如TI 公司提供的Code Gen Tools或者Visual Studio 2008。

在本例中,目标为ti.targets.C64P,平台定位ti.platforms.evmDM6446。

运行Configuro

XDC提供了一个叫做“Configuro”的工具来处理配置文件,我们可以在命令行中输入以下命令:

xs xdc.tools.configuro -t ti.targets.C64P -p ti.platforms.evmDM6446 -c d:/opt/cgtools hello.cfg

注:你需要在https://www-a.ti.com/downloads/sds_support/CodeGenerationTools.htm下载Code Gen Tools。

编译后将生成一个名为hello的文件夹:

http://blog.sina.com.cn/s/blog_693301190100sitz.html

http://blog.sina.com.cn/s/blog_69620aac0100q9e6.html

嵌入式开发之davinci--- 8148/8168/8127 中的xdc 简介的更多相关文章

  1. 嵌入式开发之uart---rs232 和rs485 和rj45和usb简介

    (1) profilebus和can(control控制器局域网)和hub(集线器) (uart)通用异步传输 rs232: ibm 提出的,两根线,按位bit传输,是端到端的单信号电平模式,理论上有 ...

  2. 嵌入式开发之davinci---IPIPE、IPIPEIF and ISIF这三者有什么区别

    (1)缩写概念 (2)各自区别 (3)不同sensor 采集接口 (4)采集后的数据链路link (5)8127 中的iss和ipipe的区别 (1)缩写概念 http://www.ti.com.cn ...

  3. 嵌入式开发之davinci--- 8148/8168/8127 中的High-DefinitionVideo Processing Subsystem (HDVPSS)

    High-DefinitionVideo Processing Subsystem (HDVPSS) 这一章介绍了高清视频处理子系统(HDVPSS). 2.1导论 2.1.1 简介 HDVPSS 使用 ...

  4. 嵌入式开发之davinci--- 8148/8168/8127 中的大屏分布式拼接显示系统

    其实在接触从12年接触8127系列ipnc 时看到200w和500w的高清像素,我就萌生了视频拼接的兴趣,没想到今年的安博会就有公司推出产品了,它就是上海的环视科技,从他的主页可以看到,明显的有个只能 ...

  5. 嵌入式开发之davinci--- 8148/8168/8127 中的图像处理vpss link dei、sclr、swms、Mosaic’s

    vpss 中的link (1)dei dei 主要做数据交错处理,带缩放 dei control data flow: (2)sclr 8168中支持缩放按比例的分子和分母,只支持缩小,貌似不支持放大 ...

  6. 嵌入式开发之davinci--- 8148/8168/8127 中的图像处理算法优化库vlib

    The Texas Instruments VLIB is an optimizedImage/Video Processing Functions Library for C programmers ...

  7. 嵌入式开发之davinci--- 8148/8168/8127 中的图像采集格式Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别

    简单来说,YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的RGB: 传统的红绿蓝格式,比如RGB565 ...

  8. 嵌入式开发之davinci--- 8148/8168/8127 中的音频alsa 采集

    1.snd_pcm_open,打开句柄. 2.配置参数,可能用到的接口:snd_pcm_hw_params_alloca.snd_pcm_hw_params_any.snd_pcm_hw_params ...

  9. 嵌入式开发之davinci--- 8148/8168/8127 中的添加算饭scd 场景检测 代码实现

    http://blog.csdn.net/mianhuantang848989/article/details/38035731 http://www.61ic.com/Article/DaVinci ...

随机推荐

  1. hdu 5972 Regular Number 字符串Shift-And算法 + bitset

    题目链接 题意 给定两个串\(S,T\),找出\(S\)中所有与\(T\)匹配的子串. 这里,\(T\)的每位上可以有若干(\(\leq 10\))种选择,匹配的含义是:对于\(S\)的子串的每一位, ...

  2. NS5S1153 切換器

    昨天在研讀 NS5S1153 的 spec, 發現有一個詞 很陌生 DPDT, 原來是 double pole double throw 的縮寫,雙軸雙切, 更詳細的解釋可以看這個博客的另一篇 &qu ...

  3. JDBC加载驱动的方法+statement

    加载驱动方法 1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 2. DriverManager.r ...

  4. LeetCode OJ-- Flatten Binary Tree to Linked List **

    https://oj.leetcode.com/problems/flatten-binary-tree-to-linked-list/ 二叉树的处理,将二叉树转换成类似一个单链表的东东,并且原地. ...

  5. C# .NET4.0 改为 到.NET2.0 时 TypedTableBase 报错解决方法

    .NET 4.0 降版本 到.NET 2.0.不出意外,问题必然来了. 编译错误一: 错误 1 命名空间“System”中不存在类型或命名空间名称“Linq”(是缺少程序集引用吗?)解决: 删掉该引用 ...

  6. Maven 多模块父子工程 (含Spring Boot示例)

    一.为什么要用Maven多模块 假设有这样一个项目,很常见的Java Web应用.在这个应用中,我们分了几层: Dao Service Web 对应的,在一个项目中,我们会看到一些包名: org.xx ...

  7. 解决vagrant不能正常挂载目录的问题

    解决方案: vagrant plugin install vagrant-vbguest

  8. 防止ddos攻击

    1.防止ddos攻击 :接入层过滤器,去判断非法请求ip地主(如果请求过多,自己加入黑名单),上传至防火墙黑名单,不再录入 2.防止xss/css攻击 :在接入层,有第三方jra包工具类,过滤所有请求

  9. Docker 限制容器资源

     默认情况下,容器没有资源的限制,它可以使用整个主机的所有资源.Dcoker提供了控制资源的方法,  多少内存,CPU,IO,都可以在docker run使用标志符来设置.   内存 Docker可以 ...

  10. Android 控件架构与自定义控件详解

    架构: PhoneWindow 将一个 DecorView 设置为整个应用窗口的根 View,这里面所有 View 的监听事件,都通过 WindowManagerService 来接收.DecorVi ...