mirror of
				https://github.com/FreeRTOS/FreeRTOS-Kernel.git
				synced 2025-11-04 11:09:01 +01:00 
			
		
		
		
	Add vApplicationGetPassiveIdleTaskMemory for SMP (#890)
* Update vApplicationGetIdleTaskMemory prototype for SMP. Now SMP and single core use the same prototype for compatibility. * Add vApplicationGetPassiveIdleTaskMemory for SMP to get passive idle task memory.
This commit is contained in:
		
							parent
							
								
									ad13a1f8df
								
							
						
					
					
						commit
						dc09a3dd51
					
				@ -1961,8 +1961,6 @@ configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVIL
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if ( configSUPPORT_STATIC_ALLOCATION == 1 )
 | 
					#if ( configSUPPORT_STATIC_ALLOCATION == 1 )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #if ( configNUMBER_OF_CORES == 1 )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * task.h
 | 
					 * task.h
 | 
				
			||||||
 * @code{c}
 | 
					 * @code{c}
 | 
				
			||||||
@ -1976,15 +1974,14 @@ configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVIL
 | 
				
			|||||||
 * @param ppxIdleTaskStackBuffer A handle to a statically allocated Stack buffer for the idle task
 | 
					 * @param ppxIdleTaskStackBuffer A handle to a statically allocated Stack buffer for the idle task
 | 
				
			||||||
 * @param pulIdleTaskStackSize A pointer to the number of elements that will fit in the allocated stack buffer
 | 
					 * @param pulIdleTaskStackSize A pointer to the number of elements that will fit in the allocated stack buffer
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
        void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
 | 
					    void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
 | 
				
			||||||
                                            StackType_t ** ppxIdleTaskStackBuffer,
 | 
					                                        StackType_t ** ppxIdleTaskStackBuffer,
 | 
				
			||||||
                                            uint32_t * pulIdleTaskStackSize ); /*lint !e526 Symbol not defined as it is an application callback. */
 | 
					                                        uint32_t * pulIdleTaskStackSize ); /*lint !e526 Symbol not defined as it is an application callback. */
 | 
				
			||||||
    #else /* #if ( configNUMBER_OF_CORES == 1 ) */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * task.h
 | 
					 * task.h
 | 
				
			||||||
 * @code{c}
 | 
					 * @code{c}
 | 
				
			||||||
 * void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer, StackType_t ** ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize, BaseType_t xCoreID )
 | 
					 * void vApplicationGetPassiveIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer, StackType_t ** ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize, BaseType_t xCoreID )
 | 
				
			||||||
 * @endcode
 | 
					 * @endcode
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * This function is used to provide a statically allocated block of memory to FreeRTOS to hold the Idle Tasks TCB.  This function is required when
 | 
					 * This function is used to provide a statically allocated block of memory to FreeRTOS to hold the Idle Tasks TCB.  This function is required when
 | 
				
			||||||
@ -1996,20 +1993,21 @@ configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVIL
 | 
				
			|||||||
 * These idle tasks are created to ensure that each core has an idle task to run when
 | 
					 * These idle tasks are created to ensure that each core has an idle task to run when
 | 
				
			||||||
 * no other task is available to run.
 | 
					 * no other task is available to run.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * The function vApplicationGetIdleTaskMemory is called with xCoreID 0 to get the
 | 
					 * The function vApplicationGetPassiveIdleTaskMemory is called with passive idle
 | 
				
			||||||
 * memory for Active idle task. It is called with xCoreID 1, 2 ... ( configNUMBER_OF_CORES - 1 )
 | 
					 * task index 0, 1 ... ( configNUMBER_OF_CORES - 2 ) to get memory for passive idle
 | 
				
			||||||
 * to get memory for passive idle tasks.
 | 
					 * tasks.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @param ppxIdleTaskTCBBuffer A handle to a statically allocated TCB buffer
 | 
					 * @param ppxIdleTaskTCBBuffer A handle to a statically allocated TCB buffer
 | 
				
			||||||
 * @param ppxIdleTaskStackBuffer A handle to a statically allocated Stack buffer for the idle task
 | 
					 * @param ppxIdleTaskStackBuffer A handle to a statically allocated Stack buffer for the idle task
 | 
				
			||||||
 * @param pulIdleTaskStackSize A pointer to the number of elements that will fit in the allocated stack buffer
 | 
					 * @param pulIdleTaskStackSize A pointer to the number of elements that will fit in the allocated stack buffer
 | 
				
			||||||
 * @param xCoreId The core index of the idle task buffer
 | 
					 * @param xPassiveIdleTaskIndex The passive idle task index of the idle task buffer
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
        void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
 | 
					    #if ( configNUMBER_OF_CORES > 1 )
 | 
				
			||||||
                                            StackType_t ** ppxIdleTaskStackBuffer,
 | 
					        void vApplicationGetPassiveIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
 | 
				
			||||||
                                            uint32_t * pulIdleTaskStackSize, /*lint !e526 Symbol not defined as it is an application callback. */
 | 
					                                                   StackType_t ** ppxIdleTaskStackBuffer,
 | 
				
			||||||
                                            BaseType_t xCoreID );
 | 
					                                                   uint32_t * pulIdleTaskStackSize,
 | 
				
			||||||
    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */
 | 
					                                                   BaseType_t xPassiveIdleTaskIndex );
 | 
				
			||||||
 | 
					    #endif /* #if ( configNUMBER_OF_CORES > 1 ) */
 | 
				
			||||||
#endif /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */
 | 
					#endif /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										61
									
								
								tasks.c
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								tasks.c
									
									
									
									
									
								
							@ -3575,10 +3575,21 @@ static BaseType_t prvCreateIdleTasks( void )
 | 
				
			|||||||
            /* The Idle task is created using user provided RAM - obtain the
 | 
					            /* The Idle task is created using user provided RAM - obtain the
 | 
				
			||||||
             * address of the RAM then create the idle task. */
 | 
					             * address of the RAM then create the idle task. */
 | 
				
			||||||
            #if ( configNUMBER_OF_CORES == 1 )
 | 
					            #if ( configNUMBER_OF_CORES == 1 )
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
                vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize );
 | 
					                vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            #else
 | 
					            #else
 | 
				
			||||||
                vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize, xCoreID );
 | 
					            {
 | 
				
			||||||
            #endif
 | 
					                if( xCoreID == 0 )
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize );
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    vApplicationGetPassiveIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize, xCoreID - 1 );
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            #endif /* if ( configNUMBER_OF_CORES == 1 ) */
 | 
				
			||||||
            xIdleTaskHandles[ xCoreID ] = xTaskCreateStatic( pxIdleTaskFunction,
 | 
					            xIdleTaskHandles[ xCoreID ] = xTaskCreateStatic( pxIdleTaskFunction,
 | 
				
			||||||
                                                             cIdleName,
 | 
					                                                             cIdleName,
 | 
				
			||||||
                                                             ulIdleTaskStackSize,
 | 
					                                                             ulIdleTaskStackSize,
 | 
				
			||||||
@ -8523,36 +8534,34 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
 | 
				
			|||||||
 * it's own implementation of vApplicationGetIdleTaskMemory by setting
 | 
					 * it's own implementation of vApplicationGetIdleTaskMemory by setting
 | 
				
			||||||
 * configKERNEL_PROVIDED_STATIC_MEMORY to 0 or leaving it undefined.
 | 
					 * configKERNEL_PROVIDED_STATIC_MEMORY to 0 or leaving it undefined.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
    #if ( configNUMBER_OF_CORES == 1 )
 | 
					    void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
 | 
				
			||||||
 | 
					                                        StackType_t ** ppxIdleTaskStackBuffer,
 | 
				
			||||||
 | 
					                                        uint32_t * pulIdleTaskStackSize )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        static StaticTask_t xIdleTaskTCB;
 | 
				
			||||||
 | 
					        static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
 | 
					        *ppxIdleTaskTCBBuffer = &( xIdleTaskTCB );
 | 
				
			||||||
                                            StackType_t ** ppxIdleTaskStackBuffer,
 | 
					        *ppxIdleTaskStackBuffer = &( uxIdleTaskStack[ 0 ] );
 | 
				
			||||||
                                            uint32_t * pulIdleTaskStackSize )
 | 
					        *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #if ( configNUMBER_OF_CORES > 1 )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void vApplicationGetPassiveIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
 | 
				
			||||||
 | 
					                                                   StackType_t ** ppxIdleTaskStackBuffer,
 | 
				
			||||||
 | 
					                                                   uint32_t * pulIdleTaskStackSize,
 | 
				
			||||||
 | 
					                                                   BaseType_t xPassiveIdleTaskIndex )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            static StaticTask_t xIdleTaskTCB;
 | 
					            static StaticTask_t xIdleTaskTCBs[ configNUMBER_OF_CORES - 1 ];
 | 
				
			||||||
            static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];
 | 
					            static StackType_t uxIdleTaskStacks[ configNUMBER_OF_CORES - 1 ][ configMINIMAL_STACK_SIZE ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            *ppxIdleTaskTCBBuffer = &( xIdleTaskTCB );
 | 
					            *ppxIdleTaskTCBBuffer = &( xIdleTaskTCBs[ xPassiveIdleTaskIndex ] );
 | 
				
			||||||
            *ppxIdleTaskStackBuffer = &( uxIdleTaskStack[ 0 ] );
 | 
					            *ppxIdleTaskStackBuffer = &( uxIdleTaskStacks[ xPassiveIdleTaskIndex ][ 0 ] );
 | 
				
			||||||
            *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
 | 
					            *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #else /* #if ( configNUMBER_OF_CORES == 1 ) */
 | 
					    #endif /* #if ( configNUMBER_OF_CORES > 1 ) */
 | 
				
			||||||
 | 
					 | 
				
			||||||
        void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
 | 
					 | 
				
			||||||
                                            StackType_t ** ppxIdleTaskStackBuffer,
 | 
					 | 
				
			||||||
                                            uint32_t * pulIdleTaskStackSize,
 | 
					 | 
				
			||||||
                                            BaseType_t xCoreId )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            static StaticTask_t xIdleTaskTCBs[ configNUMBER_OF_CORES ];
 | 
					 | 
				
			||||||
            static StackType_t uxIdleTaskStacks[ configNUMBER_OF_CORES ][ configMINIMAL_STACK_SIZE ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            *ppxIdleTaskTCBBuffer = &( xIdleTaskTCBs[ xCoreId ] );
 | 
					 | 
				
			||||||
            *ppxIdleTaskStackBuffer = &( uxIdleTaskStacks[ xCoreId ][ 0 ] );
 | 
					 | 
				
			||||||
            *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configKERNEL_PROVIDED_STATIC_MEMORY == 1 ) && ( portUSING_MPU_WRAPPERS == 0 ) ) */
 | 
					#endif /* #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configKERNEL_PROVIDED_STATIC_MEMORY == 1 ) && ( portUSING_MPU_WRAPPERS == 0 ) ) */
 | 
				
			||||||
/*-----------------------------------------------------------*/
 | 
					/*-----------------------------------------------------------*/
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user