关于Keil的优化等级...

这篇具有很好参考价值的文章主要介绍了关于Keil的优化等级...。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(注:此为乐某学习记录,若有出错的地方欢迎各位指出!)

前言

关于前段时间,我在测试我的买来的开发板的时候。我想建立一个工程,然后写一个LED灯闪烁的程序进行测试,结果发现这个LED灯没有闪烁。但是用Debug来看,LED灯是有亮灭的,所以是我做的简单延时没有效果。然后请教了之前学校的学长之后,才发现是这个Keil的优化等级的问题。

官网地址

https://developer.arm.com/documentation/dui0375/g/Compiler-Command-line-Options/-Onum

官网中Keil的优化等级介绍

关于Keil的优化等级...

翻译过来就是

控制生成代码的编译器代码优化。设置编译器命令行选项-Onum:

默认:使用编译器默认值或更高目标或组级别的设置。

级别0:关闭所有优化,除了一些简单的源转换。

级别1:关闭严重降低调试视图的优化。

级别2:高度优化(默认级别)。调试视图可能不太令人满意,因为目标代码到源代码的映射并不总是清晰的。

级别3:最大优化。请注意,第3级与优化时间相结合可能会生成比第2级更多的代码,因为它可能展开循环。

优化等级:0

最小的优化。关闭大多数优化。当启用调试时,此选项将提供最好的调试视图,因为生成的代码的结构直接对应于源代码。所有干扰调试视图的优化都被禁用。特别是:

1、断点可以设置在任何可到达的点上,包括死代码。

2、变量的值在其作用域内的任何地方都是可用的,除非它是未初始化的。

3、Backtrace提供了读取源代码时预期的开放函数激活堆栈。

请注意:

1、请注意尽管由0级生成的调试视图最接近源代码,但用户可能更喜欢由-01生成的调试视图,因为这在不改变基本结构的情况下提高了代码的质量。

2、请注意死代码包括对程序结果没有影响的可到达代码,例如对从未使用过的局部变量的赋值。不可到达代码是指无法通过任何控制流路径到达的代码,例如紧跟在return语句后面的代码。

优化等级:1

受限制的优化。编译器只执行调试信息所描述的优化。删除未使用的内联函数和未使用的静态函数。关闭会严重降低调试视图性能的优化。如果与debug一起使用,该选项将提供一个总体上令人满意的调试视图和良好的代码密度。

调试视图与0级的区别是:

1、不能在死代码上设置断点。

2、变量的值在初始化后可能在其作用域内不可用。例如,如果它们分配的位置已被重用。

3、没有副作用的函数可能会被按顺序调用,如果不需要结果,则可能会被省略。

4、由于尾部调用的存在,Backtrace可能不会给出读取源代码所期望的开放函数激活堆栈。

优化级别1级在源代码和目标代码之间产生良好的对应关系,特别是当源代码不包含死代码时。生成的代码可以明显小于0级的代码,这可以简化目标代码的分析。

优化等级:2

级别高的优化。如果与debug一起使用,调试视图可能不太令人满意,因为目标代码到源代码的映射并不总是清晰的。编译器可能执行调试信息无法描述的优化。这是默认的优化级别。

调试视图与1级的区别如下:

1、源代码到目标代码的映射可能是多对一,因为可能有多个源代码位置映射到文件的一个点,以及更激进的指令调度。

2、指令调度允许交叉序列点。这可能导致变量在特定点的报告值与您从阅读源代码中可能期望的值之间的不匹配。

3、编译器自动内联函数。

优化等级:3

最大的优化。当启用调试时,此选项通常会给出一个糟糕的调试视图。ARM建议在较低的优化级别进行调试。如果同时使用3级和-Otime,编译器会执行额外的更激进的优化,例如:

1、高级标量优化,包括循环展开。这可以以较小的代码大小成本获得显著的性能优势,但冒着构建时间较长的风险时间。

2、更积极的内联和自动内联。

这些优化有效地重写了输入源代码,导致目标代码与源代码的对应关系最低,调试视图最差。loop_optimization_level=选项控制在-O3 -Otime执行的循环优化的数量。循环优化的次数越多,源代码和目标代码之间的对应关系就越差。

有关在-O3 -Otime对源代码执行的高级转换的额外信息,请使用备注命令行选项。

请注意:

1、浮点代码的性能可以通过使用——fpmode选项选择适当的数值模型来影响。

2、不要依赖于这些优化的实现细节,因为它们在未来的版本中可能会改变。

3、默认情况下,编译器优化以减少图像大小,代价是可能增加执行时间。即-Ospace是默认值,而不是-Otime。注意-Ospace不受优化级别-Onum的影响。也就是说,-O3-Ospace比-02-Ospace支持更多的优化,但不会执行更积极的减小内存。

个人总结

优化的主要操作体现在调试界面和代码生成的执行文件上。等级越高,调试界面的内容给人的感觉就会越差,代码的编译时间也会更长,当然生成的执行文件的内存也就会更小。但是弊端就是,使用Debug调试的时候,在你想停下的地方不能够打断点,你想看的变量值也看不了。而且程序的效果,也会根据程序的最终结果来执行。例如,我的LED灯闪烁程序,最终的结果就是LED灯的状态一直翻转,那么这个延时函数要不要都可以,然后就索性给我优化掉了。所以,需要根据个人需求来设置。

那么,以下就是修改优化等级的地方文章来源地址https://www.toymoban.com/news/detail-501858.html

关于Keil的优化等级...

到了这里,关于关于Keil的优化等级...的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于VS报错的一种类型。0xFFFFFFFFFFFFFFF7

    引发了异常: 读取访问权限冲突。 ......是 0xFFFFFFFFFFFFFFF7。 原因:链表的结点只创建,而没有初始化。我的代码中q-tail-next=Node这行报错,是因为即使q-tail存在,但有时候VS对于q-tail-next无法读取未初始化的指针。 当然 我上面代码确实初始化了,而这跟Vs有时候会出现空指针异

    2024年02月06日
    浏览(38)
  • 记录一次springboot+netty+websocket报错的问题

    报错内容 io.netty.handler.codec.htttp.websocketx.textwebsocketframe can not be cast to io.netty.handler.codec.http.FullHttpRequest; 核心问题 springboot项目设定了项目访问前缀,/project/ 而我只给websocket设定了单独的访问路径 pipeline.addLast(new WebSocketServerProtocolHandler(“/msg”)); 前台初始化websocket的路径是

    2024年02月15日
    浏览(39)
  • 机器学习笔记之优化算法(十三)关于二次上界引理

    本节将介绍二次上界的 具体作用 以及它的 证明过程 。 利普希兹连续 在 Wolfe text{Wolfe} Wolfe 准则收敛性证明一节中简单介绍了 利普希兹连续 ( Lipschitz Continuity ) (text{Lipschitz Continuity}) ( Lipschitz Continuity ) 。其定义对应 数学符号 表达如下: ∀ x , x ^ ∈ R n , ∃ L : s . t . ∣ ∣

    2024年02月13日
    浏览(77)
  • 【工作记录】记一次执行npm run dev报错的问题

    记录一个npm run dev 报错的问题。 今天在家里电脑跑npm run dev的时候报错,报错内容如下: 第一时间去找了度娘,也确实解决了,但不得不说网上还是有一些错误的答案的。 这个问题是由于node版本过高导致的,所以有一种方案便是降低node版本,正常来讲17一下就是ok的。 另外一

    2024年02月12日
    浏览(40)
  • 关于macOS系统M1芯片安装node-sass报错的解决方案

    最近更换macOS系统,pull项目后安装依赖时报错: 参考 M1芯片 安装node-sass报错 这篇文章后 ,得知原因是: node与node-sass版本不匹配 。代码的node-sass是v4.14.1版本(需要node15以下的版本),而我的node 是 v14(但M1芯片仅兼容node v15.3.0 以上,因为低版本的 node 并不是基于 arm64 架构

    2023年04月26日
    浏览(53)
  • Milvus的性能优化技巧、十大使用误区、四大一致性等级

    在部署 Milvus 之前,首先需要决定机器的资源、规格、以及一些依赖的资源,以下是你需要考虑的因素: 有多少张表? 每张表的数据量有多少? 每张表的 QPS 需求有多少? 是否需要存标量字段,如果有字符串,字符串的平均长度是多少? 是否有删除和流式插入,每天大概有

    2024年01月23日
    浏览(47)
  • 深度生成模型之GAN优化目标设计与改进 ->(个人学习记录笔记)

    1. JS散度度量问题 不合适的度量准则 2. 梯度问题 梯度消失与不稳定 1. 最小二乘损失GAN Least Squares GAN, 惩罚生成器生成的远离决策面的样本,即可将样本拉近决策面,从而可避免梯度消失问题 2. Energy-based GAN(EBGAN) 使用自编码器学习样本重建,生成器作为自编码器的正则项,

    2024年02月03日
    浏览(44)
  • 【Git】关于“git remote: error: hook declined to update”报错的解决

    通过idea进行git提交时,出现 git remote: error: hook declined to update 的报错 仅通过idea中的git报错是无法准确判断具体原因的,只能知道提交被远程仓库拒绝了,但为什么拒绝并不显示 此时,需要在项目所在目录,打开Git Bash,进行手动 git pull 操作 可以看到更加详细的报错信息,然

    2024年02月15日
    浏览(49)
  • Keil关于.axf文件报错

    熟悉Keil C51的同学在使用Keil MDK编译STM32系列单片机时会更容易上手. Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、

    2024年01月20日
    浏览(36)
  • 【详细教程】关于如何使用Git&GitHub的基本操作汇总&GitHub的密钥配置 ->(个人学习记录笔记)

    点击 官网链接 后,进入Git官网,下载安装包 然后根据系统类型进行下载,一般为windows 一般选择64位的安装器版本 下载好后开始安装 点击Next 默认即可,Next 默认即可,Next Next Next Next Next Next Next Next Next Next install即可 我们在桌面随便创建一个文件夹例如code 进入code文件夹 鼠

    2024年02月06日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包