S32K344 LLD FreeRTOS FlexCAN interrupt issue

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

S32K344 LLD FreeRTOS FlexCAN interrupt issue

479件の閲覧回数
harryoceana
Contributor II

I'm using freertos and flexcan. In the send function of can(FlexCAN_Ip_Send), FlexCAN_SetMsgBuffIntCmd is called to enable the message buffer interrupt. In the FlexCAN_SetMsgBuffIntCmd function, we call SchM_Enter_Can_43_FLEXCAN_CAN_EXCLUSIVE_AREA_18 fun for Start critical section, This function ends up calling taskEXIT_CRITICAL, which is not interrupt-safe, causing the program to get stuck in the vPortEnterCritical function. What should be set up to avoid this situation?

Attached my project

 

void vPortEnterCritical( void )
{
    portDISABLE_INTERRUPTS();
    uxCriticalNesting++;

    /* This is not the interrupt safe version of the enter critical function so
     * assert() if it is being called from an interrupt context.  Only API
     * functions that end in "FromISR" can be used in an interrupt.  Only assert if
     * the critical nesting count is 1 to protect against recursive calls if the
     * assert function also uses a critical section. */
    if( uxCriticalNesting == 1 )
    {
        configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 );
    }
}

 

 

ラベル(1)
タグ(1)
0 件の賞賛
返信
1 返信

454件の閲覧回数
PetrS
NXP TechSupport
NXP TechSupport

Hi,

the issue is due to taskENTER_CRITICAL() and taskEXIT_CRITICAL() must not be called from an interrupt service routine (ISR) - see taskENTER_CRITICAL_FROM_ISR() and  taskEXIT_CRITICAL_FROM_ISR() for interrupt safe equivalents; https://www.freertos.org/taskENTER_CRITICAL_taskEXIT_CRITICAL.html
This will be fixed in the next RTD releases in the future, as far as I know.

BR, Petr

0 件の賞賛
返信