2360985396 发表于 2023-7-11 11:46:22

关于单片机在中断到底能不能使用浮点运算(请教硬汉哥)

百度说不能在中断中使用浮点运算,运算的结果可能是错误的,耗时的浮点操作导致中断函数计算不过来。
但是本人在G4系列中的单片机发现计算中断PID浮点结果是正确的,难道说是因为这款单片机支持FPU?,如果不支持的呢?请教一下硬汉哥

eric2013 发表于 2023-7-11 16:24:25

中断里面做浮点运行没问题,我都经常用,

有时候中断里面要做64bit运行,但是32bit芯片做64bit运算非常慢,都改成用支持硬件浮点的double计算。

另外像不支持硬件浮点的M3,M0系列也是没问题的。

2360985396 发表于 2023-7-11 17:26:02

eric2013 发表于 2023-7-11 16:24
中断里面做浮点运行没问题,我都经常用,

有时候中断里面要做64bit运行,但是32bit芯片做64bit运算非常 ...

还要一个问题请教硬汉哥,是不是支持FPU的仅仅是浮点运算有专门的硬件,而且不支持FPU的只是cpu硬算效率没有FPU的高而已呢

eric2013 发表于 2023-7-12 08:28:55

2360985396 发表于 2023-7-11 17:26
还要一个问题请教硬汉哥,是不是支持FPU的仅仅是浮点运算有专门的硬件,而且不支持FPU的只是cpu硬算效率 ...

是的,没有硬件FPU的,会软件方式计算浮点,时间比较长。

emwin 发表于 2023-7-14 13:53:24

无论软件/硬件浮点都能在中断中使用。如果是软件算的,设计时考虑浮点运算速度的影响就行。

caicaptain2 发表于 2023-7-14 15:05:46

本帖最后由 caicaptain2 于 2023-7-14 15:11 编辑

代码中关于浮点的计算数值,一定要在浮点数后面加个f。 比如10.1f,这是单精度浮点;而不要直接用10.1,这是双精度浮点。 因为双精度浮点计算耗时很长,差10倍左右。

比如:
float r=3.0; //半径
float s;//面积
s=r*r*3.14;//这一句耗时较长。10倍的耗时。
可以用这个 s=r*r*3.14f。 这个就很快。和整数计算几乎一样的快。
页: [1]
查看完整版本: 关于单片机在中断到底能不能使用浮点运算(请教硬汉哥)