OpenEdv-开源电子网

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

STM32F439的浮点运算功能

[复制链接]

21

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-2-11
在线时间
0 小时
发表于 2014-3-3 14:14:57 | 显示全部楼层 |阅读模式
我最近在用STM32F439这款芯片的时候,发现只要是用到了浮点运算的话,
就会出现HardFault异常,有哪位老兄碰到过这种情况吗。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-3 14:58:37 | 显示全部楼层
回复 支持 反对

使用道具 举报

21

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-2-11
在线时间
0 小时
 楼主| 发表于 2014-3-3 15:07:36 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
找到了一点线索。
M4的FPU单元是一个独立于CPU的浮点运算单元,FPU单元的功能
在大多数厂家的芯片中都是可以被使能和关闭的。
回复 支持 反对

使用道具 举报

21

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-2-11
在线时间
0 小时
 楼主| 发表于 2014-3-3 15:21:40 | 显示全部楼层
使能FPU的代码为

;CPACR is lacated at address 0xE000Ed88
LDR.W R0,=0xE000Ed88
;Read CPACR
LDR R1,[R0]
;Set bits 20-23 to enable CP10 and CP11 coprocessors
ORR R1,R1,#(0xF << 20)
;Write back the modified value to the CPACR
STR R1,[R0]   ;wait for store to complete
DSB 
;reset pipeline now the FPU is enabled
ISB
回复 支持 反对

使用道具 举报

21

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-2-11
在线时间
0 小时
 楼主| 发表于 2014-3-4 15:30:20 | 显示全部楼层
我自己又试了一下,在没有RTOS的环境里,FPU功能没有问题,
但是在RTOS环境里,确实只要一有涉及到FPU的情况,就会发
生HardFault异常,把设计到浮点运算的地方屏蔽掉就不会出现
这个异常,看来还有其他的原因。
回复 支持 反对

使用道具 举报

21

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-2-11
在线时间
0 小时
 楼主| 发表于 2014-3-5 14:23:55 | 显示全部楼层
这个问题的原因已经找到了,M4的用户指南里面说了,
当你使用了浮点函数时,Cortex-M4处理器在进入异常时
会自动把浮点运算相关的状态压入堆栈。Cortex-M4处理器
在进入异常时,自动压栈的格式有两种,一种是不带浮点寄存器
状态的格式,一种是带浮点状态的格式,而且这些寄存器压栈都是
CPU进入异常时自动完成的,不是人为能够干预的。所以在RTOS环境
里面,在进入CPU异常时经常发生线程切换,A线程执行时,发生异常,
进入异常处理,是以带浮点寄存器的格式压栈的,在异常处理的过程中,
发生了线程切换,切换到B线程的堆栈,但是B线程的堆栈是不带浮点
寄存器的格式压栈的,在异常处理退出时,用B线程的堆栈来出栈就会
发生出栈错误,产生HardFault异常。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-3-5 17:13:51 | 显示全部楼层
回复【6楼】fzhYou:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

21

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-2-11
在线时间
0 小时
 楼主| 发表于 2014-3-5 17:30:55 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
支持分享,快乐学习。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2014-9-7
在线时间
0 小时
发表于 2014-9-24 08:58:02 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2014-6-6
在线时间
22 小时
发表于 2014-9-24 21:45:25 | 显示全部楼层
回复【6楼】fzhYou:
---------------------------------
那就是说在使用浮点运算的时候不用进行线程切换?!?LZ是怎么解决的?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 23:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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