Wind River Diab Compiler Getting Started - han-yi-tech.com
-
Upload
khangminh22 -
Category
Documents
-
view
7 -
download
0
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替换即可
22
HANYIInnovated for people
Hanyi Technologies Co., Ltd2017-05-18 22汉宜电子科技(上海)有限公司
4.优化选项
编译器实现许多不同的优化技术,包括很多过程间的优化,
并且对每个支持的芯片,优化是非常特定的。先进的全局
优化交叉多个功能,包括部分内联功能。
为查看基于程序需求的建议优化选项,运行dctrl -s命令
对于其他优化和调试选项,参考Wind River Diab Compiler
User's Guide
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%以上。其他更复杂的程序可能会显著减少。