Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT




Loading

execution ends in prvTaskExitError(void) function.

Posted by karthik366 on March 24, 2014

i am running freertos with 3 tasks on msp430 initially and now i ported the code to stm32l152cb(stm32l152xb family) but here the execution ends in prvTaskExitError(void) how to solve this problem , the function definition is static void prvTaskExitError( void ) { /* A function that implements a task must not exit or attempt to return to its caller as there is nothing to return to. If a task wants to exit it should instead call vTaskDelete( NULL ).

Artificially force an assert() to be triggered if configASSERT() is
defined, then stop here so application writers can catch the error. */
configASSERT( uxCriticalNesting == ~0UL );
portDISABLE_INTERRUPTS();
for( ;; );

}

Does this mean that my tasks exit in between by returning some value.one of the tasks handles usart interrupts and other tasks resolve them. please throw some light on this


execution ends in prvTaskExitError(void) function.

Posted by rtel on March 24, 2014

prvTaskExitError() will be called if a task attempts to exit from its implementing function. See http://www.freertos.org/implementing-a-FreeRTOS-task.html

As you are using an STM32 make sure you call have configASSERT() defined and that you call NVICPriorityGroupConfig( NVICPriorityGroup_4 ). See: http://www.freertos.org/RTOS-Cortex-M3-M4.html

Regards.


execution ends in prvTaskExitError(void) function.

Posted by karthik366 on March 25, 2014

yes i am using NVICPriorityGroupConfig( NVICPriorityGroup_4 ). you mean #define configASSERT( x ) in FreeRTOS.h file? i didnt get it , where can i find some example of such assertion function. thanks for reply


execution ends in prvTaskExitError(void) function.

Posted by rtel on March 25, 2014

The easiest way to cause your program to halt when assert is called is to just add the following line to FreeRTOSConfig.h

define configASSERT( x ) if( x == 0 ) { taskDISABLE_INTERRUPTS(); for(;;); }


The traditional way of defining assert() is to pass the file name and line number into a function, in which case you would define as follows in FreeRTOSConfig.h:

void vAssertCalled( const char * pcFile, unsigned long ulLine );

define configASSERT(x) if((x)==0 ) vAssertCalled( FILE, LINE );


...and in a C file provide the implementation of the function, something like this.

void vAssertCalled( const char * pcFile, 
                    unsigned long ulLine )
{
volatile unsigned long ul = 0;

taskENTER_CRITICAL();
{
    while( ul == 0 )
    {
        portNOP();
    }
}
taskEXIT_CRITICAL();

}


Regards.


[ Back to the top ]    [ About FreeRTOS ]    [ Sitemap ]    [ ]




Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Latest News

FreeRTOS kernel V10 is available for immediate download. Now MIT licensed.


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

OpenRTOS and SafeRTOS