在源代码基础上,增加SOC优化函数,之前采用的安时积分进行SOC数值的计算,基于两个方面提出SOC优化函数。
1.安时积分:采用的实在大电流情况下,电流采集不准确,具有一定的误差的情况下,SOC能够进行一定的校准。
2.SOC需要手动校准问题,在出厂的时候,会对soc进行手动校准一次,用户在使用产品之后,就无法在对SOC进行校准
基于以上两方面的原因,提出SOC优化函数。在之前的计算SOC函数中,调用优化函数。
但是,优化函数一旦调用,控制板就会出现死机,通讯异常等问题。接下来就针对这个函数进行调试。在IAR调试过程中,发现跑到某个位置,数组变量不能赋值,只要给数组变量赋值,程序就跑飞,数组P_x[9]和P_x_half[9]不能赋值。
分析原因:在SOC优化函数中,定义了大量float型的数组,同时这些数组又进行了大量的递归调用,就造成了栈溢出的问题。
解决方法:只需要把函数中用到的变量转变成全局变量,这样就是造成栈溢出。由于函数局部变量存在在栈区,造成数据溢出。