OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17650|回复: 10

形参用float数据传不进来用double就可以,这是什么道理?

[复制链接]

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2013-5-8
在线时间
2 小时
发表于 2013-8-14 20:17:54 | 显示全部楼层 |阅读模式
碰到一个很奇葩的问题,形参用float数据传不进来用double就可以,这是什么道理?

void SetPWM(float pwm)
{
u16 CCRx;
if(pwm>=1) pwm=0.9999;
CCRx=pwm*10000;
TIM_SetCompare1(TIM4,CCRx);//CCRx=0或CCRx=9999这是pwm的二个极端
}//这时用来设定定时器4产生pwm波的,形参pwm用float类型数据就是过不来,用double的就可以。头疼啊!这算什么道理啊

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2613
金钱
2613
注册时间
2011-1-25
在线时间
176 小时
发表于 2013-8-14 20:40:01 | 显示全部楼层
一直努力就很好。
回复 支持 反对

使用道具 举报

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2013-5-8
在线时间
2 小时
 楼主| 发表于 2013-8-14 21:04:41 | 显示全部楼层
就比如实参为0.5,在调用SetPWM(0.5)时,用仿真看到形参pwm=0。而不是0.5
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-8-14 22:39:15 | 显示全部楼层
莫非是人品问题?


我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2013-8-14 22:57:20 | 显示全部楼层
估计是没有声明,默认按double传递了。不过,默认的不是int吗,难道实参影响了编译器的默认形参?
业余程序玩家。
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-8-15 09:40:35 | 显示全部楼层
8字节对齐,double 是8字节的,float在某些情况下,做形参 会有溢出。比如在OS TASK 中栈中。在当前.c文件 __attribute((aligned (8))) 声明下 8字节对齐,再试试
1-1
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-8-15 12:09:15 | 显示全部楼层
***********************************

是仿真器的问题!!!

我遇到过 , 这个仿真器 是按照 double 8字节格式 显示数据的, 设置float 就显示不正常
是这个 软件仿真的一个 BUG

不过 烧写到芯片中 , 没有影响!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-8-15 14:18:46 | 显示全部楼层
回复【7楼】aleda303:
---------------------------------
还有这事?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-8-15 17:16:44 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
再 MPLAB 里面 现象 跟这个是一样的
回复 支持 反对

使用道具 举报

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2013-5-8
在线时间
2 小时
 楼主| 发表于 2013-8-16 15:03:38 | 显示全部楼层
今天我回过来又试了下,float也可以用了,可能是keil软件的bug吧,具体是什么原因,我找不出来。
回复 支持 反对

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2016-5-28
在线时间
32 小时
发表于 2016-11-24 19:30:17 | 显示全部楼层
本帖最后由 wanghongyang518 于 2016-11-24 19:54 编辑

我也是,float类型的形参传递出问题。。。。。。。。。。。。。每次就只能定义一个全局变量来用
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 10:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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