STM32
直播中

卓侨汉

8年用户 1082经验值
擅长:MEMS/传感技术
私信 关注
[问答]

KEIL怎么禁止某个函数/某段代码被编译器优化?

有没有大佬知道,KEIL怎么禁止某个函数/某段代码 被编译器优化?

回帖(2)

杨剑东

2024-4-10 16:38:51
我用的是 GCC,不过原理是一样的。开发过程中会开优化,不过用 -Og 或 -O1 这种不怎么激进的优化模式。这种优化模式下只有一些很明显的简单优化,不至于影响程序调试。正是产品则会用 -Os 或 -O3 这样的激进优化,而且会开 LTO。
GCC 的优化等级有这些:
* -O0 完全不优化。
* -Og 不影响调试的简单优化。
* -O1 简单优化。
* -O2 中度优化。
* -Os 在 -O2 的基础上针对代码体积做激进优化。
* -O3 在 -O2 的基础上针对代码速度做激进优化。
* -Ofast 在 -O3 的基础上针对速度做更激进的优化,代码体积可能会比 -O2 还要大。

* -flto 打开链接时优化(LTO)功能,允许优化算法跨函数。
举报

胖子的逆袭

2024-4-10 17:41:39
在 KEIL 中禁止某个函数或某段代码被编译器优化,可以通过使用优化宏来实现。以下是一种常用的方法:

1. 在 KEIL 的编译选项中,打开“Options for Target”对话框。
2. 在对话框中的“C/C++”选项卡中,找到“Miscellaneous”选项。
3. 在“Miscellaneous”选项中,找到“Optimizations”字段。
4. 在“Optimizations”字段中,添加以下宏:

```
#pragma O0 // 禁止整个文件优化
```

或者

```
#pragma opt_level = 0  // 禁止指定函数/代码段的优化
```

5. 编译代码时,凡是带有上述宏的函数或代码段将会被编译器禁止进行优化。

注意:以上方法是适用于 KEIL 编译器的,其他编译器可能需要采用不同的方法来禁止优化。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分