This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请教C6727中断问题

  设计电装了两块C6727板子,软件有两个外部中断,1ms中断和串口中断,调试过程中发现程序在一块板子运行一段时间后无法正常进入中断子程序,但是相同的程序在另外一块板子上并无此情况,中断运行正常。

   出现故障后发现DSP寄存器例如CFGMCASP2值发生更改。将程序稍加修改增加几句无关紧要的代码,重新编译后,故障消失。程序中某些算法封装为库文件,如果将库文件改为源代码编译后,故障消失。算法中在某些情况下会出现除以0的情况,数据会变为极值,这是否会导致DSP寄存器被修改吗。算法程序和数据分配的空间并没有对寄存器的操作。

   请问这种不进中断的情况,是硬件还是软件故障,从哪些方便着手排查。谢谢了!!!

  • 可能是stack不够溢出了,加大些试试。还有你也可查看stack栈顶是否被改写过,如果被改写过,说明栈曾经用满了,也就是不够。

  • 谢谢回复,可能不是栈溢出,今天把栈改大了还是会出现,关键是同一个程序换了一块板子就没有这个故障,如果是栈溢出应该都会溢出了。

    今天还发现出现本来中断不能响应的情况下,其它程序还能正常执行,但是如果此时重新进行中断等初始化配置,软件就跑死了。

    请教还可能是什么原因,谢谢了

  • 今天调试发现是堆溢出了,是在每秒周期进行矩阵求逆的时候,感觉上次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);
    }
  • 代码应该加上判断调用malloc是否返回是否成功/有效。 

  • 代码应该加上判断调用malloc是否返回是否成功/有效。