OpenEdv-开源电子网

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

在主程序中和中断里面都进行浮点数运算时 程序会出错

[复制链接]

2

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1499
金钱
1499
注册时间
2019-1-19
在线时间
156 小时
发表于 2021-8-5 21:55:53 | 显示全部楼层 |阅读模式
1金钱
STM32H743在主程序中和中断里面都进行浮点数运算时 程序会出错, 将中断里的浮点数运算部分屏蔽就正常了,是程序出错,不是跑飞。开启硬件浮点数运算,有人遇到过吗?

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

使用道具 举报

7

主题

480

帖子

0

精华

高级会员

Rank: 4

积分
775
金钱
775
注册时间
2021-4-15
在线时间
304 小时
发表于 2021-8-6 10:22:49 | 显示全部楼层
中断最好简单的整理一些标志!接收完到主程序去运行吧!是报硬件错误中断了?
日常敲键--头秃一片
回复

使用道具 举报

2

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1499
金钱
1499
注册时间
2019-1-19
在线时间
156 小时
 楼主| 发表于 2021-8-6 10:42:57 | 显示全部楼层
日渐秃兀 发表于 2021-8-6 10:22
中断最好简单的整理一些标志!接收完到主程序去运行吧!是报硬件错误中断了?

不是硬件报错 是有些 for循环  提前结束了  把中断里面的浮点运算 注释掉就好了  主程序中也用到了 浮点运算有些浮点运算必须在中断里面完成
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-8-6 11:56:36 | 显示全部楼层
不要在中断里浮点。看似很简单的浮点,很耗时间和内存资源。通常情况下,为了整体的运行性能以及响应速度,中断处理程序执行时间越短越好,因此,一般把较大的运算工作量放在任务函数中处理,中断程序仅设置标志。实际测试中断时间长了肯定会出错的。
回复

使用道具 举报

2

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1499
金钱
1499
注册时间
2019-1-19
在线时间
156 小时
 楼主| 发表于 2021-8-6 12:45:54 | 显示全部楼层
c2007s 发表于 2021-8-6 11:56
不要在中断里浮点。看似很简单的浮点,很耗时间和内存资源。通常情况下,为了整体的运行性能以及响应速度, ...

换STM32H743 就是为了在中断里完成 完成复杂的运算   是必须在中断里完成浮点运算 目前看来 速度是足够快的 就是会出错
回复

使用道具 举报

2

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1499
金钱
1499
注册时间
2019-1-19
在线时间
156 小时
 楼主| 发表于 2021-8-6 14:21:43 | 显示全部楼层
现在把FPU关掉就正常了 但是中断的处理速度会慢很多
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-8-7 14:25:45 | 显示全部楼层
看看你的条件编译语句,确认是否开了FPU。如果没有开,编译通过运行也会出错
回复

使用道具 举报

2

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1499
金钱
1499
注册时间
2019-1-19
在线时间
156 小时
 楼主| 发表于 2021-8-8 09:37:18 | 显示全部楼层
c2007s 发表于 2021-8-7 14:25
看看你的条件编译语句,确认是否开了FPU。如果没有开,编译通过运行也会出错

这里吗?这个加与不加 效果都一样  反汇编里看 都会通过硬件计算浮点运算
无标题.jpg



回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2021-8-8 10:26:35 | 显示全部楼层
使用浮点硬件运算 要判断分母不能为0的处理 不然分母一旦为0会进入浮点运算出错导致程序不正常
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

2

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1499
金钱
1499
注册时间
2019-1-19
在线时间
156 小时
 楼主| 发表于 2021-8-8 11:29:59 | 显示全部楼层
DongInker 发表于 2021-8-8 10:26
使用浮点硬件运算 要判断分母不能为0的处理 不然分母一旦为0会进入浮点运算出错导致程序不正常

浮点运算前要先判断分母是否为零?
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-8-10 17:23:44 | 显示全部楼层
在target选项卡下面,使用微库下面,有硬件浮点选项
回复

使用道具 举报

56

主题

343

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-3-8
在线时间
267 小时
发表于 2021-8-11 09:00:18 | 显示全部楼层
哈哈哈,这确实是容易被认忽略的问题。MCU的外设寄存器是不进行现场保护的。而硬件浮点运算器被认为是外设。硬件浮点处理过程先要往浮点寄存器里写运算数据,然后启动运算,等待完成取出结果。比如主程序在写入浮点运算数据等待结果时,进了中断,中断进行了其他浮点运算。这时浮点寄存器里的数据被中断改了。那退出中断,主程序去读取的浮点结果就错了。
回复

使用道具 举报

56

主题

343

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-3-8
在线时间
267 小时
发表于 2021-8-11 09:10:26 | 显示全部楼层
解决办法无他,中断里不要用浮点。收好数据出中断运算。
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2024-8-27
在线时间
3 小时
发表于 2024-12-2 19:20:42 | 显示全部楼层
我也有同样的问题,不知道楼主解决没有,由于实时性的要求,必须要在中断中处理浮点数部分运算,在主程序中,凡是涉及到浮点数运算只能执行关中断和开中断的操作,非常烦~
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-11 05:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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