打印
[资料下载]

Keil优化导致代码出错

[复制链接]
739|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
51xlf|  楼主 | 2023-2-13 10:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Keil在优化代码的时候,对于一些隐式调用,会出错的。
例如(以下例子来源于参考资料):
你在ROM的0x00002000处定位了一个函数,假设为void test(void),然后使用函数指针来调用它:
void (*UserProgram)();          //函数指针
UserProgram = (void (*)()) (0x00002000);//定位到指定的入口地址0x00002000
(*UserProgram)();//调用test()函数
这样做的本意是调用test()函数,但编译器并不知情,它仍会按照默认的指令将test函数给整个优化掉,因为它觉得test()函数根本没有被调用,这个时候,虽然(*UserProgram)();仍会执行,但内容与初衷已经大相径庭.

使用特权

评论回复
沙发
jkl21| | 2023-3-3 20:48 | 只看该作者
编译优化选择设置为0(不优化)就可以了。

使用特权

评论回复
板凳
primojones| | 2023-3-3 20:55 | 只看该作者
keil如何防止代码被优化?              

使用特权

评论回复
地板
uiint| | 2023-3-3 21:10 | 只看该作者
Keil在优化代码的时候,对于一些隐式调用,会出错的。

使用特权

评论回复
5
hilahope| | 2023-3-3 21:16 | 只看该作者
Keil并不完美,有些优化方式存在bug

使用特权

评论回复
6
plsbackup| | 2023-3-3 21:21 | 只看该作者
有些优化也并不是编程者所需的目的,会导致程序流程与编程预期不符。

使用特权

评论回复
7
sdlls| | 2023-3-3 21:44 | 只看该作者
貌似代码有被优化掉               

使用特权

评论回复
8
mmbs| | 2023-3-3 21:50 | 只看该作者
好久好久以前,出现过keil编译优化错误,无编译错误提示,但是,逻辑却是错的。

使用特权

评论回复
9
gygp| | 2023-3-3 22:15 | 只看该作者
优化级别越高,出问题的可能性越大。

使用特权

评论回复
10
nomomy| | 2023-3-3 22:24 | 只看该作者
KEIL代码执行异常?              

使用特权

评论回复
11
kmzuaz| | 2023-3-4 12:59 | 只看该作者

开发既要代码小,又想速度快,该如何优化?

使用特权

评论回复
12
vivilyly| | 2023-3-4 19:29 | 只看该作者
之前遇到过,当优化级别为o1时,程序中局部变量值被突然更改;程序运行uart发送时,会进入HardFault_Handler

使用特权

评论回复
13
backlugin| | 2023-3-5 10:43 | 只看该作者
之前遇到过,当优化级别为o1时,程序中局部变量值被突然更改;程序运行uart发送时,会进入HardFault_Handler

使用特权

评论回复
14
tifmill| | 2023-3-5 10:53 | 只看该作者

开发既要代码小,又想速度快,该如何优化?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

535

主题

9595

帖子

23

粉丝