硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5901|回复: 8
收起左侧

[有问必答] 关于keil的优化等级

[复制链接]

3

主题

11

回帖

20

积分

新手上路

积分
20
发表于 2020-12-12 11:02:28 | 显示全部楼层 |阅读模式
本帖最后由 jing880311 于 2020-12-12 11:03 编辑

使用的芯片是stm32f407ve,ucos_iii,keil5

我在程序中这样几个赋值的语句
其中 #define Speed 6400               
  1. Speed1 = Speed;                        
  2. vx1 = Speed1;
复制代码
程序中 Speed1 的数据类型是 uint32_t,vx1的数据类型是float。
现在遇到了这样一个问题,就是赋值完后 vx1的值为0.5;
出现这个现象是因为,我把程序中几个全局变量的类型由 uint16_t 改成了 uint32_t。
后来我尝试强制类型转换 vx1 = (float)Speed1;  没有效果
尝试直接赋值 vx1 = 6400;   vx1 = 6400.0f;       都没有效果


但是下面的几个尝试可以得到正确的值
1、vx1的数据类型改为 uint32_t
2、keil中的优化等级改为不优化
3、赋一个其他的值,6399  ,  800等其他的值都没有问题。

其中上面第三个尝试最让我迷惑,为什么只有6400这个值不行呢?(可能也有别的值不行,但是我没有挨个实验)
想着应该是由于程序空间的问题,被优化的结果,但是不是很明白,有没有哪个前辈给解答一下

非常感谢



回复

使用道具 举报

74

主题

1202

回帖

1424

积分

至尊会员

积分
1424
发表于 2020-12-12 11:26:24 | 显示全部楼层
优化和不优化区别本来就很大的。你要看看keil官网文档。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2020-12-12 14:53:07 | 显示全部楼层

回帖奖励 +20 个金币

感觉是你的工程问题,这种基础操作,按理不会出问题,整个简单的跑马灯程序设置各种优化等级跑跑看
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2020-12-12 14:58:46 | 显示全部楼层
eric2013 发表于 2020-12-12 14:53
感觉是你的工程问题,这种基础操作,按理不会出问题,整个简单的跑马灯程序设置各种优化等级跑跑看

如果我去掉一些全局变量,或者全局变量由32位改成16位的,设成最高等级的优化也没有问题;
一开始我以为是vx1是不是在其他地方被赋值了;然后我重新定义一个新的变量代替它,也是有这个现象
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2020-12-12 15:00:30 | 显示全部楼层
jing880311 发表于 2020-12-12 14:58
如果我去掉一些全局变量,或者全局变量由32位改成16位的,设成最高等级的优化也没有问题;
一开始我以为 ...

整个简单的工程测试下。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2020-12-29 17:35:02 | 显示全部楼层
keil偶尔就是有一些奇怪的bug,有时候换一种写法就好了,float a = b,换成float a = 2 * b / 2;
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2020-12-30 08:56:26 | 显示全部楼层
kiraskyler 发表于 2020-12-29 17:35
keil偶尔就是有一些奇怪的bug,有时候换一种写法就好了,float a = b,换成float a = 2 * b / 2;

这个不一定数是bug,也有可能是哪里的实现影响到了这里。要放到具体的语境里面去测试。
回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
发表于 2020-12-30 09:29:01 | 显示全部楼层
楼主可以把测试代码发出来,看你逻辑挺严密的,这个现象值得深究下
回复

使用道具 举报

0

主题

125

回帖

125

积分

初级会员

积分
125
发表于 2021-1-7 11:00:43 | 显示全部楼层
vx1 是全局还是局部变量?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-19 02:11 , Processed in 0.179598 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表