TI中文支持网
TI专业的中文技术问题咨询交流网站

写在主函数while里的算法包含了大量的for循环及嵌套,导致运算结果溢出该怎么办?

我在主函数的while里编写了一种算法,该算法涉及到大量的矩阵运算,因为没找到类似于MATLAB的矩阵运算库,我用大量的for循环等C语言完成了代码的编写,在运算过程中,涉及到数组之间的嵌套及调用,中间大量数组结果总是溢出!如果将while关闭,该算法只执行一次,结果基本是正确的,当while打开或者该算法执行100次及以上,观察到运行中的数组结果都是溢出的,给我的感觉是内存中的数据没有及时的刷新清空,而是不断的叠加最终导致溢出。

请教大佬们该如何解决!

Green Deng:

似乎没有非常可行的办法。我想到的是可以试一下代码优化,但似乎也是治标不治本。
最近了解到可以用matlab建个仿真,然后自动生成代码,但是我没有用过matlab,无法确定这个方法是否可行,以及无法给出具体操作方法,你可以去matlab的技术支持论坛咨询一下这点。
另外,你之前帖子说的C6000的芯片确实有矩阵运算方面的库,但两款芯片差别较大,不是一个芯片类型的。如果你想用C6000的产品的话可以去以下论坛咨询:e2echina.ti.com/…/53

user6407181:

回复 Green Deng:

我刚在其他论坛了解到一种方法,跟您交流一下,想听听您的意见。
有人建议我开辟一个动态存储空间,因为之前构造的数组都是静态的,无法自动清除内存,所以会导致内存中数据的溢出。
对这个建议您怎么看?

Green Deng:

回复 user6407181:

这个只能说试试吧,我也没有具体操作过。嵌入式实时固件一般不用动态内存分配,全部用静态内存分配。
然后需要注意一下,动态内存是分配在heap中的,如果heap分配的空间太小,分配过程中也会产生溢出。

user6407181:

回复 Green Deng:

当我代码中出现大量的数组嵌套以及运算时,这些代码可以写在主函数的while 里吗?对这些大量运算的代码需要放在什么地方合适呢?因为运算中需要用到AD采集的部分数据,所以这段代码可以不和ADC同步运行,只要重点是能实时运行。您跟我提到的“动态内存分配在heap”,这个方面的不是很了解,您可以分享一些链接知识吗?万分感谢

Green Deng:

回复 user6407181:

如果是普通运算的话倒是可以用一些运算库来执行,但是矩阵运算的话C2000确实没有这种库。建议你可以去英文E2E咨询一下国外工程师,看有没有什么好的建议:e2e.ti.com/…/171
heap主要是malloc函数分配内存堆栈大小用的,如果heap分配的空间太小,分配过程中会产生溢出。
可以在Project -> Properties -> Build ->C2000 Linker -> Basic Options -> Heap size for …中修改大小。

user6407181:

回复 Green Deng:

感谢您持续关注我的问题,我想大概是我算法自身的问题,我搭建大量的一维以及多维的数组,通过数组的嵌套及运算完成类似于矩阵的运算。但是其中有些数组在用完之后没有及时的清空内存,导致其内部数据多次叠加使用,最终导致溢出,我已基本确定是这个问题,现在在想办法解决!再次感谢!

Green Deng:

回复 user6407181:

好的,我推荐你也可以去英文E2E上咨询一下相关问题。英文论坛有更多的专家工程师能够帮你解答问题。

赞(0)
未经允许不得转载:TI中文支持网 » 写在主函数while里的算法包含了大量的for循环及嵌套,导致运算结果溢出该怎么办?
分享到: 更多 (0)