【TASKING】如何提高编译器的编译速度

文章目录

  • 前言
  • 一、How to Improve the compilation speed.
    • 1.1、Cache generated code to improve the compilation speed
    • 1.2 Influencing the Build Time
      • SFR File(勾了可能会报错,好像得配合include一起用,暂未研究清除,仅供参考)
      • MIL Linking(选build faster)
      • Optimization Options
      • Automatic Inlining
      • Code Compaction
      • Header Files
      • Parallel Build(并行编译)-- 这个一般是默认开启,检查一下就行。
      • Section Concatenation
  • 二、优化代码大小或执行速度Compiler Optimizations
    • 1、一般选level2
    • 2.Optimize for Code Size or Execution Speed
  • 总结


前言

参考资料:
《TASKING VX-toolset forTriCore User Guide》

TASKING软件想必玩英飞凌芯片的道友们应该都会用到,然而还有很多人不知道如何提高编译速度。据说经常一次编半个小时。那么下面就告诉你如何提高编译速度。


一、How to Improve the compilation speed.

1.1、Cache generated code to improve the compilation speed

在这里插入图片描述

  • 1、从工程路径选择Properties
  • 2、选择C/C++ Build下的 Setting选项
  • 3、找到C/C++ Compiler下的 Optimization
    4、 选择Compilaton Speed
    5、勾选如图选项,原理是第一次编译完之后给你生成缓存文件,后面再编直接使用缓存文件,就无需重复编译,加快了编译速度;
    6、你可以指定缓存文件在缓存中存在的最大天数

原理:Eclipse使用选项——cache调用C编译器。缓存目录可以被共享,例如通过将其放在网络驱动器上。编译器在指定的目录下创建一个目录ctccache。

当使用缓存中的结果时,C编译器会在程序集源文件中生成注释行来通知它。在这种情况下,请注意:
每次编译导致缓存丢失的文件时,都会在缓存中存储一个新文件。旧文件不会自动从缓存中删除,因为这会大大降低编译器的速度。要保持缓存大小合理,请指定文件在缓存中存在的最大天数

1.2 Influencing the Build Time

SFR File(勾了可能会报错,好像得配合include一起用,暂未研究清除,仅供参考)

在这里插入图片描述

SFR文件可以定义大量的SFR,以至于仅编译SFR文件就已经占用了构建时间的很大一部分。
要减少构建时间:
•默认情况下,工具不自动包含SFR文件。您应该只在使用SFR的源模块中包含SFR文件,并使用#include指令。在Eclipse中,确保禁用自动包含选项。你可以在“C/ c++编译器”上找到这个选项
“预处理”和“汇编器»预处理”页面。
当您在源代码中包含SFR文件时,请注意SFR文件位于包含文件的SFR子目录中,因此您必须使用:#include < SFR /regtc1796b.sfr>

MIL Linking(选build faster)

在这里插入图片描述

**原理介绍:**使用MIL链接(参见第4.6.1节,泛型优化(前端)),可以让编译器在应用范围内应用优化。这可以产生显著的优化改进,但构建时间也会明显延长。MIL链接本身可能需要大量的时间,而且更改的构建过程也意味着更长的构建时间。Eclipse中的MIL链接设置为:

- 构建应用程序范围的优化(MIL链接)Build for application wide optimizations (MIL linking)

勾选之后这将启用MIL链接。构建过程发生了变化:C文件被转换为中间代码
(MIL文件)和整个项目生成的MIL文件通过C编译器链接在一起。下一步取决于下面选项的设置。
有下面两个选择:
一般来说,如果您不需要代码压缩,例如,因为您正在为速度进行全面优化,那么建议选择Optimize less/Build faster

• Application wide optimization mode: Optimize more/Build slower
当启用此选项时,编译器将立即在完全链接的对象上运行代码生成器
MIL流,它代表整个应用程序。通过这种方式,代码生成器可以在应用程序范围内执行一些优化,例如“代码压 缩”。但这也需要更多的内存和更多的时间来生成代码。除此之外,增量构建也不再可能了。对于每个构建,必须完成完整的MIL链接阶段和代码生成,即使是在正常构建(不是MIL链接)中只需要5分钟的最小更改

• Application wide optimization mode: Optimize less/Build faster
当该选项被禁用时,编译器会在MIL链接后将MIL流拆分为单独的模块。
这允许只对修改后的模块执行代码生成,因此比启用其他选项要快。尽管MIL流在之后被分割为单独的模块
MIL链接,它仍然可能发生修改单个C源文件导致多个MIL文件。这是全局优化的自然结果,其中为多个模块生成的代码受到更改的影响。

Optimization Options

一般来说,任何优化都可能需要编译器做更多的工作。但这并不意味着禁用所有优化(级别0)可以获得最快的编译时间。禁用优化可能会导致生成更多代码,从而导致编译器的其他部分(例如寄存器分配器)承担更多工作

Automatic Inlining

自动内联是一种优化,它可能导致更长的构建时间。整体函数将变得更大,通常可以进行更多的优化。但也经常导致在一个函数中使用更多的寄存器,给寄存器分配一个更困难的工作。

Code Compaction

当禁用代码压缩优化时,构建时间可能会更短。当然,当使用MIL链接时,整个应用程序作为单个MIL流传递给代码生成。然而,代码压缩是一种优化,在优化代码大小时可以产生巨大的差异。
当大小很重要时,禁用此选项没有意义。当你选择优化速度(——tradeoff=0)代码压缩被自动禁用

Header Files

许多应用程序在每个模块中包含所有头文件,通常将它们全部包含在一个包含文件中。处理头文件需要时间。只包含模块中真正需要的头文件是一个很好的编程实践,因为:
模块使用哪些接口是很清楚的
•修改头文件后的增量构建导致需要重新构建的模块更少
•减少编译时间

Parallel Build(并行编译)-- 这个一般是默认开启,检查一下就行。

在这里插入图片描述

Section Concatenation

默认情况下,链接器不会将具有相同名称的节合并为一个节。对于汇编程序选项——concatenate-sections,汇编程序使用section属性concat,指示链接器合并具有相同名称的section。区段串联的优点是定位速度更快,因为需要定位的区段更少。节连接的缺点是内存使用效率较低,因为(顺序连接的)节之间存在对齐间隙。

二、优化代码大小或执行速度Compiler Optimizations

1、一般选level2

在这里插入图片描述
TASKING C编译器提供了四个优化级别和一个自定义级别,在每个级别上都启用了一组特定的优化。

  • Level 0 - Nooptimization:不执行任何优化。编译器试图在源代码和生成的代码之间实现1:1的相似性。表达式按照源代码中编写的顺序求值,不使用关联和交换性质。

    Level 1 - Optimize:启用不影响源代码可调试性的优化。当您在使用优化级别2调试源代码时遇到问题时,请使用此级别。

    Level 2 - Optimize more (default): 支持更多优化以减少内存占用和/或执行时间。这是默认的优化级别

    Level 3 - Optimize most:这是最高的优化级别。当您的程序/硬件变得太慢而无法满足您的实时需求时,请使用此级别。

    Custom optimization:您可以在自定义优化页面上启用/禁用特定的优化

如果指定了某种优化,则模块中的所有代码都服从该优化。在C源文件中,您可以使用#pragma optimize flag和#pragma endoptimize来否决C编译器的优化选项。允许嵌套:
例子:
#pragma optimize e /* Enable expression
… simplification /
… C source …

#pragma optimize c /
Enable common expression
… elimination. Expression
… C source … simplification still enabled /

#pragma endoptimize /
Disable common expression
… elimination /
#pragma endoptimize /
Disable expression
… simplification */
编译器按照指定的方式优化编译对之间的代码。

2.Optimize for Code Size or Execution Speed

您可以告诉编译器在优化期间关注执行速度或代码大小。您可以通过指定从0(速度)到4(大小)的大小/速度权衡级别来实现这一点。这种权衡不会打开或关闭优化阶段。相反,它的级别是一个权重因子,在不同的优化阶段使用它来影响启发式。级别越高,编译器就越关注代码大小的优化。
注意:代码优化会影响编译器编译产生的汇编语言,可能会导致报错;我一般选的Lever1;
要选择一个权衡值,请阅读下面的描述,了解哪些优化会受到影响,以及不同权衡值的影响。

在这里插入图片描述


总结

没写完的,有些原理还没研究清除;埋个坑;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/125817.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

死亡游戏:密室互猜硬币规则及其破解方法

今天听到一个有点小恐怖的死亡游戏 规则是 将你和最好的朋友 分别关进两个不同的房间 要关 100天 在被关的时间里 你们无法进行任何的沟通 每一天 会有一个人在你和朋友的房间分别抛一次硬币 你们需要去猜对方硬币的正反面 只需要一个人猜对了 则 相安无事 如果两个人都猜错了…

android手机平板拓展电脑音频

&#xff08;1&#xff09;首先确保电脑上有声卡&#xff0c;就是电脑右下角小喇叭能调音量&#xff0c;不管电脑会不会响&#xff0c;如果小喇叭标记了个错误&#xff0c;说明没有声卡&#xff0c;安装图上的虚拟声卡软件。 &#xff08;2&#xff09;图上第一个PC免安装及局…

图像二值化阈值调整——Triangle算法,Maxentropy方法

一. Triangle方法 算法描述&#xff1a;三角法求分割阈值最早见于Zack的论文《Automatic measurement of sister chromatid exchange frequency》主要是用于染色体的研究&#xff0c;该方法是使用直方图数据&#xff0c;基于纯几何方法来寻找最佳阈值&#xff0c;它的成立条件…

Qt 项目实战 | 音乐播放器

Qt 项目实战 | 音乐播放器 Qt 项目实战 | 音乐播放器播放器整体架构创建播放器主界面媒体对象状态实现播放列表实现桌面歌词添加系统托盘图标 资源下载 官方博客&#xff1a;https://www.yafeilinux.com/ Qt开源社区&#xff1a;https://www.qter.org/ 参考书&#xff1a;《Q…

怎么建模HEC-RAS【案例-利用HEC-RAS分析河道建筑对洪水管控的作用】 洪水计算、堤防及岸坡稳定计算、冲淤分析、壅水计算、冲刷计算、水工构筑物建模

背景介绍 人口数量的增长、不合理的区域规划和无计划的工程实践&#xff0c;让洪水对于人类而言变得极具风险。 为了最大程度地减少洪水造成的损害&#xff0c;采取管控措施往往需要在初期执行&#xff0c;为了研究这些管控措施&#xff0c;需要确定河段桥梁和作为调节的水利设…

[工业自动化-7]:西门子S7-15xxx编程 - PLC主站 - 电源模块

目录 前言&#xff1a; 一、主站电源PM VS PS 1.1 主站PM电源模块(PM) 1.2 主站PS电源模块 1.3 PM/PS电源模块区别 1.4 如何选择PM/PS电源 1.5 什么时候必须使用PM模块 1.6 什么时候必须使用PS模块 二、背板总线 三、电源模块的安装 前言&#xff1a; 一、主站电源PM…

电商项目之Java8函数式接口落地实践

文章目录 1 问题背景2 前言3 多处重复的重试机制代码4 优化后的代码5 进一步优化 1 问题背景 在电商场景中&#xff0c;会调用很多第三方的云服务&#xff0c;比如发送邮件、发起支付、发送验证码等等。由于网络存在抖动&#xff0c;有时候发起调用后会拿到500的状态码&#xf…

jquery的项目,html页面使用vue3 +element Plus

vue3&#xff0c;element引入 <script src"../vue3.3.8/vue.global.js"></script> <link rel"stylesheet" href"js/elementPlus/index.css"> <script src"js/elementPlus/index.full.js"></script>…

Flutter笔记:关于Flutter中的大文件上传(上)

Flutter笔记 关于Flutter中的大文件上传&#xff08;上&#xff09; 大文件上传背景与 Flutter 端实现文件分片传输 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#…

开发知识点-Pygame

Pygame Pygame最小开发框架与最小游戏游戏开发入门单元开篇 Pygame简介安装游戏开发入门语言开发工具的选择 Pygame最小开发框架与最小游戏 游戏开发入门单元开篇 Pygame简介安装 游戏开发入门语言开发工具的选择

【案例卡】clickhouse:多行数据拼接在一行

一、需求 针对clickhouse数据库中&#xff0c;group by 分组后的字符串字段&#xff0c;拼接处理在一行的问题实现。在mysql中&#xff0c;可以用group_concat()函数来实现&#xff0c;而clickhouse数据库不支持此函数&#xff0c;特此记录实现方式。 二、clickhouse相关函数…

FreeRTOS_内存管理

目录 1. 内存管理简介 2. 内存碎片 3. heap_1 内存分配方法 3.1 分配方法简介 4. heap_2 内存分配方法 4.1 分配方法简介 4.2 内存块详解 5. heap_4 内存分配方法 6. FreeRTOS 内存管理实验 6.1 实验程序 内存管理是一个系统基本组成部分&#xff0c;FreeRTOS 中大量…

【刚体姿态运动学】角速度和欧拉角速率的换算关系的详细推导

0 引言 本文以一种新的角度推导刚体姿态运动学&#xff0c;也即角速度和欧拉角速率之间的换算&#xff0c;不同于相似博文的地方在于&#xff0c;本文旨在从原理上给出直观清晰生动的解释。将详细过程记录于此&#xff0c;便于后续学习科研查找需要。 1 符号 符号含义 { E }…

STM32 GPIO

STM32 GPIO GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口&#xff0c;也就是我们俗称的IO口 根据使用场景&#xff0c;可配置为8种输入输出模式 引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V 数据0就是低电平&#xff0c…

一篇带你精通php

华子目录 什么是phpphp发展史平台支持和数据库支持网站静态网站和动态网站的区别静态网站动态网站的特点 关键名词解析服务器概念IP的概念域名DNS端口 web程序的访问流程静态网站访问流程动态网站访问流程 php标记脚本标记标准标记&#xff08;常用&#xff09; php注释 什么是…

Linux Hadoop平台伪分布式安装

Linux Hadoop 伪分布式安装 1. JDK2. Hadoop3. MysqlHive3.1 Mysql8安装3.2 Hive安装 4. Spark4.1 Maven安装4.2 Scala安装4.3 Spark编译并安装 5. Zookeeper6. HBase 版本概要&#xff1a; jdk&#xff1a; jdk-8u391-linux-x64.tar.gzhadoop&#xff1a;hadoop-3.3.1.tar.gzh…

Spring Ioc 容器启动流程

Spring容器的启动流程 本文基于 Spring 5.3.23 基于XML文件 public void test() {ApplicationContext applicationContext new ClassPathXmlApplicationContext("applicationContext.xml");User user applicationContext.getBean("user", User.class)…

MySQL大表数据导入到MongoDB

修改参数 &#xff0c;开启into outfile的功能 secure_file_priv/home/backups/mysql_outfile 重启数据库是参数生效 按条件导出MySQL数据 select * from receipt_receive_log where gmt_create > 2020-04-13 00:00:00 and gmt_create< 2020-07-13 00:00:00 INTO O…

微信小程序真机调试连接状态一直在正常和未链接之间反复横跳?

背景&#xff1a;小程序真机调试的时候&#xff0c;发现真机的network不显示接口调用情况&#xff0c;控制台也没有输出内容。具体如下所示&#xff1b; 解决方法&#xff1a; 1、确保手机端连接的网络和微信开发者工具网络一致&#xff0c;比如用同一个WiFi 2、真机自动调试…

极狐GitLab CI 助力 .Net 项目研发效率和质量双提升

目录 .NET nuget 自动生成测试包&#xff08;prerelease&#xff09;版本号 .NET 版本号规范 持续集成自动打包 持续集成自动修改版本号 .NET 行级增量代码规范——拯救老项目 本地全量代码规范 行级增量代码规范 很多团队或开发者都会使用 C#、VB 等语言开发 .Net 应用…