问天少年 发表于 2024-11-12 21:59

请教一下,keil5如何让函数不被优化

今天一个问题被困了好久,USART.C文件中有个函数中有几个for循环,用的KEIL5,开启的O1优化。这几个for语句一直被优化,debug模式下无法打断点。如果不开启优化,代码量会超限。这个怎么让这个函数不被优化啊

zhoupxa 发表于 2024-11-12 23:23

使用编译预处理指令#pragma O0关闭局部优化试试:

#pragma push
#pragma O0
函数...
#pragma pop

我喜欢打游戏 发表于 2024-11-13 20:36

我也遇到这个问题,只能给这个文件单独设置优化等级解决。不知道有没有其他好办法

micoccd 发表于 2024-11-16 18:56

我也是,网上参考了好多,都没用,

我想看大海 发表于 2024-11-20 20:33

单独给单个文件设置优化等级吧

jackcat 发表于 2024-12-10 13:26

可以使用__attribute__((optimize("O0")))属性来指定编译器在编译该函数时不进行优化。

biechedan 发表于 2024-12-10 14:59

使用-O0(无优化)或-O1(有限优化)可以减少对代码的更改。

lzbf 发表于 2024-12-10 20:26

禁用优化可能会影响代码的性能和大小,因此应该只在确实需要的情况下使用。

benjaminka 发表于 2024-12-11 21:51

可以通过调整优化级别来减少优化的可能性。

10299823 发表于 2024-12-12 22:12

使用无优化或有限优化可以帮助你更容易地设置断点和跟踪代码执行。但在发布产品时,通常需要使用更高的优化级别以提高性能。

febgxu 发表于 2024-12-13 20:43

过度优化可能会导致代码质量下降,包括增加代码大小、降低可读性、引入潜在的错误等。因此,在调整优化级别时需要权衡这些因素。

yeates333 发表于 2024-12-13 21:08

在Keil5中,如果你想防止某个函数被编译器优化,可以使用#pragma指令或者__attribute__关键字来告诉编译器不要优化特定的函数。

51xlf 发表于 2024-12-13 22:37

将优化级别设置为 “O0”            

hearstnorman323 发表于 2024-12-14 13:28

禁用函数优化            

问天少年 发表于 2025-1-7 15:26

jackcat 发表于 2024-12-10 13:26
可以使用__attribute__((optimize("O0")))属性来指定编译器在编译该函数时不进行优化。 ...

这个试过了,没效果

问天少年 发表于 2025-1-7 15:26

51xlf 发表于 2024-12-13 22:37
将优化级别设置为 “O0”

不行,用0就会导致代码量过大。FLASH不够

电竞孔乙己 发表于 2025-1-7 15:45

楼主解决了吗,我也遇到这个问题

DreamWanderer 发表于 2025-1-9 18:03

我也是,试了网上很多种方法都不行,最后还是单独文件不优化
页: [1]
查看完整版本: 请教一下,keil5如何让函数不被优化