This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TDA2EXEVM: TDA2 DSP2 XDC ASSERT

Part Number: TDA2EXEVM

We run our algorithm on DSP2.

Sometimes DSP2 will have XDC Assert message and then DSP2 will crash.

How can we solve it?

Log:

[DSP2 ] 11173.232111 s: ### XDC ASSERT - ERROR CALLBACK START ###
[DSP2 ] 11173.232141 s:
[DSP2 ] 11173.232202 s: assertion failure: A_badContext: bad calling context. See GateMutex API doc for details.
[DSP2 ] 11173.232233 s:
[DSP2 ] 11173.232233 s: ### XDC ASSERT - ERROR CALLBACK END ###

  • Hi,

    Please refer to BIOS API doc for GateMutex.

    Or, you can find the source under ~/bios_6_46_06_00/packages/ti/sysbios/gates/GateMutex.c.

    You are hitting the below error where GateMutex_enter() is called in HWI or SWI context.

    /*
     *  ======== GateMutex_enter ========
     *  Returns FIRST_ENTER when it gets the gate, returns NESTED_ENTER
     *  on nested calls.
     *
     *  During startup, Task_self returns NULL.  So all calls to the 
     *  GateMutex_enter look like it is a nested call, so nothing done.
     *  Then the leave's will do nothing either. 
     */
    IArg GateMutex_enter(GateMutex_Object *obj)
    {
        Semaphore_Handle sem;
    
        /* make sure we're not calling from Hwi or Swi context */
        Assert_isTrue(((BIOS_getThreadType() == BIOS_ThreadType_Task) ||
                       (BIOS_getThreadType() == BIOS_ThreadType_Main)),
                       GateMutex_A_badContext);
    
        if (obj->owner != Task_self()) {
            sem = GateMutex_Instance_State_sem(obj);
            Semaphore_pend(sem, BIOS_WAIT_FOREVER);
    
            obj->owner = Task_self();
    
            return (FIRST_ENTER);
        }
    
        return (NESTED_ENTER);
    }

    Regards,
    Stanley