KEIL里的优化选项解读

一、优化等级

优化大家都知道,-O0,-O1,-O2,-O3,等级越高优化程度越高,代码的执行效率也就越高。但是开启优化存在几个问题:

1、低优化等级代码能跑,开启高优化等级后代码就跑不起来了
2、高优化等级代码能跑,开启低优化等级后代码就跑不起来了
3、Optimize for time的3种状态是什么意思?

问题1和2的解决思路看看 硬汉大神的帖子
我这里也贴一下截图
在这里插入图片描述
除了硬汉说的,我再补充点。

按照硬汉的思路我从-O0 ->-O3对GD32F450的工程进行实验,发现ADC在-O0的时候可以正常运行,一但超过-O1,就进不了DMA中断了。所以可以排除硬件配置有问题。

然后就是无头苍蝇似的找问题,最后想起来对比下他们的寄存器

通过对比发现TIMER的寄存器都一样,ADC忘了看了,DMA1CH0的寄存器两个有几处不同
在这里插入图片描述
其中最大的不同就是CH0M0ADDR,也就是存放ADC转换的数组ADC_ConvertedValue的地址不同了
在这里插入图片描述
而0x10000000是TCMSRAM的区域。正好前段时间因为LCD优化请教过别人,TCMSRAM是无法配置DMA的。从下图可以看出来,TCMSRAM只有DBUS总线,并没有DMA的总线连接。
在这里插入图片描述

把用到DMA搬运的文件都手动定义到普通SRAM里,问题迎刃而解,即使开启-O3程序也能跑了(o)/!
在这里插入图片描述

第3个问题还是在群里问大神才知道。
在这里插入图片描述

二、One ELF Section per Function

这个选项默认情况下应该是打开的。我在进行优化等级测试的时候,不知道什么时候把这个选项关掉了,导致代码死活跑不起来了。
然后对比.uvprojx文件发现这个地方有差异,改回来就好了。
作用就是 把程序中未调用的函数给优化掉,不参与编译

iommer
关注 关注
  • 10
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于ARM Keil5 Optimization level 优化等级的一些分析
小灰灰的博客
09-23 1万+
官网文档: https://www.keil.com/support/man/docs/uv4/uv4_dg_adscc.htm 翻译如下: Optimization level -O0 -O0禁用所有优化。使用-O0可以加快编译和构建时间,但是生成的代码比其他优化级别要满。与其他优化级别相比,-O0的代码大小和堆栈使用率明显要高。生成的代码与源代码密切相关,但生成的代码要多得多,包括死代码。 Optimization level -O1 -O1支持编译器中的核心优化。因为这个级别比-O0提供了更好的代
编译器优化导致问题(调试技术)
难波儿万的博客
10-17 2287
在讲编译器优化导致程序问题前先要讲讲什么是编译器优化。不同的C语言编译器都会对程序进行一定程度的优化,每种编译器都会划分几种编译优化等级。不同的优化等级对程序的优化程度不同,有对代码空间的优化,有对执行时间的优化。编译器针对不同问题优化都是基于某种算法的,但是最终的原则是不能改变用户程序的执行逻辑。在大多数情况下这种优化会提高程序的执行效率及优化代码空间,但是有时编译器也会错误的领会程序员的意图,将一些代码优化后造成不可预测的问题
劝君慎用KEILC51九级优化
08-02
有时程序才4K多一点,或者8K多一点,32K多一点,64K多一点,总会想方设法去优化压缩代 码,以便放到更低成本的芯片中去,可是这时问题可能就出现了!
C语言编译的优化等级应该选哪个?O0、O1、O2还是O3
最新发布
manhuami2007的博客
04-27 1429
在使用IDE开发STM32程序时,IDE一般都会提供优化等级设置的选项,例如KEIL提供的O0、O1、O2和O3,这些不同的优化等级有什么区别,应该如何选择?
Keil的代码优化产生的问题
08-03
本文中对原文提到的问题,提出了三种不同于原文的解决方法。每种方法都比原文中提到的方法更直接和简单,设计也更规范。
记录一下KEIL编译器的优化等级及说明
weixin_43869518的博客
04-11 7969
1,先看一下官方文档(此资料为翻译后的) Optimization level -O0 Optimization level -O1 Optimization level -O2 Optimization level -O3 以上可以看出 官方推荐的优化等级是01 可以大幅度提高代码运行的效率,压缩代码大小 而优化等级2和3 则会得到更高效的运行效率, 但也要求我们写的代码更加严谨才可以,不然压缩优化后的代码如果写得不严谨, 是很容易出现问题的. ...
keil优化等级影响STM32 GPIO速度变化
木牛的博客
03-01 3159
keil优化等级设置为Level 0时,增加或删除部分GPIO翻转的指令,发现GPIO翻转的脉宽会变化。 如l优化等级设置为Level 0时,以下高电平时间为80ns, LL_GPIO_ResetOutputPin( GPIOA, LL_GPIO_PIN_12); LL_GPIO_SetOutputPin( GPIOA, LL_GPIO_PIN_12); LL_GPIO_ResetOutputPin( GPIOA, LL_GPIO_PIN_12); 将代码增加到: LL_GPIO_ResetOu
keil优化等级设置
08-27 2791
Keil C51总线外设操作问题的深入分析 阅读了《单片机与嵌入式系统应用》2005年第10期杂志《经验交流》栏目的一篇文章《Keil C51对同一端口的连续读取方法》(原文)后,笔者认为该文并未就此问题进行深入准确的分析 文章中提到的两种解决方法并不直接和简单。笔者认为这并非是Keil C51中不能处理对一个端口进行连续读写的问题,而是对Kei1 C51的使用不够熟悉和设计不够细致的问题...
Keil中C/C++优化等级选几?
12-14 3604
拿到别人的一份代码,他选的是Level 3,如果选成 Level 0,链接会出错。 这意味着什么? 如果需要优化后代码才能运行,那是不是意味着,代码设计有问题(RAM的使用)? (1)3是最高优化,省了很多空间,0是不优化,很多多余的东西都占地方,连接出来不是RAM不够就是ROM不够,或者堆栈越界之类的错误了 (2)不是代码设计问题,同一个程序可以用查表法,也可以用其他的方法等,除法可
KEIL C51代码优化详细分析
08-03
在实际工作中遇到对同一端口反复连续读取,Keil C51编译并未达到预期的结果。对C编译出来的汇编程序进行分析发现,对同一端口的第二次读取语句并未被编译。本文中该问题,提出了三种不同于原文的解决方法。每种方法都比较直接和简单,设计也更规范。
keil说明手册
04-08
它支持优化选项,帮助提高代码执行效率。 4. **RealView Debugger**:这个强大的调试工具允许开发者在硬件或软件模拟器上对代码进行单步调试,查看变量状态,设置断点,检查内存等。这对于查找和修复错误至关重要。...
keil c视频教学
08-27
4. **链接器配置**:在Keil中,你需要配置链接器选项来指定程序存储空间分配、中断向量表的位置等。理解这些配置对于解决链接错误至关重要。 5. **编译与调试**:讲解编译过程,包括预处理、编译、汇编和链接四个...
keil教程 手把手教你使用keil软件
04-29
1. 官方文档:详细解读Keil的各项功能和配置,是学习的重要参考。 2. 在线社区:如Stack Overflow、嵌入式论坛等,可以寻求问题解答和经验分享。 3. 项目实例:通过实际项目锻炼,加深理论与实践的结合。 总结,...
keilC 51教程
11-28
3. 配置设置:用户可以根据个人喜好和项目需求调整编译器的选项,例如优化级别、内存模型等。 二、Keil C51编程环境 1. 创建工程:在Keil C51中,我们需要创建一个新的工程,选择对应的单片机型号,并添加源代码...
单片机编程keil实例教程
01-02
接着,实例部分将展示如何创建一个新的项目,添加源文件,配置编译选项,如目标芯片类型、优化级别等。教程会提供简单的LED闪烁、串口通信等经典实例,通过实际操作来加深对keil的理解。 编译与链接是keil中的重要...
关于keil MDK调整优先级程序出错的解决思路
再怎么痛、也要向天微笑丶的博客
01-05 2535
关于keil MDK调整优先级程序出错的解决思路
KEIL5中C/C++优化等级问题
热门推荐
In ShangHai | 分析技术的点点滴滴。
05-12 2万+
知乎上有篇详解 https://zhuanlan.zhihu.com/p/24402180强烈推荐 C/C++的优化等级会对程序产生 不定性的影响,至于选择哪种优化等级必须从 现有的程序分析才行 可参考知乎上的讲解 原文 0Minimum optimization. Turns off most optimizations.It gives the best possi...
防止keil编译器优化函数
12-12
为了防止Keil编译器优化函数,可以使用__attribute__((used))属性。该属性告诉编译器,即使该函数没有被显式调用,也要将其保留在目标文件中。例如: ```c void __attribute__((used)) entry(void) { // 函数体 } ``` 另外,也可以使用__attribute__((noinline))属性来防止编译器对函数进行内联优化,从而保证函数的可见性。例如: ```c __attribute__((noinline)) void foo(void) { // 函数体 } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
13
原创
138
点赞
266
收藏
31
粉丝
关注
私信
写文章

热门文章

  • C语言:打印星号*金字塔代码 47193
  • 数据结构中 为什么要用typedef int datatype ,而不直接用int 15718
  • KEIL里的优化选项解读 7427
  • python list print输出小结 1254
  • 函数间传递动态内存,C语言函数间动态内存的传递详解 941

分类专栏

  • Python 3篇
  • C语言 5篇
  • 数据结构 2篇
  • 指针 1篇
  • 函数 1篇

最新评论

  • 通过Ubuntu虚拟机+Linux移植LVGL并通过linux Frame buffer显示

    CSDN-Ada助手: 推荐 CS入门 技能树:https://edu.csdn.net/skill/gml?utm_source=AI_act_gml

  • 数据结构中 为什么要用typedef int datatype ,而不直接用int

    luckybobuu: 谢谢,终于懂了

  • 数据结构中 为什么要用typedef int datatype ,而不直接用int

    RARrrrrrr: 谢谢指点,我明白了

  • C语言:打印星号*金字塔代码

    要成为c的男人: 刚写的比较菜

  • C语言:打印星号*金字塔代码

    要成为c的男人: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { /* * *** ***** ******* */ //金字塔 //每行层的空格=总层数-当前层数; int lay = 10; printf("制造金字塔\n"); printf("请输入金字塔的层数(请摁两次enter键)(最大输入61最小输入3):"); scanf("%d", &lay); if (lay > 61 || lay < 3) { printf("输入错误"); } else { printf("制作完毕\n\n\n"); for (int i = 1; i < lay; i++) {//代表层数 for (int j = 1; j < (lay - i); j++) {//每层空格数 printf(" "); } for (int c = 1; c <= (i * 2 - 1); c++) {//控制每行*的数量 printf("*"); } printf("\n"); } } system("pause"); return 0; }

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • IMX6ULL开发板spi OLED驱动
  • 将LVGL制作成静态库
  • CMakeFile.txt通过sysroot方式后生成makefile报错
2024年4篇
2022年1篇
2021年4篇
2019年5篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码大芬至尊标王南山网站优化软件木棉湾建站观澜百度网站优化同乐网站排名优化布吉营销型网站建设坪山网站优化软件惠州品牌网站设计荷坳如何制作网站坑梓网站搭建惠州网络营销南澳关键词按天收费木棉湾百度关键词包年推广塘坑标王龙华百度竞价包年推广松岗百姓网标王龙岗企业网站制作龙华网站seo优化大鹏SEO按天计费深圳网站优化横岗网站排名优化爱联网站建设罗湖网络营销龙华企业网站制作西乡SEO按效果付费福田seo网站推广南联网站seo优化罗湖百度网站优化排名爱联外贸网站建设石岩网站优化软件歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化