OpenEdv-开源电子网

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

stm32F4做浮点计算的问题

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-10-27
在线时间
0 小时
发表于 2012-10-27 15:08:14 | 显示全部楼层 |阅读模式
各位大神,我现在移植一套程序到stm32F4上,之前是在PC机上跑的,考虑到这款芯片有FPU所以选的这款,在DEBUG的时候发现很多问题,除了设置FPU外,发现一些很简单的运算也会出问题,不知道有没有遇到同样问题的人,经常会跳到HardFault_Handler这个函数中去,有没有人知道这怎么解决的?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-10-27
在线时间
0 小时
 楼主| 发表于 2012-10-27 16:14:47 | 显示全部楼层
回复【楼主位】liu00zhe:
---------------------------------
之前是因为FPU设置没有开启,所以遇到浮点运算就会崩溃,一些简单的浮点赋值语句就会崩溃,但是现在开启了,但是现在一些简单的计算还是会崩溃,有没有人遇到过这种情况的?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-10-27 16:39:44 | 显示全部楼层
回复【2楼】liu00zhe:
---------------------------------
Hardfault,一般都是内存访问错误,你看看代码吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-10-27
在线时间
0 小时
 楼主| 发表于 2012-10-27 17:00:35 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
我DEBUG了,但是跟踪的时候,很简单的计算都会算错,算错了不说,一行简单的计算后赋值就崩溃了
回复 支持 反对

使用道具 举报

27

主题

148

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
276
金钱
276
注册时间
2012-7-25
在线时间
0 小时
发表于 2012-10-27 17:47:32 | 显示全部楼层
网上查查吧,移植ucos时,我的版本是不能开启fpu的,不然就硬件错误。

据说,原因是 fpu 所用的几个寄存器没有正确入栈出栈。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-10-27
在线时间
0 小时
 楼主| 发表于 2012-10-29 10:32:51 | 显示全部楼层
额,没有正确入栈出栈的FPU能用吗?那不扯淡,那它官方还说有FPU,支持浮点运算?不是吧,另有原因吧?
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-10-27
在线时间
0 小时
 楼主| 发表于 2012-10-29 10:36:26 | 显示全部楼层
没有人用F4吗?没人用到了其中的浮点计算吗?
回复 支持 反对

使用道具 举报

31

主题

175

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2013-1-13
在线时间
6 小时
发表于 2013-8-31 10:32:41 | 显示全部楼层
今天也在找这个问题,看到这个还是12年的帖子,帖子中还没有解决问题的方法。我把我找到的分享一下:
这是ST的库的问题,在systeminit的函数里,加上以下这一句就行了,就是打开fpu的意思,没有这一句,选了keil的选项也没用的,另外你试试keil的软仿貌似也是不行的,从0x00000无法跳转,总之太新了,bug太多。
void SystemInit(void)
{
  /* FPU settings ------------------------------------------------------------*/
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
  #endif
电子的道路是孤独的,要懂得左手温暖右手,要懂得把debug当作快乐去欣赏,去享受,那样你才会成功...
回复 支持 反对

使用道具 举报

21

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-2-11
在线时间
0 小时
发表于 2014-3-3 19:24:25 | 显示全部楼层
我今天也遇到了同样的问题,一碰到浮点运算就跳到HardFault里面去了,
开启了FPU也不管用。楼主后来解决了吗?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-7-30
在线时间
0 小时
发表于 2014-7-30 20:59:45 | 显示全部楼层
我用stm32f407也遇到了这情况,一碰到浮点运算就跳到硬件错误。没办法,我在mdk的选项中把FPU去掉了,就不出错了。
回复 支持 反对

使用道具 举报

20

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2013-7-4
在线时间
5 小时
发表于 2015-10-27 23:37:16 | 显示全部楼层

http://m.blog.csdn.net/blog/yzhajlydy/20209197#

这个文章说的很细了

回复 支持 反对

使用道具 举报

16

主题

173

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2441
金钱
2441
注册时间
2014-11-5
在线时间
348 小时
发表于 2016-2-17 17:42:10 | 显示全部楼层
我也遇到了,f4内部温度实验那章,已进行浮点运算就会计入硬件错误中断
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-9-18
在线时间
0 小时
发表于 2016-9-18 15:30:57 | 显示全部楼层
楼上的问题解决了吗,我现在也碰到这样的问题,相应的配置都已经做了,但是还是会报hardfault的错
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2018-10-22
在线时间
11 小时
发表于 2018-12-11 12:47:18 | 显示全部楼层
我也遇到了,怎么没看到有解决的方法啊
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2018-10-22
在线时间
11 小时
发表于 2018-12-11 16:07:17 | 显示全部楼层
我的已经解决了,看的资料上的在startup_stm32f429xx.s中添加代码,<<STM32F429 UCOS开发手册_V1.0.pdf>>第20页有讲解

回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2015-12-25
在线时间
10 小时
发表于 2019-4-1 13:40:55 | 显示全部楼层
是因为参与浮点运算的变量地址没有4字节对齐,一般是结构体会出现问题,默认编译器是会进行4字节对齐的,有的强制赋值的就没有对齐。
具体可以看芯片状态,判断是什么原因导致的硬件故障。
可查看Usage Fauilts 状态位
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 04:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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