1、前言
使用英飞凌单片机编译器 TASKING TriCore Eclipse IDE 开发编译时,想必感受最深刻的就是编译速度,那是非常慢了,如果是部分修改的源文件编译还好,不用等太久,而如果选择需要全部编译,那么这个时间就很长了。
网上也有一些帖子讲述了如何提高 Tasking 编译速度的方式,比如更改多线程编译的数目、更改编译等级和减少编译输出内容等来提高编译速度。
不过这些方式没有很明显的提升, Tasking 多线程编译选项基本是默认的,会根据电脑的配置自动选择最优的线程数目进行编译,而编译等级和编译输出内容(如map文件)算是治标不治本,因为调试开发阶段这些是不可或缺的,没有调试信息的情况下在仿真调试阶段异常属于闭眼走路。
下面会介绍几个方式来提高 Tasking 编译时的速度,也会介绍如何修改编译时的多线程数目。
2、提升编译速度方法
以下的测试结果所使用的电脑配置:Windows 10 + 英特尔 i7(8核) + 64G内存 。
在设置之前首先全部编译一遍代码,方便对比编译时长,此次编译所耗时长是 480826ms ≈ 8 分钟。
Time consumed: 480826 ms
**** End of build ****
2.1、编译时的线程数目
右击工程,选择 "Properties -> C/C++ Build -> Behavior",选择 "Use parallel jobs",为了明显比较,这里设置 16(默认8)
看一下编译时的CPU使用率,达到了 100%(因为还有其他软件在运行,所以 Tasking 占据了 80%)。
此次编译所耗时长是 489038ms ≈ 8 分钟,没有明显变化,建议采用默认的线程数目即可。
关于编译时的线程数目,不是越多越好:CPU密集型任务,并行执行的线程数应该尽量和CPU核心数保持一致,否则超过了CPU核心数,再提高线程数也不会提高处理速度,反而因为上下文切换带来的损耗降低处理速度。
Time consumed: 489038 ms
**** End of build ****
2.2、Makefile 的自动生成
Tasking 在编译时会为项目工程源码自动生成 Makefile 文件,可以查看工程目录下的 Debug 目录,里面基本都是各个源文件的 makefile 文件,都是在编译时自动生成的。每次编译(包含修改部分编译)都会重新生成一次,这里也需要占用一些编译的时间,那么这次测试取消编译时总是生成 Makefile 选项后能提高多少。
右击工程,选择 "Properties -> C/C++ Build -> Builder Settings",取消勾选 "Generate Makefiles automatically"(如果新增了文件,那么最好重新勾选上并生成,否则编译时新增的源码文件不会被编译)。
此时测试编译耗时为 489543ms ≈ 8 分钟,没有明显变化。
Time consumed: 489543 ms
**** End of build ****
2.3、内存参数配置
由于 Tasking 是基于 eclipse 集成开发环境平台扩展的 IDE,因此可以根据如何提高 eclipse 的编译速度的方式对 Tasking 进行同样的设置。
打开 Tasking 的安装路径,找到 eclipse.ini 文件,修改配置信息提高 Tasking 的编译速度,-Xms设置为 2048,-Xmx设置为4096。
-vmargs:说明后面是VM的参数
-Xms256m:虚拟机占用系统的最小内存
-Xmx1024m:虚拟机占用系统的最大内存
建议把这个稍微设大一点,不过要根据自己机器内存大小来设置(可能设置后出现打不开,那就尝试再小些)
-showsplash
com.tasking.ctc
--launcher.XXMaxPermSize
512m
-vmargs
-Dosgi.splashPath=platform:/base/plugins/com.tasking.ctc
-Declipse.product=com.tasking.ctc.ide
-Xms2048m
-Xmx4096m
-Xverify:none
此时测试编译耗时为 438945ms ≈ 7 分钟,有些许变化。
Time consumed: 438945 ms
**** End of build ****
2.4、静态库链接
从编译的记录看,iLLD 库源码编译的时长是占比最大的,而通常情况下除非库有问题或者需要性能优化,基本不会随意修改 iLLD 的源码内容,但是每次全部编译都会重新编译这一部分源码内容,因此,如果想提高编译速度的话,那么这一块就是就是重点需要解决的部分。
将 iLLD 编译成静态库,然后在编译时不再编译 iLLD 源码,通过静态链接的方式完成整个工程的编译。
1、首先右击工程中添加的 iLLD 目录,按下图选项不再编译 iLLD 源码。
2、将编译好的 iLLD 静态库放在 iLLD 目录下,新建一个 Lib 存放,此时可以看到 Src 是灰色的,代表不被编译。
3、右击工程,"Properties -> C/C++ Build -> Settings -> Tool Settings",按下图添加静态库,然后编译。
4、此时测试编译耗时为 235933ms ≈ 4 分钟,发生了明显的变化,编译时间缩短了一倍。
Time consumed: 235933 ms
**** End of build ****
3、总结
综上所述,四种方式中只有静态链接的方式会明显缩短编译时间外,其他几种方式均没有太明显的变化。
注:由于反复操作对比,即使没有按上述方式修改的情况下,每次编译时长都会比上次编译要久,所以上述除了静态链接的方式外,其他方式的测试编译时长仅供参考。