vip2128 发表于 2024-10-9 13:59:14

请教stc浮点运算应注意什么避免死机

用stc8g1k08a17a ,程序需要不断计算浮点, 不过运行几分钟后就死机

请教浮点运算应注意什么避免死机, 死机是什么原因引起,如果加载mdu16会不会更好点



DebugLab 发表于 2024-10-9 14:56:42

我使用软件浮点没遇到过死机的情况,可以仿真看看

王昱顺 发表于 2024-10-9 15:28:24

检查确保没有除0错误
除0可能导致单片机重启或者卡死

Lkck8210 发表于 2024-10-9 15:47:17

curr有机会是零
82行就会出现除零

vip2128 发表于 2024-10-9 21:35:31

本帖最后由 vip2128 于 2024-10-9 21:37 编辑

Lkck8210 发表于 2024-10-9 15:47
curr有机会是零
82行就会出现除零
搜了很多资料, 这里是浮点运算,即使被除数是0,得出值是NaN,倒没影响程序的运行,打印结果是NaN,加了判断curr==0,跳过运算,直接赋值后面结果为0去打印输出也是一样,1-2分钟后要死机,

最后就把定时器0产生方波的优先级大于定时器1串口,运行几个小时都没问题了,
本来是想串口优先,rx发送命令,tx接收数据不被中断,没想到出问题在这里。。
最先是怀疑stc的浮点运算不给力引起的,还想着引入mdu16去试试
定时器0是翻转脚位去产生方波,比pca语句简单,
主要是开机还能正常运行1-2分钟,后就死机,定时器0和串口在争夺什么出冲突了

乘风飞扬 发表于 2024-10-10 09:36:09

vip2128 发表于 2024-10-9 21:35
搜了很多资料, 这里是浮点运算,即使被除数是0,得出值是NaN,倒没影响程序的运行,打印结果是NaN,加了 ...

stc8g1k08a/17a芯片没有硬件浮点运算单元,也没有MDU硬件乘除法器。
浮点运算是使用keil编译器的软件数学库程序进行计算的,单片机只是按照编译器产生的机器码一条条指令执行而已。
运行一段时间后死机的话,还是好好查一下你的程序流程,避免循环判断的条件在其他中断里面被修改,导致判断条件无法满足而产生死循环,或者程序产生相互锁死的情况。
例如A程序需要B程序里面的参数设置后才能继续执行,B程序又要等A程序执行完成才能执行,这样程序就会相互锁死。

金南京 发表于 2024-10-10 11:20:44

{:4_174:}

soma 发表于 2024-10-10 12:43:20

浮点运算还会造成死机还真不知道。看来要好好学习了

123 发表于 2024-10-10 19:27:03

数组越界/堆栈问题/错误的指针操作都会导致死机。
频率太高或受到干扰导致芯片内部晶体管异常导通也会死机。

胡嘉鑫 发表于 2024-11-11 23:12:02

还是计算机组成原理的问题吗?
页: [1] 2
查看完整版本: 请教stc浮点运算应注意什么避免死机