mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 22:08:28 +00:00 
			
		
		
		
	Previously, if CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP was enabled, users would provide a definition for a vPortCleanUpTCB() hook function that is called right before a task's memory is freed in prvDeleteTCB(). However, vPortCleanUpTCB() will be reclaimed by ESP-IDF for internal use in v6.0. This commit introduces the following changes... Introduced a new CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK option: - Provides the same pre-deletion hook functionality. But users now define vTaskPreDeletionHook() instead. - CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP still exists, but is marked as deprecated. This is to maintain compatibility with existing applications that already define vPortCleanUpTCB(). - Removed redundant --wl --wrap workaround with vPortCleanUpTCB() - Added todo notes to remove support for user defined vPortCleanUpTCB() completely in v6.0. - Updated test cases to use new CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK option Freed up portCLEAN_UP_TCB() to call a new internal vPortTCBPreDeleteHook(): - vPortTCBPreDeleteHook() now replaces the previous "wrapped" implementation of vPortCleanUpTCB(). - vPortTCBPreDeleteHook() is an internal task pre-delete hook for IDF FreeRTOS ports to inject some pre-deletion operations. - Internal pre-delete hook now invokes user provided vTaskPreDeletionHook() if enabled. - Relocated vPortTCBPreDeleteHook() to correct section in port.c
		
			
				
	
	
		
			238 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			238 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# ----------------------------------------------------------------------------------------------------------------------
 | 
						|
# Linker fragment file for SMP FreeRTOS (i.e., CONFIG_FREERTOS_SMP=y)
 | 
						|
# Flash function placements are listed per source file, in the order that they appear in the source file.
 | 
						|
#
 | 
						|
# Placement Rules:
 | 
						|
#   - Default: Place all functions in internal RAM.
 | 
						|
#   - CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH:
 | 
						|
#       - Place functions in flash if they are never called from an ISR context (directly or indirectly).
 | 
						|
#       - Some functions that are called often (such as critical sections) are placed in internal RAM for speed.
 | 
						|
# ----------------------------------------------------------------------------------------------------------------------
 | 
						|
 | 
						|
[mapping:freertos_smp]
 | 
						|
archive: libfreertos.a
 | 
						|
entries:
 | 
						|
    * (noflash_text)        # Default all FreeRTOS functions to IRAM
 | 
						|
    if FREERTOS_PLACE_FUNCTIONS_INTO_FLASH = y:
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        # event_groups.c
 | 
						|
        # - Exclude all ...FromISR() functions and their dependents
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        event_groups:xEventGroupCreateStatic (default)
 | 
						|
        event_groups:xEventGroupCreate (default)
 | 
						|
        event_groups:xEventGroupSync (default)
 | 
						|
        event_groups:xEventGroupWaitBits (default)
 | 
						|
        event_groups:xEventGroupClearBits (default)
 | 
						|
        event_groups:xEventGroupSetBits (default)
 | 
						|
        event_groups:vEventGroupDelete (default)
 | 
						|
        event_groups:vEventGroupSetBitsCallback (default)
 | 
						|
        event_groups:vEventGroupClearBitsCallback (default)
 | 
						|
        event_groups:prvTestWaitCondition (default)
 | 
						|
        if FREERTOS_USE_TRACE_FACILITY = y:
 | 
						|
            event_groups: uxEventGroupGetNumber (default)
 | 
						|
            event_groups: vEventGroupSetNumber (default)
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        # list.c
 | 
						|
        # - List/List Item initialization functions are never called from ISR
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        list:vListInitialise (default)
 | 
						|
        list:vListInitialiseItem (default)
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        # queue.c
 | 
						|
        # - Keep all ...FromISR() functions (and their prv... calls) in internal RAM
 | 
						|
        # - All other functions can be moved to flash
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        queue:xQueueGenericReset (default)
 | 
						|
        queue:xQueueGenericCreateStatic (default)
 | 
						|
        queue:xQueueGenericCreate (default)
 | 
						|
        queue:prvInitialiseNewQueue (default)
 | 
						|
        queue:prvInitialiseMutex (default)
 | 
						|
        queue:xQueueCreateMutex (default)
 | 
						|
        queue:xQueueCreateMutexStatic (default)
 | 
						|
        queue:xQueueGetMutexHolder (default)
 | 
						|
        queue:xQueueGiveMutexRecursive (default)
 | 
						|
        queue:xQueueTakeMutexRecursive (default)
 | 
						|
        queue:xQueueCreateCountingSemaphoreStatic (default)
 | 
						|
        queue:xQueueCreateCountingSemaphore (default)
 | 
						|
        queue:xQueueGenericSend (default)
 | 
						|
        queue:xQueueReceive (default)
 | 
						|
        queue:xQueueSemaphoreTake (default)
 | 
						|
        queue:xQueuePeek (default)
 | 
						|
        queue:uxQueueMessagesWaiting (default)
 | 
						|
        queue:uxQueueSpacesAvailable (default)
 | 
						|
        queue:vQueueDelete (default)
 | 
						|
        if FREERTOS_USE_TRACE_FACILITY = y:
 | 
						|
            queue:uxQueueGetQueueNumber (default)
 | 
						|
            queue:vQueueSetQueueNumber (default)
 | 
						|
            queue:ucQueueGetQueueType (default)
 | 
						|
        queue:prvGetDisinheritPriorityAfterTimeout (default)
 | 
						|
        queue:prvUnlockQueue (default)
 | 
						|
        queue:prvIsQueueEmpty (default)
 | 
						|
        queue:prvIsQueueFull (default)
 | 
						|
        if FREERTOS_QUEUE_REGISTRY_SIZE > 0:
 | 
						|
            queue:vQueueAddToRegistry (default)
 | 
						|
            queue:pcQueueGetName (default)
 | 
						|
            queue:vQueueUnregisterQueue (default)
 | 
						|
        queue:vQueueWaitForMessageRestricted (default)
 | 
						|
        queue:xQueueCreateSet (default)
 | 
						|
        queue:xQueueAddToSet (default)
 | 
						|
        queue:xQueueRemoveFromSet (default)
 | 
						|
        queue:xQueueSelectFromSet (default)
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        # stream_buffer.c
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        stream_buffer:xStreamBufferGenericCreate (default)
 | 
						|
        stream_buffer:xStreamBufferGenericCreateStatic (default)
 | 
						|
        stream_buffer:vStreamBufferDelete (default)
 | 
						|
        stream_buffer:xStreamBufferReset (default)
 | 
						|
        stream_buffer:xStreamBufferSetTriggerLevel (default)
 | 
						|
        stream_buffer:xStreamBufferBytesAvailable (default)
 | 
						|
        stream_buffer:xStreamBufferSend (default)
 | 
						|
        stream_buffer:xStreamBufferReceive (default)
 | 
						|
        stream_buffer:xStreamBufferNextMessageLengthBytes (default)
 | 
						|
        stream_buffer:xStreamBufferIsEmpty (default)
 | 
						|
        stream_buffer:xStreamBufferIsFull (default)
 | 
						|
        stream_buffer:prvWriteBytesToBuffer (default)
 | 
						|
        stream_buffer:prvReadBytesFromBuffer (default)
 | 
						|
        stream_buffer:prvInitialiseNewStreamBuffer (default)
 | 
						|
        if FREERTOS_USE_TRACE_FACILITY = y:
 | 
						|
            stream_buffer:uxStreamBufferGetStreamBufferNumber (default)
 | 
						|
            stream_buffer:vStreamBufferSetStreamBufferNumber (default)
 | 
						|
            stream_buffer:ucStreamBufferGetStreamBufferType (default)
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        # tasks.c
 | 
						|
        # - The following functions are called when the cache is disabled, thus they are excluded from the list below
 | 
						|
        #   (i.e., called after "spi_flash_disable_interrupts_caches_and_other_cpu()" is called).
 | 
						|
        #   - "xTaskGetSchedulerState"
 | 
						|
        #   - "xTaskGetTickCount"
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        tasks:xTaskCreateStatic (default)
 | 
						|
        tasks:xTaskCreate (default)
 | 
						|
        if FREERTOS_UNICORE = n:
 | 
						|
            tasks:xTaskCreateStaticAffinitySet (default)
 | 
						|
            tasks:xTaskCreateAffinitySet (default)
 | 
						|
            tasks:vTaskCoreAffinitySet (default)
 | 
						|
            tasks:vTaskCoreAffinityGet (default)
 | 
						|
            tasks:prvMinimalIdleTask (default)
 | 
						|
        tasks:prvInitialiseNewTask (default)
 | 
						|
        tasks:prvAddNewTaskToReadyList (default)
 | 
						|
        tasks:vTaskDelete (default)
 | 
						|
        tasks:xTaskDelayUntil (default)
 | 
						|
        tasks:vTaskDelay (default)
 | 
						|
        tasks:eTaskGetState (default)
 | 
						|
        tasks:uxTaskPriorityGet (default)
 | 
						|
        tasks:vTaskPrioritySet (default)
 | 
						|
        tasks:vTaskSuspend (default)
 | 
						|
        tasks:vTaskResume (default)
 | 
						|
        tasks:prvCreateIdleTasks (default)
 | 
						|
        tasks:vTaskStartScheduler (default)
 | 
						|
        tasks:vTaskEndScheduler (default)
 | 
						|
        tasks:vTaskSuspendAll (default)
 | 
						|
        #Todo:prvGetExpectedIdleTime
 | 
						|
        tasks:xTaskResumeAll (default)
 | 
						|
        tasks:uxTaskGetNumberOfTasks (default)
 | 
						|
        tasks:pcTaskGetName (default)
 | 
						|
        tasks:prvSearchForNameWithinSingleList (default)
 | 
						|
        tasks:xTaskGetHandle (default)
 | 
						|
        if FREERTOS_USE_TRACE_FACILITY = y:
 | 
						|
            tasks:uxTaskGetSystemState (default)
 | 
						|
            tasks:uxTaskGetTaskNumber (default)
 | 
						|
            tasks:vTaskSetTaskNumber (default)
 | 
						|
            tasks:vTaskGetInfo (default)
 | 
						|
            tasks:prvListTasksWithinSingleList (default)
 | 
						|
            tasks:prvTaskCheckFreeStackSpace (default)
 | 
						|
        tasks:xTaskGetIdleTaskHandle (default)
 | 
						|
        tasks:xTaskAbortDelay (default)
 | 
						|
        tasks:vTaskPlaceOnEventList (default)
 | 
						|
        tasks:vTaskRemoveFromUnorderedEventList (default)
 | 
						|
        tasks:vTaskPlaceOnEventListRestricted (default)
 | 
						|
        tasks:vTaskSetTimeOutState (default)
 | 
						|
        tasks:vTaskInternalSetTimeOutState (default)
 | 
						|
        tasks:xTaskCheckForTimeOut (default)
 | 
						|
        tasks:vTaskMissedYield (default)
 | 
						|
        tasks:prvIdleTask (default)
 | 
						|
        if FREERTOS_THREAD_LOCAL_STORAGE_POINTERS > 0:
 | 
						|
            tasks:vTaskSetThreadLocalStoragePointer (default)
 | 
						|
            tasks:pvTaskGetThreadLocalStoragePointer (default)
 | 
						|
        tasks:prvInitialiseTaskLists (default)
 | 
						|
        tasks:prvCheckTasksWaitingTermination (default)
 | 
						|
        tasks:uxTaskGetStackHighWaterMark2 (default)
 | 
						|
        tasks:uxTaskGetStackHighWaterMark (default)
 | 
						|
        tasks:prvDeleteTCB (default)
 | 
						|
        if FREERTOS_USE_STATS_FORMATTING_FUNCTIONS = y:
 | 
						|
            tasks:prvWriteNameToBuffer (default)
 | 
						|
            tasks:vTaskList (default)
 | 
						|
        if FREERTOS_GENERATE_RUN_TIME_STATS = y:
 | 
						|
            tasks:vTaskGetRunTimeStats (default)
 | 
						|
            tasks:ulTaskGetIdleRunTimeCounter (default)
 | 
						|
        tasks:uxTaskResetEventItemValue (default)
 | 
						|
        tasks:pvTaskIncrementMutexHeldCount (default)
 | 
						|
        tasks:ulTaskGenericNotifyTake (default)
 | 
						|
        tasks:xTaskGenericNotifyWait (default)
 | 
						|
        tasks:xTaskGenericNotify (default)
 | 
						|
        tasks:xTaskGenericNotifyStateClear (default)
 | 
						|
        tasks:ulTaskGenericNotifyValueClear (default)
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        # timers.c
 | 
						|
        # - Only timer function called from ISR is xTimerGenericCommandFromISR() and its dependents
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        timers:xTimerCreateTimerTask (default)
 | 
						|
        timers:xTimerCreate (default)
 | 
						|
        timers:xTimerCreateStatic (default)
 | 
						|
        timers:prvInitialiseNewTimer (default)
 | 
						|
        timers:xTimerGenericCommandFromTask (default)
 | 
						|
        timers:xTimerGetTimerDaemonTaskHandle (default)
 | 
						|
        timers:xTimerGetPeriod (default)
 | 
						|
        timers:vTimerSetReloadMode (default)
 | 
						|
        timers:uxTimerGetReloadMode (default)
 | 
						|
        timers:xTimerGetExpiryTime (default)
 | 
						|
        timers:pcTimerGetName (default)
 | 
						|
        timers:prvProcessExpiredTimer (default)
 | 
						|
        timers:prvTimerTask (default)
 | 
						|
        timers:prvProcessTimerOrBlockTask (default)
 | 
						|
        timers:prvGetNextExpireTime (default)
 | 
						|
        timers:prvSampleTimeNow (default)
 | 
						|
        timers:prvInsertTimerInActiveList (default)
 | 
						|
        timers:prvProcessReceivedCommands (default)
 | 
						|
        timers:prvSwitchTimerLists (default)
 | 
						|
        timers:prvCheckForValidListAndQueue (default)
 | 
						|
        timers:xTimerIsTimerActive (default)
 | 
						|
        timers:pvTimerGetTimerID (default)
 | 
						|
        timers:vTimerSetTimerID (default)
 | 
						|
        timers:xTimerPendFunctionCall (default)
 | 
						|
        if FREERTOS_USE_TRACE_FACILITY = y:
 | 
						|
            timers:uxTimerGetTimerNumber (default)
 | 
						|
            timers:vTimerSetTimerNumber (default)
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        # portable/xtensa/port.c
 | 
						|
        # - Most functions are called from an ISR context, except for scheduler/task init/deinit functions
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        if IDF_TARGET_ARCH_XTENSA = y:
 | 
						|
            port:xPortStartScheduler (default)
 | 
						|
            port:vPortEndScheduler (default)
 | 
						|
            port:pvPortMalloc (default)
 | 
						|
            port:vPortFree (default)
 | 
						|
            port:vPortInitialiseBlocks (default)
 | 
						|
            port:xPortGetFreeHeapSize (default)
 | 
						|
            port:pxPortInitialiseStack (default)
 | 
						|
            if FREERTOS_UNICORE = n:
 | 
						|
                port:vPortCleanUpCoprocArea (default)
 | 
						|
            if FREERTOS_TLSP_DELETION_CALLBACKS = y:
 | 
						|
                port:vPortTLSPointersDelCb (default)
 | 
						|
            port:vPortTCBPreDeleteHook (default)
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        # portable/riscv/port.c
 | 
						|
        # - Most functions are called from an ISR context, except for scheduler/task init/deinit functions
 | 
						|
        # --------------------------------------------------------------------------------------------------------------
 | 
						|
        if IDF_TARGET_ARCH_RISCV = y:
 | 
						|
            port:xPortStartScheduler (default)
 | 
						|
            port:vPortEndScheduler (default)
 | 
						|
            port:pvPortMalloc (default)
 | 
						|
            port:vPortFree (default)
 | 
						|
            port:vPortInitialiseBlocks (default)
 | 
						|
            port:xPortGetFreeHeapSize (default)
 | 
						|
            port:pxPortInitialiseStack (default)
 | 
						|
            if FREERTOS_TLSP_DELETION_CALLBACKS = y:
 | 
						|
                port:vPortTLSPointersDelCb (default)
 | 
						|
            port:vPortTCBPreDeleteHook (default)
 |