After adding freertos component code gets stuck in prvPortStartFirstTask

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

After adding freertos component code gets stuck in prvPortStartFirstTask

1,839 Views
s32k146_ige
Contributor IV

i have added freertos component to my project which was uart_pal_echo_s32k146, the problem is code is getting stuck in prvPortStartFirstTask, this is something new and i have no idea with respect this how to troubleshoot. can you share any details or guideline to troubleshoot this problem;

 

Screenshot 2023-05-10 125711.png

Tags (1)
0 Kudos
Reply
8 Replies

1,741 Views
DanNguyenDuy
NXP Employee
NXP Employee

Hi @s32k146_ige,

Did you get this error when run Freertos example?

And what is the package's name and the debugger you are using?

Best regards,

Dan

0 Kudos
Reply

1,677 Views
DanNguyenDuy
NXP Employee
NXP Employee

Hi @s32k146_ige,

Maybe your issue as same as the issue: https://community.nxp.com/t5/S32K/FreeRTOS-stuck-at-quot-svc-0-quot-in-function-of/m-p/1639698#M2236...

Please refer to the above link and check in your project.

Best regards,

Dan

0 Kudos
Reply

1,771 Views
FreeRTOS_org
Contributor IV

Your stack frame shows the WDOG interrupt is executing, which I presume is the watchdog timer expiring.  Are you knowingly using the watchdog timer?  If so, it might be doing what it is supposed to be doing and letting you know it wasn't reset in time.

0 Kudos
Reply

1,772 Views
FreeRTOS_org
Contributor IV

You stack frame shows you are in the WDOG interrupt - which I presume is the watchdog interrupt - are you using the watchdog timer?  If so, I guess the watchdog is expiring.

0 Kudos
Reply

1,826 Views
FreeRTOS_org
Contributor IV

Does it appear to get stuck on the SVC instruction which starts the scheduler?  If so, often users report the code appearing to get stuck here whereas in reality the tasks are running.  Try placing a break point at the start of the highest priority task (which might be the auto-generated timer task), run the code (not stepping through the code), and see if the break point is hit.

0 Kudos
Reply

1,779 Views
s32k146_ige
Contributor IV

@FreeRTOS_org 

Again it is happening, the code was running fine till two days back, and same code after edits isnt running. I am kinda hapless because i cannot know what is the error

Single stepping i can deduce that in task2 i am creating an xEventGroupCreate(); , the debugger disappears from here to default to ISR.

s32k146_ige_0-1684131820057.png

 

0 Kudos
Reply

1,811 Views
s32k146_ige
Contributor IV

Following is the content of freertos config,

i have encountered this error before, every time i had to increase the task1 size and it never triggered stackoverflow hook. 

 

#define configUSE_PREEMPTION                     1
#define configUSE_PORT_OPTIMISED_TASK_SELECTION  1
#define configCPU_CLOCK_HZ                       ( 80000000UL )
#define configTICK_RATE_HZ                       ( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES                     ( 8 )
#define configMINIMAL_STACK_SIZE                 ( ( unsigned short ) 200 )
#define configMAX_TASK_NAME_LEN                  ( 12 )
#define configUSE_16_BIT_TICKS                   0
#define configIDLE_SHOULD_YIELD                  1
#define configUSE_TASK_NOTIFICATIONS             1
#define configUSE_MUTEXES                        1
#define configUSE_RECURSIVE_MUTEXES              1
#define configUSE_COUNTING_SEMAPHORES            1
#define configQUEUE_REGISTRY_SIZE                0
#define configUSE_QUEUE_SETS                     0
#define configUSE_TIME_SLICING                   1
#define configUSE_NEWLIB_REENTRANT               0
#define configENABLE_BACKWARD_COMPATIBILITY      1
#define configNUM_THREAD_LOCAL_STORAGE_POINTERS  0
#define configUSE_APPLICATION_TASK_TAG           0

/* Memory allocation related definitions. */
#define configSUPPORT_STATIC_ALLOCATION          0
#define configSUPPORT_DYNAMIC_ALLOCATION         1
#define configTOTAL_HEAP_SIZE                    ( ( size_t ) 24576 )
#define configAPPLICATION_ALLOCATED_HEAP         0

/* Hook function related definitions. */
#define configUSE_IDLE_HOOK                      1
#define configUSE_TICK_HOOK                      0
#define configCHECK_FOR_STACK_OVERFLOW           2
#define configUSE_MALLOC_FAILED_HOOK             0
#define configUSE_DAEMON_TASK_STARTUP_HOOK       0

/* Run time and task stats gathering related definitions. */
#define configGENERATE_RUN_TIME_STATS            0 
#define configUSE_TRACE_FACILITY                 0
#define configUSE_STATS_FORMATTING_FUNCTIONS     0

/* Co-routine related definitions. */
#define configUSE_CO_ROUTINES                    0
#define configMAX_CO_ROUTINE_PRIORITIES          ( 2 )

/* Software timer related definitions. */
#define configUSE_TIMERS                         1
#define configTIMER_TASK_PRIORITY                ( 3 )
#define configTIMER_QUEUE_LENGTH                 10
#define configTIMER_TASK_STACK_DEPTH             128

/* Optional functions - most linkers will remove unused functions anyway. */
#define INCLUDE_vTaskPrioritySet                 1
#define INCLUDE_uxTaskPriorityGet                1
#define INCLUDE_vTaskDelete                      1
#define INCLUDE_vTaskSuspend                     1
#define INCLUDE_vTaskDelayUntil                  1
#define INCLUDE_vTaskDelay                       1
#define INCLUDE_xTaskGetSchedulerState           1
#define INCLUDE_xTaskGetCurrentTaskHandle        1
#define INCLUDE_uxTaskGetStackHighWaterMark      1
#define INCLUDE_xTaskGetIdleTaskHandle           0
#define INCLUDE_eTaskGetState                    0
#define INCLUDE_xEventGroupSetBitFromISR         1
#define INCLUDE_xTimerPendFunctionCall           1
#define INCLUDE_xTaskAbortDelay                  1
#define INCLUDE_xTaskGetHandle                   1
#define INCLUDE_xTaskResumeFromISR               1
#define INCLUDE_xQueueGetMutexHolder             1

/* Definition assert() function. */
#define configASSERT(x)                          if((x)==0) { taskDISABLE_INTERRUPTS(); for( ;; ); }

/* Tickless Idle Mode */
#define configUSE_TICKLESS_IDLE                  0

/* Additional settings can be defined in the property Settings > User settings > Definitions of the FreeRTOS component */

/* Run time stats gathering definitions. */
#ifdef __ICCARM__
	/* The #ifdef just prevents this C specific syntax from being included in
	assembly files. */
	void vMainConfigureTimerForRunTimeStats( void );
	unsigned long ulMainGetRunTimeCounterValue( void );
#endif
#ifdef __GNUC__
	/* The #ifdef just prevents this C specific syntax from being included in
	assembly files. */
	void vMainConfigureTimerForRunTimeStats( void );
	unsigned long ulMainGetRunTimeCounterValue( void );
#endif

/* Cortex-M specific definitions. */
#ifdef __NVIC_PRIO_BITS
  #define configPRIO_BITS                         __NVIC_PRIO_BITS
#else
  #define configPRIO_BITS                         4
#endif

/* The lowest interrupt priority that can be used in a call to a "set priority"
function. */
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY  (0x0F)

/* The highest interrupt priority that can be used by any interrupt service
routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
PRIORITY THAN THIS! (higher priorities are lower numeric values. */
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY	 (0x01)

/* Interrupt priorities used by the kernel port layer itself.  These are generic
to all Cortex-M ports, and do not rely on any particular library functions. */
#ifndef configKERNEL_INTERRUPT_PRIORITY
  #define configKERNEL_INTERRUPT_PRIORITY         (configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8-configPRIO_BITS))
#endif

/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
#ifndef configMAX_SYSCALL_INTERRUPT_PRIORITY
  #define configMAX_SYSCALL_INTERRUPT_PRIORITY    (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8-configPRIO_BITS))
#endif

/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
#define vPortSVCHandler                             SVC_Handler
#define xPortPendSVHandler                          PendSV_Handler
#define xPortSysTickHandler                         SysTick_Handler

 

0 Kudos
Reply

1,812 Views
s32k146_ige
Contributor IV
No, i have 2 task and i had marked breakpoint in both task and non of them paused at breakpoint.
so let me tell you how i bypassed it yesterday, i have created 2 task,

task1 with 400 stack
task2 with 400 stack

when i increased stack of task1 to 800, this error went away. which was surprising as i have enabled stackoverflow and when i read the stack free it was around 19k
0 Kudos
Reply