Wind River Diab Compiler Getting Started - han-yi-tech.com

29
1 HANYI Innovated for people Hanyi Technologies Co., Ltd 2017-05-18 1 汉宜电子科技(上海)有限公司 汉宜电子科技(上海)有限公司 Hanyi Technologies Co., Ltd Wind River Diab Compiler Getting Started 2017518

Transcript of Wind River Diab Compiler Getting Started - han-yi-tech.com

1

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 1汉宜电子科技(上海)有限公司

汉宜电子科技(上海)有限公司Hanyi Technologies Co., Ltd

Wind River Diab Compiler Getting Started

2017年5月18日

2

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 2汉宜电子科技(上海)有限公司

1.介绍

Wind River Diab编译器是一套软件开发工具,包括优化的C和

C++编译器,一个汇编器,一个链接器,一个储存服务器/管

理员,一个ANSI标准C库,一个反汇编器和一个块计数器。

这份指导展示了如何配置和使用编译器套件。这份指导里的

例子使用PowerPC架构,但是其他架构的步骤是相同的。安

装文件里包含了每个已安装架构的示例应用。

3

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 3汉宜电子科技(上海)有限公司

2.驱动和子程序流程

Wind River Diab编译器包最主要的工具如下:

C编译器(ctoa,被dcc驱动调用)

C++编译器(etoa,被dplus驱动调用)

汇编器(das)

链接器(dld)

工具很容易被dcc和dplus驱动程序调用。依靠输入文件和命令行选项,驱动

或许会运行五个子程序:C预处理器,或者/和编译器,汇编器,链接器(驱

动也可调用优化部分)

4

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 4汉宜电子科技(上海)有限公司

2.驱动和子程序流程

操作dcc和dplus的默认选项是按顺序调用预处理器,编译器,

汇编器和链接器。每一步操作的输出作为下一步操作的输入。

例如,编译器输出的汇编语言文件被汇编器处理。默认的,

中间文件在不需要它们的时候被删除掉。

 

对68K/CPU32、ARM、Coldfire 、MCORE、MIPS、PowerPC、

RH850、SH和SPARC、x86,C++文件处理是相同的,除了

dplus调用C++ etoa而不是ctoa。

5

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 5汉宜电子科技(上海)有限公司

2.驱动和子程序流程

图片显示了

子程序流程

6

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 6汉宜电子科技(上海)有限公司

2.驱动和子程序流程

驱动命令行在Wind River Diab Compiler User’s Guide的

Invoking the Compiler章节被详细描述。通用形式如下:

dcc [options] [input-files] Wind River C 库

dplus [options] [input-files] Wind River C++ 库

7

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 7汉宜电子科技(上海)有限公司

3.例程

例程介绍:

这个例程是一个简单的冒泡排序。

源文件包含在installDir /diab/releaseDir/example/里面,

每个安装的架构有单独的目录。

8

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 8汉宜电子科技(上海)有限公司

3.例程

例程源文件

所有例程的源文件都在以下目录,除非有其他的指定:

installDir/diab/releaseDir/example/powerpc

例程包括了以下文件:

9

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 9汉宜电子科技(上海)有限公司

3.例程

bubble.c 包括main()和sort()例程,一个小的get_sHort()汇编宏功能,

和“I/O寄存器”的指令分配。

crt0.s 启动模块。例程使用一个已修改版本的代码。它包含指定架构的汇

编程序来执行一些操作比如初始化栈指针。调用 i n i t . c里的

_init_main()函数来继续初始化。每个支持的架构都有其自己的

crt0.s文件。

init.c 位于installDir/diab/releaseDir/src,这个程序实现基本的初始化比如

导数据到RAM,然后调用bubble.c里的main()函数。

swap.s 包含swap()例程的汇编模块。

bubble.dld 链接命令文件

makefile makefile文件

10

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 10汉宜电子科技(上海)有限公司

3.例程

首先打开crt0.s文件,将所有“//”前加英文的分号“;” 注释掉,如图所示。

11

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 11汉宜电子科技(上海)有限公司

3.例程

打开Wind River Diab编译器的shell,输入指令:dctrl –t

选择单片机架构,本指导选择PowerPC,输入:8

12

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 12汉宜电子科技(上海)有限公司

3.例程

选择单片机型号,本指导选择PPC860,输入:55

13

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 13汉宜电子科技(上海)有限公司

3.例程

选择目标文件格式,本指导选择ELF,输入:1

14

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 14汉宜电子科技(上海)有限公司

3.例程

选择浮点模式,本指导选择无浮点,输入:2

15

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 15汉宜电子科技(上海)有限公司

3.例程

选择环境,本指导选择windiss,输入:1

16

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 16汉宜电子科技(上海)有限公司

3.例程

将路径转换,输入:cd C:\WindRiver\diab\5.9.4.0\example\powerpc\

17

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 17汉宜电子科技(上海)有限公司

3.例程

一步编译,汇编,链接,输入: % dcc -tPPC860EN:windiss -o bubble.out crt0.s bubble.c swap.s -lc -limpl -W mbubble.dld-W s

18

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 18汉宜电子科技(上海)有限公司

3.例程

注意以下命令行:

预先选择的目标架构(由-t指定)

输出文件名(由-o指定)

输入文件名(crt0.s,bubble.c,swap.s)

库的环境选择(-lc,-limpl)

链接器命令文件(-W mbubble.dld)

禁止使用crt0.o(-W s)

19

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 19汉宜电子科技(上海)有限公司

3.例程

这时,可以在文件夹内发现bubble.out文件已经编译出来。如果

想编译成ELF文件,只需将上述命令中的bubble.out 换成

bubble.elf即可。

下面演示分步编译,汇编,链接过程。

20

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 20汉宜电子科技(上海)有限公司

3.例程

输入以下命令:

% dcc -tPPC860EN:windiss -c -Xpreprocess-assembly crt0.s

% dcc -tPPC860EN:windiss -c bubble.c

% das -tPPC860EN:windiss swap.s

% dld -tPPC860EN:windiss crt0.o bubble.o swap.o bubble.dld -lc –limpl

-o bubble.out -Xgenerate-copytables

同样想生成ELF文件,只需将第四条命令中的bubble.out替换即可

21

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 21汉宜电子科技(上海)有限公司

3.例程

22

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 22汉宜电子科技(上海)有限公司

4.优化选项

编译器实现许多不同的优化技术,包括很多过程间的优化,

并且对每个支持的芯片,优化是非常特定的。先进的全局

优化交叉多个功能,包括部分内联功能。

为查看基于程序需求的建议优化选项,运行dctrl -s命令

对于其他优化和调试选项,参考Wind River Diab Compiler

User's Guide

23

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 23汉宜电子科技(上海)有限公司

4.优化选项

24

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 24汉宜电子科技(上海)有限公司

4.优化选项

期望影响 选项

速度优化 -XO

通过调试优化速度 -XO -g3

优化速度和大小,但是着重大小 -O -Xsize-opt

通过调试优化大小 -O -Xsize-opt -g3

最简单的调试 -g3

以下表格总结了用于生成优化的和可调试代码的主要选项。

25

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 25汉宜电子科技(上海)有限公司

4.优化选项

优化例程

运行以下例程来观察优化的影响。

因为我们的例程较为简单,优化可能性被限制了;然而我们

仍然可以观察到优化产生的影响。让我们比较优化和没优化

的代码的大小。

26

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 26汉宜电子科技(上海)有限公司

4.优化选项

Step 1 首先,检查没有优化的代码的大小以下命令

% dcc -tPPC860EN:windiss -c bubble.c; ddump -h bubble.o | grep -E " .text|\*\*\*\*|\[No\]“

给我们以下的输出(事实上数量可能有变化):

[No] Type Flags Addr Offset Size Name[1] 1 0x6 0x0 0x38 0x127 .text[3] 1 0x6 0x0 0x178 0x90 .text2

27

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 27汉宜电子科技(上海)有限公司

4.优化选项

Step 2 重复编译,这次使用 -Xsize-opt 选项来优化:

% dcc -tPPC860EN:windiss -c bubble.c -O -Xsize-opt; ddump –h

bubble.o | grep –E " .text|\*\*\*\*|\[No\]"

得到:

[No] Type Flags Addr Offset Size Name

[1] 1 0x6 0x0 0x38 0xee .text

[3] 1 0x6 0x0 0x140 0x80 .text2

28

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 28汉宜电子科技(上海)有限公司

4.优化选项

我们可以看到总代码大小从最初的439个字节(0x127 + 0x90

= 439)下降到366字节(0xee + 0x80 = 366),总共减少了

73个字节。不可否认,73字节看起来不太多,但是与初始输

出大小439字节相比,这样的减少是有意义的。 实际上减少了

15%以上。其他更复杂的程序可能会显著减少。

29

HANYIInnovated for people

Hanyi Technologies Co., Ltd2017-05-18 29汉宜电子科技(上海)有限公司

汉宜电子科技(上海)有限公司Hanyi Technologies Co., Ltd