使用英飞凌单片机编译器 TASKING TriCore Eclipse IDE 开发编译时,想必感受最深刻的就是编译速度,那是非常慢了,如果是部分修改的源文件编译还好,不用等太久,而如果选择需要全部编译,那么这个时间就很长了。
网上也有一些帖子讲述了如何提高 Tasking 编译速度的方式,比如更改多线程编译的数目、更改编译等级和减少编译输出内容等来提高编译速度。
不过这些方式没有很明显的提升, Tasking 多线程编译选项基本是默认的,会根据电脑的配置自动选择最优的线程数目进行编译,而编译等级和编译输出内容(如map文件)算是治标不治本,因为调试开发阶段这些是不可或缺的,没有调试信息的情况下在仿真调试阶段异常属于闭眼走路。
下面会介绍几种方式来提高 Tasking 编译时的速度,也会介绍如何修改编译时的多线程数目。
以下的测试结果所使用的电脑配置:Windows 10 + 英特尔 i7(8核) + 64G内存 。
在设置之前首先全部编译一遍代码,方便对比编译时长,此次编译所耗时长是 480826ms ≈ 8 分钟。
Time consumed: 480826 ms
**** End of build ****
右击工程,选择 "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 ****
Tasking 在编译时会为项目工程源码自动生成 Makefile 文件,可以查看工程目录下的 Debug 目录,里面基本都是各个源文件的 makefile 文件,都是在编译时自动生成的。每次编译(包含修改部分编译)都会重新生成一次,这里也需要占用一些编译的时间,那么这次测试取消编译时总是生成 Makefile 选项后能提高多少。
右击工程,选择 "Properties -> C/C++ Build -> Builder Settings",取消勾选 "Generate Makefiles automatically"(如果新增了文件,那么最好重新勾选上并生成,否则编译时新增的源码文件不会被编译)。

此时测试编译耗时为 489543ms ≈ 8 分钟,没有明显变化。
Time consumed: 489543 ms
**** End of build ****
由于 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 ****
从编译的记录看,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 ****
综上所述,四种方式中只有静态链接的方式会明显缩短编译时间外,其他几种方式均没有太明显的变化。
注:由于反复操作对比,即使没有按上述方式修改的情况下,每次编译时长都会比上次编译要久,所以上述除了静态链接的方式外,其他方式的测试编译时长仅供参考。
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我有一大串格式化数据(例如JSON),我想使用Psychinruby同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解