我们使用TI DSP芯片6670,程序固化后某些核程序跑飞,连接ROV打印如下信息,请帮忙排解下问题,多谢!
,ICT BBU BSP Debug Info: Waiting for global config…
,ICT BBU BSP Debug Info: Initializing Free Descriptors.
,ICT BBU BSP Debug Info: QMSS Local successfully initialized
,ICT BBU BSP Debug Info: Tx setup successfully done
,ICT BBU BSP Debug Info: Rx setup successfully done
,ICT BBU BSP Debug Info: PASS setup successfully done
,ICT BBU BSP Debug Info: Core3 Waiting for SRIO to be initialized.
,ICT BBU BSP Debug Info: Core3 SRIO can now be used.
,*********************************************
,*********ICT Debug Info: BIOS Start**********
,*********************************************
,*********************************************
,*******ICT Debug Info: GPIO Task Start*******
,*********************************************
,*********************************************
,*******ICT Debug Info: HOP Task Start*******
,*********************************************
,A0=0x2 A1=0x8
,A2=0x1 A3=0x138e1168
,A4=0x0 A5=0xf8
,A6=0x8026 A7=0x0
,A8=0x83372020 A9=0x138e15dc
,A10=0x0 A11=0x0
,A12=0x0 A13=0x2
,A14=0x0 A15=0x2
,A16=0x13860fd0 A17=0x0
,A18=0x13860cb0 A19=0x320
,A20=0x0 A21=0x0
,A22=0x1386fe48 A23=0x1386fe58
,A24=0x138702a8 A25=0x1386fe68
,A26=0x1386fe70 A27=0x1386fe78
,A28=0x138702c8 A29=0x1386fe80
,A30=0x30 A31=0x833bb138
,B0=0x0 B1=0x118dcb70
,B2=0x0 B3=0x0
,B4=0x138e1708 B5=0x138e1700
,B6=0x83371aa2 B7=0x0
,B8=0x0 B9=0x0
,B10=0x0 B11=0x26cd97
,B12=0x0 B13=0x26cd97
,B14=0x138e7600 B15=0x58
,B16=0x2c B17=0x1386fe60
,B18=0x138702b0 B19=0x138702b8
,B20=0x138702c0 B21=0x24
,B22=0xf B23=0x0
,B24=0x13870298 B25=0x1386fe50
,B26=0x138702a0 B27=0x0
,B28=0x13870278 B29=0x1386fe30
,B30=0x13870280 B31=0x138626e4
,NTSR=0x1020e
,ITSR=0xf
,IRP=0x83371aa2
,SSR=0x0
,AMR=0x0
,RILC=0x0
,ILC=0x0
,Exception at 0x0
,EFR=0x2 NRP=0x0
,Internal exception: IERR=0x1
,Instruction fetch exception
,ti.sysbios.family.c64p.Exception: line 248: E_exceptionMin: pc = 0x00000000, sp = 0x00000058.
,To see more exception detail, use ROV or set 'ti.sysbios.family.c64p.Exception.enablePrint = true;'
,xdc.runtime.Error.raise: terminating execution
barryliu:
有个新的情况,我们使用6670芯片,4核同时映射了外部GPIO中断,
cfg配置如下
var hwi0Params = new Hwi.Params(); hwi0Params.instance.name = "hwi4"; hwi0Params.eventId = 86; Program.global.hwi4 = Hwi.create(4, "&gpio_framenum", hwi0Params); var hwi1Params = new Hwi.Params(); hwi1Params.instance.name = "hwi6"; hwi1Params.eventId = 87; Program.global.hwi6 = Hwi.create(6, "&gpio_slotnum", hwi1Params);
中断处理函数如下,进入中断后将BINTEN清零,即关中断,出中断前将BINTEN置位,即开中断。这样处理是否合理?
void gpio_framenum(void) { gpio_regs->BINTEN = 0; //
gpio_regs->BANK_REGISTERS[0].CLR_RIS_TRIG |= (1<<12); //取消帧中断 if((GPIO_Frame_FLAG == 0) && (GPIO_Slot_FLAG == 0))
// the right state { GPIO_Frame_FLAG = 1;
GPIO_Slot_FLAG = 0; Semaphore_post(GPIO_Task_sem); } else { System_printf ("wrong frame state before GPIO interrupt\n"); } //
gpio_regs->BANK_REGISTERS[0].SET_RIS_TRIG |= (1<<12);//SOF //
gpio_regs->BANK_REGISTERS[0].SET_RIS_TRIG |= (1<<13);//SOF gpio_regs->BINTEN = 1; }
程序固化运行后有跑飞现象,从ROV中打印信息如下:其中pc = 0x80481274指向地址为函数ti_sysbios_family_c64p_Hwi_dispatchAlways: 请帮忙排查下问题
A0=0x108676c8 A1=0xe
,A2=0x1 A3=0xffff9bc0
,A4=0x2 A5=0x108dda4c
,A6=0x8026 A7=0x0
,A8=0x80466778 A9=0x108dc8fc
,A10=0x0 A11=0x804b02b4
,A12=0x0 A13=0x0
,A14=0x0 A15=0x0
,A16=0x10860fc8 A17=0x0
,A18=0x10860ca8 A19=0x320
,A20=0x10874638 A21=0x10874a88
,A22=0x10874648 A23=0x10874658
,A24=0x10874aa8 A25=0x10874668
,A26=0x10874670 A27=0x10874678
,A28=0x10874ac8 A29=0x10874680
,A30=0x0 A31=0x804b04ec
,B0=0x10867748 B1=0x804661e2
,B2=0x0 B3=0x8048cf50
,B4=0x15000101 B5=0x15000100
,B6=0x108dda4c B7=0x0
,B8=0x0 B9=0x0
,B10=0x108677d0 B11=0x804b02b0
,B12=0x0 B13=0x0
,B14=0x108e2a00 B15=0x108676c8
,B16=0x2c B17=0x10874660
,B18=0x10874ab0 B19=0x10874ab8
,B20=0x10874ac0 B21=0x24
,B22=0x10874640 B23=0x10874a90
,B24=0x10874a98 B25=0x10874650
,B26=0x10874aa0 B27=0x0
,B28=0x10874a78 B29=0x10874630
,B30=0x28 B31=0x10860bf4
,NTSR=0x10204
,ITSR=0xf
,IRP=0x804661e2
,SSR=0x0
,AMR=0x0
,RILC=0x0
,ILC=0x0
,Exception at 0x80481274
,EFR=0x2 NRP=0x80481274
,Internal exception: IERR=0x10
,Resource conflict exception
,ti.sysbios.family.c64p.Exception: line 248: E_exceptionMin: pc = 0x80481274, sp = 0x108676c8.
,To see more exception detail, use ROV or set 'ti.sysbios.family.c64p.Exception.enablePrint = true;'
,xdc.runtime.Error.raise: terminating execution
Thomas Yang1:
回复 barryliu:
IRP=0x83371aa2 这段地址是做什么?
DDR3有没有初始化好?
barryliu:
回复 Thomas Yang1:
是taskIdletest,空闲任务
Thomas Yang1:
回复 barryliu:
从寄存器信息来看,是从这个空闲任务产生的异常中断,
建议加下打桩函数,看看函数运行轨迹是什么,主要抓取异常前的 运行状态
barryliu:
回复 Thomas Yang1:
您好:
打桩函数如何添加,是否有这方面资料参考下。
通过使用多核C66X芯片,CCS操作系统有如下问题:
1.编译器CCS5.3.0,编译环境极其不稳定,常常卡死,编译进程无法继续,情况时好时坏;
2.使用ROV观测现有情况,PC指向地址为函数ti_sysbios_family_c64p_Hwi_dispatchAlways:
使用排除法代码段中有一段DDR3上的搬移函数,将此函数屏蔽后问题得以改善,但仍查不出具体原因。
memcpy(Dest[DNUM], Source[DNUM], 30000);//DDR3
事实上,代码内容和中断处理是2个方面,但是不论出现任何问题,ROV指向都是HWI中断函数或者空闲任务。ROV这种观测手段是否正确有效?能否有更为直观的方式方法检测问题?
3.编译器调试过程中错误频发,DEGUB模式下,核号为3,依然进入到了核0的判断语句内。类似这种问题,如何解决
Allen35065:
回复 barryliu:
1. 打桩就是指在运行流程里加入一些log,比如往一个全局变量里写入数值来判断程序走到哪一步了;
2. CCS是IDE界面,编译器要看你建的工程使用的什么版本,建议到
http://software-dl.ti.com/codegen/non-esd/downloads/download.htm 更新7.4系列最新的编译器使用。CCS 5.3是比较稳定的版本,但因为使用Eclipse内核,占用内存较多,建议PC使用3G 以上的的内存,有条件最好用8G;
3. 可以考虑把数据搬移改为采用EDMA方式,拷贝数据较多用memcpy可能会被其它中断打断;
4. 没有遇到过类似情况,如果采用的O3优化,可能代码会乱序。
barryliu:
回复 Allen35065:
Hi Allen,
2. CCS版本升级,是否会对现有工程有影响。现在编码阶段,需要考虑时间成本。既然5.3是稳定版本,为何会错误频发,这种错误如何解决?是否有相关排查文档?现在调试电脑内存8G,处理器I7,都是最好配置了,不存在电脑问题。
3. 可以考虑把数据搬 移改为采用EDMA方式,拷贝数据较多用memcpy可能会被其它中断打断;(这个情况确实是其中可能性,那请问是否有更为直接的方式去排查,而不是仅靠猜测???ROV指向都是HWI中断函数或者空闲任务。ROV这种观测手段是否正确有效?能否有更为直观的方式方法检测问题?
4. 编译器紊乱的情况如何解决?出现这种情况当时调试把优化程度关闭依然存在BUG。