查看: 2969|回复: 6

[求助] K64中断导致sin计算出错

[复制链接]

该用户从未签到

11

主题

43

帖子

0

中级会员

Rank: 3Rank: 3

积分
418
最后登录
2024-3-22
发表于 2019-5-20 11:49:57 | 显示全部楼层 |阅读模式
不知版上的朋友,在使用k64时或其他类似M4芯片时有没有碰到过这样的问题?一个程序里面放了两个不同优先级的中断做计算,两个中断都用到了FPU,低优先级的浮点运算有时会出现计算错误,出现INF值,比如三角函数计算或FFT计算,其他简单的加减乘除计算出错倒是没有碰到过。但是关闭高优先级的中断或者在进行浮点运算前后用临界区保护,都不会出错。但是我实际用到的浮点运算还比较多,我也不确定其他计算是否在中断时也存在出错概率,如果每一段代码都加临界区保护,程序基本上没办法编写。是不是编译器的编译出来的代码中断现场保护不够,还需要自己添加其他现场保护代码?

最佳答案

czp111 发表于 2019-5-29 14:31 谢谢版主,这个方法也可以咯,相当于回避了中断嵌套,暂时先用这个方法来解决问题。只是不太明白为什么会 ... 那可能跟CMSIS库有关,你可以在ARM公司论坛咨询一下 ...
回复

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25450
最后登录
2025-9-4
发表于 2019-5-21 09:49:34 | 显示全部楼层
在你工程中,进行浮点运算的库是来自CMSIS吗?你是怀疑当低优先级的中断在调用CMSIS库时,被高优先级的中断给抢占了而导致的计算错误吗?
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

43

帖子

0

中级会员

Rank: 3Rank: 3

积分
418
最后登录
2024-3-22
 楼主| 发表于 2019-5-23 17:35:36 | 显示全部楼层
小恩GG 发表于 2019-5-21 09:49
在你工程中,进行浮点运算的库是来自CMSIS吗?你是怀疑当低优先级的中断在调用CMSIS库时,被高优先级的中断 ...

是来自于CMSIS库,测试过,低优先级的被中断导致的错误,如果计算前关闭中断,计算后再开就没问题。
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

43

帖子

0

中级会员

Rank: 3Rank: 3

积分
418
最后登录
2024-3-22
 楼主| 发表于 2019-5-28 14:18:33 | 显示全部楼层
小恩GG 发表于 2019-5-21 09:49
在你工程中,进行浮点运算的库是来自CMSIS吗?你是怀疑当低优先级的中断在调用CMSIS库时,被高优先级的中断 ...

版主,您好,现在我发现这个问题还是比较严重,如果我有两个中断都用到FPU浮点计算,不做保护处理,就有出错的概率,有时候会导致cpu重启,但是如果要处理,需要保护的地方太多了,程序没办法写,要么就是所有用到浮点运算的都放在一个中断里面,但是有些计算不需要这么高的中断频率,浪费cpu资源,请问有没有其他什么处理办法?需要在高优先级中断里面加额外的现场保护?
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25450
最后登录
2025-9-4
发表于 2019-5-29 14:11:40 | 显示全部楼层
能不能试试RTOS抢占的思想,哪个中断中断服务开始调用CMSIS库之前先提高自己的中断优先级保证自己不被后来的中断嵌套了,在运算完后,回复原来的中断优先级并退出中断服务程序。
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

43

帖子

0

中级会员

Rank: 3Rank: 3

积分
418
最后登录
2024-3-22
 楼主| 发表于 2019-5-29 14:31:12 | 显示全部楼层
小恩GG 发表于 2019-5-29 14:11
能不能试试RTOS抢占的思想,哪个中断中断服务开始调用CMSIS库之前先提高自己的中断优先级保证自己不被后来 ...

谢谢版主,这个方法也可以咯,相当于回避了中断嵌套,暂时先用这个方法来解决问题。只是不太明白为什么会有这个问题,也了解过,stm32的M7也有类似的问题,中断嵌套使用FPU就会有出错概率。
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25450
最后登录
2025-9-4
发表于 2019-5-30 10:00:12 | 显示全部楼层
czp111 发表于 2019-5-29 14:31
谢谢版主,这个方法也可以咯,相当于回避了中断嵌套,暂时先用这个方法来解决问题。只是不太明白为什么会 ...

那可能跟CMSIS库有关,你可以在ARM公司论坛咨询一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-6 23:01 , Processed in 0.103587 second(s), 28 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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