TMS320TCI6618每个corePac(4个core)均有一个ETB(embedded
trace buffer)模块,它包含dsp crash后最后时刻的程序执行记录,因此这些信息对调查dsp crash信息非常有用。
每个core的ETB size是4kb,TMS320TCI6618有四个core,因此共有16kb的空间可记录执行的程序。
Corrected the size of TETBs for the 4 cores from 16k to 4k,TI data manual显示的ETB的片上内存地址,以及size。
Logical 32 bit Address Physical 36 bit Address
Start End Start End Bytes Description
027D 0000 027D 3FFF 0 027D 0000 0 027D 3FFF 16K TI embedded trace buffer (TETB) - CorePac0
027D 4000 027D FFFF 0 027D 4000 0 027D FFFF 48K Reserved
027E 0000 027E 3FFF 0 027E 0000 0 027E 3FFF 16K TI embedded trace buffer (TETB) - CorePac1
027E 4000 027E FFFF 0 027E 4000 0 027E FFFF 48K Reserved
027F 0000 027F 3FFF 0 027F 0000 0 027F 3FFF 16K TI embedded trace buffer (TETB) - CorePac2
027F 4000 027F FFFF 0 027F 4000 0 027F FFFF 48K Reserved
0280 0000 0280 3FFF 0 0280 0000 0 0280 3FFF 16 TI embedded trace buffer (TETB) - CorePac3
我们自己可以定义一个DDR上的全局变量,如 u32 gEtbDrainDataBuffer[(4 * 4096/ 4)];
来保存上述各个cpu的ETB数据。如在发生内存保护,访问非法内存,或者程序中调用error2、callFatalerror函数时,在进入errorDriver中执行的时候,把片上ETB中的数据保存到DDR上面。从下面解析的内容看,最后的指令就是在ErrorDriver中执行的。
发生了vector1中断,我们因此怀疑问题可能出现在SetPrachFftcTxDescriptorInfo函数,这样就能方便定位问题。
下面是根据导出的ETB数据,以及程序out file解析出的部分程序,当运行某个函数中的指令的时候,它会保存函数编译后的名字。
1182a730:_ZN20ChannelizerInterface21CChannelizerInterface18SrsSymEdmaCallBackEv (offset = 00000250)
824f42c0:_ZN24ChannelizerBufferManager28CChannelizerMemBufferManager17GetChanIntFaceDbgEv (offset = 00000000)
11829db8:_ZN20ChannelizerInterface21CChannelizerInterface28SetPrachFftcTxDescriptorInfoEj (offset = 00000018)
1182a540:_ZN20ChannelizerInterface21CChannelizerInterface18SrsSymEdmaCallBackEv (offset = 00000060)
82472e00:QmQueuePop (offset = 00000000)
11829dec:_ZN20ChannelizerInterface21CChannelizerInterface28SetPrachFftcTxDescriptorInfoEj (offset = 0000004c)
11800020:_vector1 (offset = 00000000)
11800200:platform_interrupt_vector_extension_code (offset = 00000000)
118002f8:jumpToExceptionHandling (offset = 00000000)
82436860:platform_ErrorDriver_code (offset = 00000000)
82434540:ExceptionHandlerEsr (offset = 00000000)
8243b4f0:ExceptionHandlerEnableSingleEventException (offset = 000001d0)
118228a0:__c6xabi_push_rts (offset = 00000000)
82434544:ExceptionHandlerEsr (offset = 00000004)
8243b4c0:ExceptionHandlerEnableSingleEventException (offset = 000001a0)
11805a20:AaSysTimeBcnGet (offset = 00000000)
11815340:AifTimer_PhyTimeGet (offset = 00000000)
11805a60:AaSysTimeBcnGet (offset = 00000040)
824345d0:ExceptionHandlerEsr (offset = 00000090)
8243afe0:ErrorDriverStopTrace (offset = 00000000)
824e4aa0:AET_release (offset = 00000000)
8243b024:ErrorDriverStopTrace (offset = 00000044)
824edd20:AET_claim (offset = 00000000)
8243b028:ErrorDriverStopTrace (offset = 00000048)
824ea960:DSPTrace_setState (offset = 00000000)