Thread 中讨论的其他器件: SysBIOS、 SysConfig
工具/软件:TI-RTOS
大家好、我的 SYS/BIOS 应用程序有一个间歇性(但可重复)问题。 我希望有人能帮助我确定如何以最佳方式跟踪这一异常问题。
我在 AM5716处理器的 C66x 内核上运行 SYS/BIOS。 我在系统中有一个中断;它在 GPIO 引脚的上升沿触发。 我发现系统有时无响应、当我使用 XDS200 JTAG 仿真器中断时、我总是会发现以下错误签名:
- PC 位于 exit.c 中的 abort()处,这意味着 SYS/BIOS 已关闭。
- ROV 中的异常模块表明发生了内部异常。
- 解码后的异常为:内部:取指令异常;操作码异常;
- 异常的地址(ERP 寄存器)是 ti_sysbios_family_c64p_Hwi_int15的地址;这是我正在使用的中断的向量。
- 异常 TSR 快照寄存器(ETSR)的值为0x10204、表示发生异常时正在处理中断。
- 堆栈指针处于有效范围内、ROV 不显示堆栈或堆溢出。
- 中断返回指针(IRP)设置为我的固件中特定 trampoline 函数的地址(让我们将其称为$Tramp$S$MyFunctionName)。 trampoline 的目标是函数 MyFunctionName、该函数位于外部存储器(DDR)中。
我最想知道的是异常发生时中断返回指针的一致性。 根据异常返回指针、在到达 ti_sysbios_family_c64p_hwi_int15时发生异常、而不是从该异常返回(即、在中断处理的开始而不是结束时)。 我已经验证 了 ti_SysBIOS_family_c64p_Hwi_int15处的操作码没有任何问题、但解码后的内部异常值是 取指令异常 和 操作码异常。
因此、似乎只有在 PC 位于地址 $Tramp$S$MyFunctionName (trampoline 的起始位置、即使在分支之后也不是如此)的精确时刻发生中断时、才会发生异常。。。。 但这对我来说毫无意义! 提前感谢您对调试此问题的其他操作有任何猜测或想法。
此致、
Dave