嵌入式导论实验报告
DOL实例分析&编程
Make工具简介
在Linux和Ubuntu环境中,make工具主要被用来进行工程编译和程序链接
Makefile文件:告诉make以何种方式编译源代码和链接程序
make通过比较对应文件(规则的目标和依赖)的最后修改时间,来决定哪些文件需要更新、那些文件不需要更新。
Ant工具简介
Ant是一种基于Java的build工具。
Ant用Java的类来扩展。
Ant本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。
Ant的优点
跨平台性。Ant是纯java语言编写的,所示具有很好的跨平台性。
操作简单。Ant是由一个内置任务和可选任务组成的。Ant运行时需要一个XML文件(构建文件)。
容易维护和书写,结构清晰。
Ant可以集成到开发环境中。
Java与javac简介
用途:编译或执行java代码
javac命令用来编译java文件
java命令可以执行生成的class文件
实验平台
Vmware:虚拟机平台
Ubuntu 14.01-Server版:轻量便捷开机快
Xshell 5 用于与远程主机连接,通过ftp共享文件
安装一些必要的环境
$ sudo apt-get update ——在虚拟机的 Linux 系统刷新 Linux 软件库
$ sudo apt-get install ant ——安装Ant工具
$ sudo apt-get install openjdk-7-jdk ——安装openjdk工具
$ sudo apt-get install unzip ——安装解压工具
修改代码文件
- 修改example2,让三个square模块变成两个
对example2.xml进行修改,修改example2.xml之后文件是

输出的结果是:

dot生成的图前后对比


2.修改example1的square.c文件,使之变为立方的作用
square.c文件

运行结果为

dot生成的图前后对比


编译过程
键入命令:
sudo ant -f runexample.xml -Dnumber=1
什么是 XML? XML 被设计用来传输和存储数据。
XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
XML 的设计宗旨是传输数据,而非显示数据
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
没有任何行为的 XML是不作为的。
也许这有点难以理解,但是 XML 不会做任何事情。XML >被设计用来结构化、存储以及传输信息。
XML 是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行。
而Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具
大多用于Java环境中的自动化构建。它是Apache软件基金会JAKARTA目录中的一个子项目
它有以下的优点:
跨平台性。Ant是纯Java语言编写的,所以具有很好的跨平台性
操作简单。Ant是由一个内置任务和可选任务组成的。Ant运行时需要一个XML文件(构建文件)。
Ant通过调用target树,就可以执行各种任务。
由于Ant构建文件 是XML格式的文件,所以很容易维护和书写,而且结构清晰。
可以很方便的集成到各种开发环境中去
<project>标签:
<project>标签是构建文件的根标签,每个构建文件对应一个项目,它的几个常用属性如下:
name:表示project项目名
default:表示该Ant项目启动时默认执行的任务名,如果没有该参数,则需要在项目运行时手动指定执行的任务
basedir:表示项目执行的默认目录
<project name="dol" default="runexample" basedir=".">
<description>
Ant build file to build and run examples.
</description>
......
</project>
<property>标签:
用于定义一个参数.
如下面的xml代码,定义名字里包含路径,之后使用起来非常方便,直接使定义的变量名即可
<property name="java.executable" value="/usr/sepp/bin/java"/>
<property name="javac.executable" value="/usr/sepp/bin/javac"/>
<!-- directory paths -->
<property name="lib.dir" location="./../../../jars"/>
<property name="bin.dir" location="./../../../bin"/>
......
<property name="example.dir" location="./../../../examples"/>
<!-- these properties can be overwritten using the -D option when calling ant,
e.g.: -Dnumber=2 -Dgenerator=protothread -->
<property name="number" value="1"/>
......
<target>标签
表示是一个个的待执行的任务,在一个project标签下可以有多个target标签。
同时,可以指定一个target依赖于另一个target,这样在执行时会先执行依赖的那个任务,然后才执行目标任务。
这个属性是非常有用的,比如要编译执行一个Java文件,那么我们的执行顺序就应该是先编译然后再执行,这时我们就可以让执行class文件的那个任务依赖于编译Java文件的那个任务。
target标签的几个常用属性如下:
name:表示任务名
depends:表示该任务依赖的任务名
if:表示仅当属性存在时才执行这个任务
unless:跟if的含义相反,表示当属性没被设置时才执行这个任务
如下面的代码,使用target完成project
<target name="runexample" depends="showversion">
<antcall target="prepare"/>
<antcall target="validate"/>
<antcall target="flatten1"/>
<antcall target="flatten2"/>
<antcall target="dol1"/>
<antcall target="dol2"/>
<antcall target="execute"/>
</target>
dol过程包括以下几个步骤
prepare——创建文件结构、路径,把需要运行的c,cpp,java文件等复制过来
validate——用java的dol.helper.validator.XMLValidator 检查xml文件是否有错误
flatten——创建xxxx_flattend.xml,过程中有使用java编译或执行java代码
javac命令编译java文件,java命令生成的class文件
使用generator文件生成xxxx_flattend.xml
dol——通过xxxx_flattend.xml生成example${number}.dot的文件,这里就可以把流程图画出来
execute——创建可运行的程序,包含make和run
这样一系列下来,这些步骤就不需要我们每次键入命令行去执行
使用XML优秀的批处理功能,自动的完成编译和运行
Ant集成了这些功能,而且是可以跨平台使用的,简直不能更好了!
1.准备阶段:创建文件夹,记录文件夹路径,把需要编译的文件拷贝过来
<!-- prepare directory structure and copy sources -->
<target name="prepare">
<echo message="Create directory example${number}."/>
<deletedirectory dir="example${number}"/>
<mkdir dir="example${number}"/>
<echo message="Copy C source files."/>
<deletedirectory dir="example${number}/src"/>
<mkdir dir="example${number}/src"/>
<copy todir="example${number}/src">
<fileset dir="${example.dir}/example${number}/src" includes="*.h *.c"/>
</copy>
</target>
2.检查阶段:检查文件是否有语法错误
<!-- validateXML -->
<target name="validate" unless="use.external.java">
<echo message="check XML compliance of example${number}_flattened.xml."/>
<java classname="dol.helper.validator.XMLValidator"
dir="example${number}"
fork="true"
failonerror="true">
<classpath path="${jars}"/>
<arg line="${example.dir}/example${number}/example${number}.xml"/>
</java>
</target>
3.创建 flattened XML:利用生成的ExampleXGenerator.java和生成ExampleXGenerator.class
产生exampleX_flattened.xml 为下一步画图做准备
<!-- create flattened XML-->
<target name="flatten1">
<echo message="Create flattened XML example${number}_flattened.xml."/>
<java classname="dol.helper.flattener.XMLFlattener"
dir="example${number}"
fork="true"
failonerror="true">
<classpath path="${jars}"/>
<arg line="${example.dir}/example${number}/example${number}.xml Example${number}Generator"/>
</java>
<javac srcdir="example${number}"
destdir="example${number}"
includes="Example${number}Generator.java"
fork="${use.external.javac}"
executable="${javac.executable}"/>
<java classname="Example${number}Generator"
output="example${number}/example${number}_flattened.xml"
fork="true"
failonerror="true">
<classpath path="example${number}"/>
</java>
</target>
4.运行DOL:使用flattened.xml生成exampleX.dot文件
<!-- run DOL -->
<target name="dol1">
<echo message="Run DOL."/>
<java classname="dol.main.Main"
dir="example${number}"
fork="true"
failonerror="true">
<classpath path="${jars}"/>
<arg line="-P example${number}_flattened.xml -D example${number}.dot --${generator} ${generator} -c"/>
</java>
</target>
- 通过xml来画dot图
flattened.xml中,有包含画图所需要的元素,生产者,消费者,连线,进程等内容
<process name="square" basename="square">
<port name="1" type="input" basename="1"/>
<port name="2" type="output" basename="2"/>
<source location="square.c" type="c"/>
</process>
<sw_channel name="C1" type="fifo" size="10" basename="C1">
<port name="0" type="input" basename="0"/>
<port name="1" type="output" basename="1"/>
</sw_channel>
<connection name="c-c">
<origin name="C2">
<port name="1"/>
</origin>
<target name="consumer">
<port name="1"/>
</target>
</connection>
- 在flattened.xml中,<processnetwork>包含的网址中可以解析带有process/sw_channel等的方法
定义好标签之后,运行xml文件,就可以生成dot文件
DOL中包含一些任务<target>
variable ——变量
function ——函数
process ——进程
sw_channel ——通道
iterator ——迭代器
connection ——连接
<processnetwork xmlns="http://www.tik.ee.ethz.ch/~shapes/schema/PROCESSNETWORK"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.tik.
ee.ethz.ch/~shapes/schema/PROCESSNETWORK
http://www.tik.ee.ethz.ch/~shapes/schema/processnetwork.xsd" name="example2">
标签是连接的url中定义的
<xsd:element name="processnetwork">
<xsd:complexType>
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
<xsd:element name="variable" type="pn:variable" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="function" type="pn:function" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="process" type="pn:process" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="sw_channel" type="pn:sw_channel" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="iterator" type="pn:generaliterator" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="connection" type="pn:connection" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
- 使用flattened.xml生成exampleX.dot文件,dot文件里的显示出的图像颜色,连线颜色都可以自定义
digraph pn {
ratio = auto;
rankdir = LR;
ranksep = 0.3;
nodesep = 0.2;
center = true;
node [ fontsize=12, height=0.4, width=0.4, style=filled, color="0.65 0.20 1.00" ];
edge [ fontsize=10, arrowhead=normal, arrowsize=0.8, style="setlinewidth(2)" ];
"generator" [ label="generator", color=lightyellow, shape=diamond ];
"consumer" [ label="consumer", color=lightyellow, shape=diamond ];
"square" [ label="cube", color=lightyellow, shape=ellipse ];
"generator" -> "square" [ label="C1", color=lightblue3 ];
"square" -> "consumer" [ label="C2", color=lightblue3 ];
}
- 生成dot文件后,如果需要看见效果
安装Graphviz (Graph Visualization Software的缩写)
sudo apt-get install graphviz
然后键入命令
dot -Tpng XXX.dot -o XXX.png
然后通过Xshell从虚拟机中通过ftp下载在windows下就可以看啦~
5.创建可运行的程序,包含make和run
<!-- create and run SystemC application -->
<target name="execute">
<!-- the first two tasks are needed to avoid make's clock skew warning -->
<tstamp>
<format property="touch.time"
pattern="MM/dd/yyyy hh:mm aa"
offset="-5" unit="second"/>
</tstamp>
<touch datetime="${touch.time}">
<fileset dir="example${number}"/>
</touch>
<echo message="Make ${generator} application."/>
<exec executable="make" dir="example${number}/${generator}/src"/>
<echo message="Run ${generator} application."/>
<exec executable="${basedir}/example${number}/${generator}/src/sc_application"
output="example${number}/${generator}/src/log.txt"
error="example${number}/${generator}/src/errorlog.txt"/>
<concat>
<fileset dir="example${number}/${generator}/src" includes="log.txt"/>
</concat>
</target>
—————————————————————完—————————————————————
网友评论