OpenEdv-开源电子网

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

stm32f407,使能浮点运算。在将4个16位数据拼成一个64位数据时计算出错

[复制链接]

9

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
416
金钱
416
注册时间
2018-6-6
在线时间
126 小时
发表于 2021-8-6 14:50:50 | 显示全部楼层 |阅读模式
10金钱



后面是打印数据,正确应该是0X1222233334444.
计算也应该是没有错的。定义的数据也没有溢出。

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

使用道具 举报

9

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
416
金钱
416
注册时间
2018-6-6
在线时间
126 小时
 楼主| 发表于 2021-8-6 14:53:29 | 显示全部楼层
回复

使用道具 举报

7

主题

480

帖子

0

精华

高级会员

Rank: 4

积分
773
金钱
773
注册时间
2021-4-15
在线时间
304 小时
发表于 2021-8-6 15:13:38 | 显示全部楼层
帮顶!  
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4105
金钱
4105
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-8-6 16:09:37 | 显示全部楼层
u3 = (unsigned long long int)u2*0x100000000;
回复

使用道具 举报

9

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
416
金钱
416
注册时间
2018-6-6
在线时间
126 小时
 楼主| 发表于 2021-8-6 16:53:52 | 显示全部楼层
edmund1234 发表于 2021-8-6 16:09
u3 = (unsigned long long int)u2*0x100000000;

有试过,结果还是一样 打印出来U3=0
回复

使用道具 举报

9

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
416
金钱
416
注册时间
2018-6-6
在线时间
126 小时
 楼主| 发表于 2021-8-6 16:59:44 | 显示全部楼层
debug查看变量,64位数据不显示
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4105
金钱
4105
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-8-6 17:21:17 | 显示全部楼层
WadeWww 发表于 2021-8-6 16:53
有试过,结果还是一样 打印出来U3=0

忘了 0x100000000L, 要加L
回复

使用道具 举报

9

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
416
金钱
416
注册时间
2018-6-6
在线时间
126 小时
 楼主| 发表于 2021-8-6 17:30:07 | 显示全部楼层
edmund1234 发表于 2021-8-6 17:21
忘了 0x100000000L, 要加L

还是一样的
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4105
金钱
4105
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-8-6 18:12:28 | 显示全部楼层



我试过, 没问题的
捕获.PNG
回复

使用道具 举报

9

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
416
金钱
416
注册时间
2018-6-6
在线时间
126 小时
 楼主| 发表于 2021-8-9 09:05:23 | 显示全部楼层
edmund1234 发表于 2021-8-6 18:12
我试过, 没问题的

昨天在裸机上测试了,没问题。但是在ucosiii工程里面发现算出来结果有问题。线程堆栈已经给到了1024
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4105
金钱
4105
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-8-9 09:12:24 | 显示全部楼层
WadeWww 发表于 2021-8-9 09:05
昨天在裸机上测试了,没问题。但是在ucosiii工程里面发现算出来结果有问题。线程堆栈已经给到了1024

别用局部变量来试, 把它们都暂时改为全局的, 查完错后再改回局部的
回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2021-8-9 09:53:22 | 显示全部楼层
帮顶  
回复

使用道具 举报

12

主题

330

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2294
金钱
2294
注册时间
2016-5-21
在线时间
954 小时
发表于 2021-8-9 14:46:11 | 显示全部楼层
本帖最后由 xxssl 于 2021-8-10 08:26 编辑

你要用左移加 的方式转成64位数据就对了,IDE默认是32位运算
回复

使用道具 举报

9

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
416
金钱
416
注册时间
2018-6-6
在线时间
126 小时
 楼主| 发表于 2021-8-9 15:28:07 | 显示全部楼层
xxssl 发表于 2021-8-9 14:46
你要用右移加 的方式转成64位数据就对了,IDE默认是32位运算

计算是没问题的。发现是ucosii堆栈深度问题。但是原因没找到。定义一个全局变量后就正常了。注释掉全局变量,计算就有问题
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4105
金钱
4105
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-8-9 15:48:21 | 显示全部楼层
WadeWww 发表于 2021-8-9 15:28
计算是没问题的。发现是ucosii堆栈深度问题。但是原因没找到。定义一个全局变量后就正常了。注释掉全局变 ...

我不知道你是怎样处理这些u64, 如果说你是用类似Queue的方法传给别的线程之后就退出计算u64的函数, 这是不能用局部变量的, 因为函数退出后, 所有局部变量都会被栈回收。 只可以用全部或动态内存。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 05:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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