TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28377D: 程序离线调试出错

Part Number:TMS320F28377DOther Parts Discussed in Thread:SYSBIOS

使用4个LED监测运行状态(3个LED用于监测CPU1 SYSBIOS的多个Task和Hwi,1个LED监测CPU2定时中断),现象为:

(1)程序在线调试(Release或Ram)时,可以连续运行几分钟,4个LED均正常闪烁,没有问题。

(2)程序离线运行(在Flash中)时,运行几分钟后,监测CPU1 Task的LED由闪烁变为常亮/常灭,Hwi正常闪烁(Hwi由CPU2中的IPC触发);监测CPU2定时中断的LED正常闪烁。

我怀疑CPU1 Task被阻塞,故在Task中设标志位,每进一次Task完成一次递增,通过modbus发现,离线运行时,Task中标志位先增加,后不变,推测Task确实被阻塞,但原因未知。

调用ROV在线调试发现内存溢出(时间较长,一直运行到程序跑飞),如下图:

现在考虑增加Task堆栈进行测试(但总不能无限制的增加?),而且不明白问题出现的原因,请指教!

以及,Task 0x8ad64 stack overflow,是指task_CAN 0x8ab22吗?

(我已注册英文论坛账号,但是无法通过验证,所以无法在英文论坛发帖,如果可以,能否帮忙转发至英文论坛?谢谢!)

Yale Li:

您好,可以的。

如果方便的话,您可以将您的问题直接用英语表达出来吗?翻译的过程难免会有理解上的偏差,这样可以减少中间产生的误解。

,

Kocham HXJ:

你好,我正在尝试修改程序进行测试,如果不能解决,我再汇总问题并翻译!

,

Yale Li:

好的,有问题可以随时与我们联系

,

Kocham HXJ:

你好,经过排查,我发现程序离线运行崩溃的原因是IPC寄存器没有按照预设情况进行置位,从而进入while(1),两个CPU中的IPC函数如下图:

以下是我的理解:

(1)CPU1执行IPCSET.10以后,CPU1检测到IPCFLG.10=1(添加while(1)语句以确保完成置位,这也是离线运行出现问题的地方),CPU2检测到IPCSTS.10=1;

(2)CPU2以IPCSTS.10为判断条件执行数据读取语句,完成数据传输之后,CPU2执行IPCACK.10清除标志位,此时CPU2检测到IPCSTS.10=0;但是我不确定CPU1中IPCFLG是否被清零,这也是一个问题,请指教!

此外,我还尝试将IPC2配置为由CPU2触发,在CPU1中产生中断(使用SYSBIOS Hwi,中断号134),这一部分我还没有进行测试,不过我认为会出现相同的问题。

以及最重要的问题是,为什么IPC没有完成置位从而进入while(1)?我该如何保证两个CPU能够顺利完成置位,以及我该如何进行检测?

,

Kocham HXJ:

当我屏蔽掉  while(IpcRegs.IPCFLG.bit.IPC10 == 0){while_flag2 = 4;},程序可以离线运行,但是CPU2中也有类似语句,为何CPU2不会进入死循环?是否与SYSBIOS有关?

,

Yale Li:

已经帮您转到E2E了,请留意:

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1114387/tms320f28377d-the-ipc-register-is-not-set-according-to-the-preset-condition-causing-the-program-not-to-enter-while-1

您如果需要回复,直接回复在下边就行,我帮您跟进。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28377D: 程序离线调试出错
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1