Other Parts Discussed in Thread: SYSBIOS
We encountered a problem where one of DSP cores running RLDSP functionality goes into �weeds�. Our app still does not have exception hooks installed, but by hooking CCS after the failure we found out that there was �instruction fetch exception� that occurred.
Analysis:
- The failure is very sensitive to changes in stack utilization. This is default/global stack, so it is shared with BIOS.
- We verified that there were no corruptions in .text segment
- It does not appear to be size of stack issue. Failure happens very early during startup, DSP app did not go fully �operational� yet. Stack usage is minimal.
- The failure is happening while in ISR context (in this case IPC). IPC HWI is configured by BIOS to allow nesting. For all HWIs that we attach, we do not allow nesting. There were other interrupts, possibly overlapping with IPC ISR. We recompiled IPC code to disallow interrupt nesting, but failure still occurred.
- Declaring a function local variable as volatile (this is in ISR callback we register with IPC) makes failure go away.
- Calling different HWI_ APIs during application startup is enough for failure not to show up.
- Through the flag in config file, we recompile BIOS to remove asserts/diags to reduce the size which increased by bringing in IPC module (this is based on direction from TI). This was necessary early on to fit in available memory. Tried using default BIOS lib provided with tools, we were able to fit in memory, and with this failure does not show up.
- Is BIOS without asserts/diags fully qualified by TI, to the same level as �stock� BIOS which is installed with tools?