博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
keil优化等级影响STM32 GPIO速度变化
阅读量:4223 次
发布时间:2019-05-26

本文共 1203 字,大约阅读时间需要 4 分钟。

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_ResetOutputPin(	GPIOA, LL_GPIO_PIN_12);LL_GPIO_SetOutputPin(	GPIOA, LL_GPIO_PIN_12);LL_GPIO_ResetOutputPin(	GPIOA, LL_GPIO_PIN_12);LL_GPIO_SetOutputPin(	GPIOA, LL_GPIO_PIN_12);LL_GPIO_ResetOutputPin(	GPIOA, LL_GPIO_PIN_12);

脉宽时间变为200ns。

将keil优化等级设置为Level 1,时间恢复为80ns,问题解决。

查阅相关资料,对于优化等级的说明如下:

不同的优化级别允许您在级别之间进行权衡已编译代码中可用的调试信息以及代码的性能。以下优化级别可用:
-O0应用最小优化:
大多数优化都被关闭,生成的代码具有最佳的调试视图。
-O1应用受限优化:
例如,删除未使用的内联函数和未使用的静态函数。在这个优化级别,编译器还应用自动优化,例如删除冗余代码和重新排序指令以避免互锁情况。生成的代码经过合理优化,具有良好的调试视图。
-O2应用高优化(这是默认设置):
在此级别应用的优化利用了ARM对处理器体系结构的深入了解,利用给定目标的特定于处理器的行为。它生成优化良好的代码,但有限调试视图。
-O3应用最积极的优化:
优化符合用户的-Ospace / -Otime选择。默认情况下,多文件编译是启用,这会导致更长的编译时间,但会提供最高级别的优化。
Optimize for Time
“优化时间”复选框使编译器进行优化,更加注重实现最佳效果检查时的性能(-Otime)或未选中时的最小代码大小(-Ospace)。
取消选中Optimize for Time就意味着选择-Ospace选项,该选项指示编译器执行优化以可能增加的执行时间为代价来减小Image文件大小。例如,使用非内联函数调用而不是大型结构副本的内联代码。 这是默认选项。从中运行编译器时命令行,使用'-Ospace'调用此选项选中Optimize for -Otime选项,该选项指示编译器以最快的速度优化代码执行时间,有可能增加image文件大小。建议编译时间关键部分您的代码使用-Otime,其余使用-Ospace指令。

转载地址:http://quemi.baihongyu.com/

你可能感兴趣的文章
Linux下使用putty进行UART串口调试
查看>>
WebSocket
查看>>
彻底理解cookie,session,token
查看>>
Binder机制的原理
查看>>
Android系统启动过程从下往上的一个过程
查看>>
AndroidStudio导入工程同步出现的问题
查看>>
Sweet Snippet 之 字符串编辑距离
查看>>
编程小知识之 循环依赖
查看>>
.NET GC 精要(一)
查看>>
Coroutine,你究竟干了什么?
查看>>
代码宏的一点小知识
查看>>
Coroutine,你究竟干了什么?(小续)
查看>>
Sweet Snippet系列 之 随机选择
查看>>
Sweet Snippet 之 Bounce Setting
查看>>
iTween 那些事儿(一)
查看>>
iTween那些事儿(二)
查看>>
Sweet Snippet系列 之 元素删除
查看>>
Sweet Snippet系列 之 TCP数据接收
查看>>
“疑难杂症”二记
查看>>
“疑难杂症”又二记
查看>>