今天进行C6727调试时发现是堆溢出了,是在每秒周期进行矩阵求逆的时候,感觉上次malloc申请的堆的空间没有释放成功,重新申请新的堆空间,堆的空间占用越来越大,直到溢出了
问题是相同的程序在同一批电装的另外一块板子上运行的时候,没有问题,释放成功,堆空间占用一直较小,出现故障的板子上软件稍作修改,加几句无关的代码重新编译故障也消失了,求逆函数是封装的库函数,使用源代码运行,故障也消失了。请教这是什么原因。
heap 大小0x1000 封库时使用了-o3编译选项,函数代码如下
int brinv(double a[], int n)
{ int *is,*js,i,j,k,l,u,v;
double d,p;
is=malloc(n*sizeof(int));// n的大小为6
js=malloc(n*sizeof(int));// n的大小为6
/***********
求逆运算代码
*************/
free(is); free(js);
return(1);
}
Shine:
请问是做了几块板子有这个问题?请量一下oscin, reset和power supply是否都正确以确保DSP能稳定的工作。
程序是在片内还是在片外运行的?
li shui:
回复 Shine:
谢谢回复,一共做了5块板子,只有一块板子有这种故障,软件都是在片内RAM运行的,请问您说的这几个信号主要检测什么内容,异常情况的特点是什么,我是做软件的不太懂,谢谢了
li shui:
回复 Shine:
谢谢解答,回头测测这几个信号,我想问问如果这些信号不满足手册要求,会导致软件运行时空间释放异常,导致堆溢出吗,谢谢了
Shine:
回复 li shui:
因为你是五块板子有1块出现问题,更倾向于硬件的不稳定引起代码问题。
li shui:
回复 Shine:
谢谢,但是也没法理解在出问题的板子上,为什么软件稍加修改重新编译后又不出故障了