美文网首页
DOL实例分析&编程

DOL实例分析&编程

作者: 泽泽馥泽泽 | 来源:发表于2017-10-23 20:37 被阅读0次

嵌入式导论实验报告

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 ——安装解压工具

修改代码文件

  1. 修改example2,让三个square模块变成两个

对example2.xml进行修改,修改example2.xml之后文件是

两次平方xml.png

输出的结果是:

两次平方结果.png

dot生成的图前后对比

threesquare.png twosquare.png

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

square.c文件

三次方C文件.png

运行结果为

三次方结果.png

dot生成的图前后对比

square.png cube.png

编译过程

键入命令:

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>

—————————————————————完—————————————————————

相关文章

  • DOL实例分析&编程

    嵌入式导论实验报告 DOL实例分析&编程 Make工具简介 在Linux和Ubuntu环境中,make工具主要被用...

  • DOL 实例分析 &编程

    ES2016_14353285 涂佳灵一、修改example2要求:让 3个square模块变成 2个修改前运行结...

  • DOL实例分析&编程

    DOL实例分析&编程 example2.dot截图 可以看出过程由三次平方变为两次平方。 代码解释 example...

  • #DOL 实例分析 &编程

    任务一:修改 example2 让 3个square模块变成 2个, tips: 修改 xml的iterator ...

  • 嵌入式lab3

    嵌入式系统导论实验报告 1.实验题目 DOL的编程与实例分析 2.实验结果 (1)修改example2中的文件,使...

  • #Readme

    Install DOL in Ubuntu 14.04 in lab1 Description(DOL 框架描述)...

  • Hadoop | 编程接口

    1. HDFS 编程 2. Yarn 编程 3. 概念和流程 4. 实例分析 5. Yarn 框架处理MR程序时默认类

  • Rust语言编程实例100题-036

    Rust语言编程实例100题-036 题目:求100之内的素数。 程序分析:质数(prime number)又称素...

  • 黄金前高压力山大,原油咸鱼翻身!

    方世平—4月24日分析 昨日国际现货黄金收报1730.50美元/盎司,白银收报15.23美元/盎司。 美国DOL宣...

  • [译] Python编程实例(01): 计算一个给定列表的平均值

    序 《Python编程实例》专题将介绍Python编程语言中的各种实例。每个实例都包括问题描述、解决方案、源代码、...

网友评论

      本文标题:DOL实例分析&编程

      本文链接:https://www.haomeiwen.com/subject/wftzuxtx.html