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、总结

综上所述,四种方式中只有静态链接的方式会明显缩短编译时间外,其他几种方式均没有太明显的变化。

注:由于反复操作对比,即使没有按上述方式修改的情况下,每次编译时长都会比上次编译要久,所以上述除了静态链接的方式外,其他方式的测试编译时长仅供参考。

如何快速提高英飞凌单片机编译器 TASKING TriCore Eclipse IDE 编译速度的更多相关文章

  1. 如何分析和提高大型项目(C/C++)的编译速度?(VS2015特有的:/LTCG:incremental选项)

    常见的有几个:1. Precompile header2. 多线程编译3. 分布式编译4. 改code,减少依赖性 另外还有一个VS2015特有的:/LTCG:incremental选项.以前为了执行 ...

  2. [学习笔记]15个QA让你快速入门51单片机开发

    一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ  22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...

  3. 快速提高 Vi/Vim 使用效率的原则与途径

    Vi/Vim 是所有 Unix/Linux 操作系统默认配备的编辑器.因其强大的功能和高效的操作,Vi/Vim 也成为众多 Unix/Linux 用户.管理员必须掌握并熟练使用的编辑工具之一.尤其是在 ...

  4. web开发快速提高工作效率的一些资源

    前端学习资源实在是又多又广,在这样的一个知识的海洋里,我们像一块海绵一样吸收,想要快速提高效率,平时的总结不可缺少,以下总结了一些,排版自我感觉良好,推送出来,后续持续跟新中...... 开发工具 H ...

  5. 多实例gpu_MIG技术快速提高AI生产率

    多实例gpu_MIG技术快速提高AI生产率 Ride the Fast Lane to AI Productivity with Multi-Instance GPUs 一.平台介绍 NVIDIA安培 ...

  6. iOS进阶--将项目的编译速度提高5倍

    前言 作为开发团队的负责人,最近因为在快速迭代开发新功能,项目规模急速增长,单个端业务代码约23万行,私有库约6万行,第三方库代码约15万行,单个客户端的代码行数约60万.现在打包一次耗时需要11~1 ...

  7. 通过预编译头文件来提高C++ Builder的编译速度

    C++ Builder是最快的C++编译器之一,从编译速度来说也可以说是最快的win32C++编译器了.除了速度之外,C++builder的性能也在其它C++编译器的之上,但许多Delphi程序员仍受 ...

  8. kernel编译速度提高

    1. 使用tmpfs来代替部分IO读写 2. ccache,可以将ccache的缓存文件设置在tmpfs上,但是这样的话,每次开机后,ccache的缓存文件会丢失 3.distcc,多机器编译 4.将 ...

  9. Linux系统——提高编译速度的方法

    编译优化: 基本原则就是“以空间换时间” tmpfs: 解决IO瓶颈,充分利用本机内存资源 make -j: 充分利用本机计算资源 distcc: 利用多台计算机资源 ccache: 减少重复编译相同 ...

  10. 怎么快速构建自己的C/C++程序?——有关编译、静态链接和SCons

    怎么快速构建自己的C/C++程序?--有关编译.静态链接和SCons 1. 写在前面 最初写C++是在Visual Studio这个IDE里,那时我并没有makefile的概念,对程序的编译和链接的一 ...

随机推荐

  1. 基于Kubernetes的Serverless PaaS稳定性建设万字总结

    作者:许成铭(竞霄) 数字经济的今天,云计算俨然已经作为基础设施融入到人们的日常生活中,稳定性作为云产品的基本要求,研发人员的技术底线,其不仅仅是文档里承诺的几个九的 SLA 数字,更是与客户切身利益 ...

  2. python进阶(2)--列表

    文档目录:一.访问列表元素二.更新列表三.删除元素四.列表排序五.len()与range()/list()六.创建一个包含1-10平方的列表七.复制列表两种方式八.元组:不可变的列表 -------- ...

  3. MySQL 及调优

    存储引擎的种类 MySQL 中存在多种存储引擎,比如: InnoDB 支持事务: 支持外键: 同时支持行锁和表锁. 适用场景:经常更新的表,存在并发读写或者有事务处理的业务场景. MyISAM 支持表 ...

  4. Pycharm配置git

    原文链接:https://www.jianshu.com/p/ae92970d2062 1.下载Gitee插件 同样在设置页面,选中 Plugins,并搜索 Gitee安装. 安装后,重启一下Pych ...

  5. 问题--C++单例模式中唯一对象初始化时关于在类外调用私有的无参构造问题

    1.问题 在单例模式中初始化单例对象Person* Person::signal= new Person; 这一步在类外,而new Person需要调用私有的无参构造,但是只有在类内部才能调用私有函数 ...

  6. 02-MySQL基本操作

    SQL 的一些简单语法规则 结束符 SQL 指令需要语句结束符,默认是英文分号;. 当然,还有另外两个结束符: \g 与英文分号;等效. \G:将查到的结构旋转90度变成纵向. 反引号`` SQL语句 ...

  7. 重写SpringCloudGateway路由查找算法,性能提升100倍!

    如果你也在做SpringCloudGateway网关开发,希望这篇文章能给你带来一些启发 背景 先说背景,某油项目,通过SpringCloudGateway配置了1.6万个路由规则,实际接口调用过程中 ...

  8. [转帖]061、监控指标之TiKV

    资源相关 Grafana监控 TiKV-Details -> Cluster - Store Size / Available Size Grafana监控 TiKV-Details -> ...

  9. [转帖]setsockopt(setsockopt的使用方法及注意事项)

    http://xingzuo.aitcweb.com/9156453.html 1. setsockopt简介 setsockopt是一个系统调用函数,用于设置套接字选项.套接字是指通信的两个端点之间 ...

  10. [转帖]接口偶尔超时,竟又是JVM停顿的锅!

    https://www.cnblogs.com/codelogs/p/16391159.html 简介# 继上次我们JVM停顿十几秒的问题解决后,我们系统终于稳定了,再也不会无故重启了!这是之前的文章 ...