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.

C6455多路音频编解码+NDK网络传输的死机问题



各位专家:

        我正在使用两块C6455DSK板,做两路音频编解码+网络传输的一个应用项目,编解码采用了G.729标准,开发环境为CCS3.3,使用了DSP/BIOS。在程序开发过程中,碰到了以下难题,苦苦不得其解,特向专家请教:

        代码中,对McBSP1进行了配置,从AIC23读取AD进来的语音数据,然后通过DMA乒乓方式,每10ms中断一次CPU,然后进行编码,编码后数据通过网口UDP方式发送。接收端收到压缩数据时,通过解码器进行解码,然后再通过DMA送到McBSP,通过AIC23放音。现在每次启动之后,可以正常运行20-40分钟不等,之后就不再正常工作,不再正常播放声音,DMA中断不再能够正常进入中断函数,这个时候,将程序暂停进行了如下的诊断。

            1.检查了6455的核寄存器,状态如下:CSR=10000103;IER=00004123(DMA采用了INT8,网口采用了INT5,这里看,中断没有被关闭),IERR=00000009;是不是说明发生了内部异常,查看用户指南,发现这里说明是取指令异常和opcode异常。EFR=00000002,也说明产生了内部异常。TSR=0000840D,是否说明此时,DSP可以处理各种异常?

           2.继续运行,停下来,再运行。。。。。。。。。。。。。。发现IFR有时候为0000C008,还有时候为00008008,而正常运行时,显示均为00008008。运行时,TSR有时候为0000040C,有时候为0000040D,暂停的时候为0000840D或者0000040D。

          3.暂停程序的时候,程序分别停在了一些sts.o64P (.bios)、lnkrtdx.a64P : rtdx.o64P (.bios)、 idl_busy.o64P (.bios)等地方,由于对BIOS是不是特别了解,不知道程序为什么会在这些bios的系统函数里面跑。

         4,暂停时,观察了DSP/bios菜单下面的message log窗口:显示如下:4231746   CLK: current time = 682540 (0x000a6a2c)
                                4231747   PRD: tick count = 682540 (0x000a6a2c)
                                4231748   SWI: post  KNL_swi (TSK scheduler) (0x827cd8)
                                4231749   SWI: begin KNL_swi (TSK scheduler) (0x827cd8)
                                 4231750   TSK: ready Encoder_decoder (0x00827bcc)
                               4231751   TSK: running Encoder_decoder (0x00827bcc)
                                4231752   SWI: end   KNL_swi (TSK scheduler) (0x827cd8) state = done
                                4231753   SWI: begin KNL_swi (TSK scheduler) (0x827cd8)
                                4231754   TSK: blocked Encoder_decoder (0x00827bcc) on <unknown handle> SEM
                                 4231755   TSK: running dynamic TSK (0x00827b6c)
                                4231756   SWI: end   KNL_swi (TSK scheduler) (0x827cd8) state = done
                                  4231757   CLK: current time = 682541 (0x000a6a2d)
                                 4231758   PRD: tick count = 682541 (0x000a6a2d)
                                 4231759   SWI: post  KNL_swi (TSK scheduler) (0x827cd8)
                                 4231760   SWI: begin KNL_swi (TSK scheduler) (0x827cd8)
                                  4231761   SWI: end   KNL_swi (TSK scheduler) (0x827cd8) state = done

          每次暂停,发现最后两句话,都是4231760   SWI: begin KNL_swi (TSK scheduler) (0x827cd8)
                                  4231761   SWI: end   KNL_swi (TSK scheduler) (0x827cd8) state = done

         碰到这些问题,严重影响了进度,还请各位专家,帮我仔细分析分析,不胜感激。我目前有几点自己的理解和疑惑:

        1.看来是碰到了一些异常情况的发生,我应该怎么处理这些异常呢,目前我做了这样的尝试:就是把DSP/BIOS可视化界面里面的,system->SYS->system settings里面的Abort function、error function 和exit function响应函数全部改成了自己的一段程序,在这段程序里,做了一些寄存器的初始化工作,然后跳到Cint00继续运行,仍然没有改善目前碰到的情况,不知DSP/BIOS究竟怎么处理异常情况的发生??????????????

        2.目前有一个思路,就是碰到异常发生时,损失一点系统的性能,全部进行硬重启,就是通过电源监控芯片进行DSP硬复位,但是现在不知道,究竟在那些地方有异常处理函数,以便改写这些函数。

                                                                                                                                                                                                  一个认真学习DSP开发的初学者,恳请解答,感谢!!