freertos(SMP): Update SMP FreeRTOS linker fragment file

This commit updates the linker fragment file for Amazon SMP FreeRTOS.

- Linker fragment file's formatting was updated
- Placement rules of functions is now clearly specified inside the linker
  fragment file.
- Some extra functions are now placed in flash in accordance to the new
  placement rules.
This commit is contained in:
Darian Leung
2022-12-01 21:38:05 +08:00
committed by Sudeep Mohanty
parent 55644575db
commit 4ac68a97d9
2 changed files with 223 additions and 139 deletions

View File

@ -201,7 +201,7 @@ This file get's pulled into assembly sources. Therefore, some includes need to b
#define INCLUDE_xSemaphoreGetMutexHolder 1 #define INCLUDE_xSemaphoreGetMutexHolder 1
#define INCLUDE_xTaskGetHandle 1 #define INCLUDE_xTaskGetHandle 1
#define INCLUDE_uxTaskGetStackHighWaterMark 1 #define INCLUDE_uxTaskGetStackHighWaterMark 1
#define INCLUDE_uxTaskGetStackHighWaterMark2 0 #define INCLUDE_uxTaskGetStackHighWaterMark2 1
#define INCLUDE_eTaskGetState 1 #define INCLUDE_eTaskGetState 1
#define INCLUDE_xTaskResumeFromISR 1 #define INCLUDE_xTaskResumeFromISR 1
#define INCLUDE_xTimerPendFunctionCall 1 #define INCLUDE_xTimerPendFunctionCall 1

View File

@ -1,158 +1,242 @@
# ----------------------------------------------------------------------------------------------------------------------
# Linker fragment file for SMP FreeRTOS (i.e., CONFIG_FREERTOS_SMP=y) # Linker fragment file for SMP FreeRTOS (i.e., CONFIG_FREERTOS_SMP=y)
[mapping:freertos] # 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 archive: libfreertos.a
entries: entries:
# Default all FreeRTOS functions to IRAM * (noflash_text) # Default all FreeRTOS functions to IRAM
* (noflash_text)
# Todo: Check if flash placements are missing or can be further optimized IDF-5259
if FREERTOS_PLACE_FUNCTIONS_INTO_FLASH = y: if FREERTOS_PLACE_FUNCTIONS_INTO_FLASH = y:
# --------------------------------------------------------------------------------------------------------------
# event_groups.c # event_groups.c
event_groups: xEventGroupCreateStatic (default) # - Exclude all ...FromISR() functions and their dependents
event_groups: xEventGroupCreate (default) # --------------------------------------------------------------------------------------------------------------
event_groups: xEventGroupSync (default) event_groups:xEventGroupCreateStatic (default)
event_groups: xEventGroupWaitBits (default) event_groups:xEventGroupCreate (default)
event_groups: xEventGroupClearBits (default) event_groups:xEventGroupSync (default)
event_groups: xEventGroupSetBits (default) event_groups:xEventGroupWaitBits (default)
event_groups: vEventGroupDelete (default) event_groups:xEventGroupClearBits (default)
event_groups: vEventGroupSetBitsCallback (default) event_groups:xEventGroupSetBits (default)
event_groups: vEventGroupClearBitsCallback (default) event_groups:vEventGroupDelete (default)
event_groups: prvTestWaitCondition (default) event_groups:vEventGroupSetBitsCallback (default)
event_groups:vEventGroupClearBitsCallback (default)
event_groups:prvTestWaitCondition (default)
if FREERTOS_USE_TRACE_FACILITY = y: if FREERTOS_USE_TRACE_FACILITY = y:
event_groups: uxEventGroupGetNumber (default) event_groups: uxEventGroupGetNumber (default)
event_groups: vEventGroupSetNumber (default) event_groups: vEventGroupSetNumber (default)
# --------------------------------------------------------------------------------------------------------------
# list.c # list.c
# - List/List Item initialization functions are never called from ISR
# --------------------------------------------------------------------------------------------------------------
list:vListInitialise (default)
list:vListInitialiseItem (default)
# --------------------------------------------------------------------------------------------------------------
# queue.c # queue.c
queue: xQueueGenericReset (default) # - Keep all ...FromISR() functions (and their prv... calls) in internal RAM
queue: xQueueGenericCreateStatic (default) # - All other functions can be moved to flash
queue: xQueueGenericCreate (default) # --------------------------------------------------------------------------------------------------------------
queue: prvInitialiseNewQueue (default) queue:xQueueGenericReset (default)
queue: prvInitialiseMutex (default) queue:xQueueGenericCreateStatic (default)
queue: xQueueCreateMutex (default) queue:xQueueGenericCreate (default)
queue: xQueueCreateMutexStatic (default) queue:prvInitialiseNewQueue (default)
queue: xQueueGetMutexHolder (default) queue:prvInitialiseMutex (default)
queue: xQueueGiveMutexRecursive (default) queue:xQueueCreateMutex (default)
queue: xQueueTakeMutexRecursive (default) queue:xQueueCreateMutexStatic (default)
queue: xQueueCreateCountingSemaphoreStatic (default) queue:xQueueGetMutexHolder (default)
queue: xQueueCreateCountingSemaphore (default) queue:xQueueGiveMutexRecursive (default)
queue: xQueueGenericSend (default) queue:xQueueTakeMutexRecursive (default)
queue: xQueueReceive (default) queue:xQueueCreateCountingSemaphoreStatic (default)
queue: xQueueSemaphoreTake (default) queue:xQueueCreateCountingSemaphore (default)
queue: xQueuePeek (default) queue:xQueueGenericSend (default)
queue: uxQueueMessagesWaiting (default) queue:xQueueReceive (default)
queue: uxQueueSpacesAvailable (default) queue:xQueueSemaphoreTake (default)
queue: vQueueDelete (default) queue:xQueuePeek (default)
queue:uxQueueMessagesWaiting (default)
queue:uxQueueSpacesAvailable (default)
queue:vQueueDelete (default)
if FREERTOS_USE_TRACE_FACILITY = y: if FREERTOS_USE_TRACE_FACILITY = y:
queue: uxQueueGetQueueNumber (default) queue:uxQueueGetQueueNumber (default)
queue: vQueueSetQueueNumber (default) queue:vQueueSetQueueNumber (default)
queue: ucQueueGetQueueType (default) queue:ucQueueGetQueueType (default)
queue: prvGetDisinheritPriorityAfterTimeout (default) queue:prvGetDisinheritPriorityAfterTimeout (default)
queue: prvUnlockQueue (default) queue:prvUnlockQueue (default)
queue: prvIsQueueEmpty (default) queue:prvIsQueueEmpty (default)
queue: prvIsQueueFull (default) queue:prvIsQueueFull (default)
if FREERTOS_QUEUE_REGISTRY_SIZE > 0: if FREERTOS_QUEUE_REGISTRY_SIZE > 0:
queue: vQueueAddToRegistry (default) queue:vQueueAddToRegistry (default)
queue: pcQueueGetName (default) queue:pcQueueGetName (default)
queue: vQueueUnregisterQueue (default) queue:vQueueUnregisterQueue (default)
queue: vQueueWaitForMessageRestricted (default) queue:vQueueWaitForMessageRestricted (default)
queue: xQueueCreateSet (default) queue:xQueueCreateSet (default)
queue: xQueueAddToSet (default) queue:xQueueAddToSet (default)
queue: xQueueRemoveFromSet (default) queue:xQueueRemoveFromSet (default)
queue: xQueueSelectFromSet (default) queue:xQueueSelectFromSet (default)
# --------------------------------------------------------------------------------------------------------------
# stream_buffer.c # stream_buffer.c
# tasks.c: Vanilla # --------------------------------------------------------------------------------------------------------------
tasks: xTaskCreateStatic (default) stream_buffer:xStreamBufferGenericCreate (default)
tasks: xTaskCreate (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: if FREERTOS_UNICORE = n:
tasks: xTaskCreateStaticAffinitySet (default) tasks:xTaskCreateStaticAffinitySet (default)
tasks: xTaskCreateAffinitySet (default) tasks:xTaskCreateAffinitySet (default)
tasks: vTaskCoreAffinitySet (default) tasks:vTaskCoreAffinitySet (default)
tasks: vTaskCoreAffinityGet (default) tasks:vTaskCoreAffinityGet (default)
tasks: prvMinimalIdleTask (default) tasks:prvMinimalIdleTask (default)
tasks: prvInitialiseNewTask (default) tasks:prvInitialiseNewTask (default)
tasks: prvAddNewTaskToReadyList (default) tasks:prvAddNewTaskToReadyList (default)
tasks: vTaskDelete (default) tasks:vTaskDelete (default)
tasks: xTaskDelayUntil (default) tasks:xTaskDelayUntil (default)
tasks: vTaskDelay (default) tasks:vTaskDelay (default)
tasks: eTaskGetState (default) tasks:eTaskGetState (default)
tasks: uxTaskPriorityGet (default) tasks:uxTaskPriorityGet (default)
tasks: vTaskPrioritySet (default) tasks:vTaskPrioritySet (default)
tasks: vTaskSuspend (default) tasks:vTaskSuspend (default)
tasks: vTaskResume (default) tasks:vTaskResume (default)
tasks: prvCreateIdleTasks (default) tasks:prvCreateIdleTasks (default)
tasks: vTaskStartScheduler (default) tasks:vTaskStartScheduler (default)
tasks: vTaskEndScheduler (default) tasks:vTaskEndScheduler (default)
tasks: vTaskSuspendAll (default) tasks:vTaskSuspendAll (default)
#Todo: prvGetExpectedIdleTime #Todo:prvGetExpectedIdleTime
tasks: xTaskResumeAll (default) tasks:xTaskResumeAll (default)
tasks: uxTaskGetNumberOfTasks (default) tasks:uxTaskGetNumberOfTasks (default)
tasks: pcTaskGetName (default) tasks:pcTaskGetName (default)
tasks: prvSearchForNameWithinSingleList (default) tasks:prvSearchForNameWithinSingleList (default)
tasks: xTaskGetHandle (default) tasks:xTaskGetHandle (default)
if FREERTOS_USE_TRACE_FACILITY = y: if FREERTOS_USE_TRACE_FACILITY = y:
tasks: uxTaskGetSystemState (default) tasks:uxTaskGetSystemState (default)
tasks: uxTaskGetTaskNumber (default) tasks:uxTaskGetTaskNumber (default)
tasks: vTaskSetTaskNumber (default) tasks:vTaskSetTaskNumber (default)
tasks: vTaskGetInfo (default) tasks:vTaskGetInfo (default)
tasks: prvListTasksWithinSingleList (default) tasks:prvListTasksWithinSingleList (default)
tasks: prvTaskCheckFreeStackSpace (default) tasks:prvTaskCheckFreeStackSpace (default)
tasks: xTaskGetIdleTaskHandle (default) tasks:xTaskGetIdleTaskHandle (default)
tasks: xTaskAbortDelay (default) tasks:xTaskAbortDelay (default)
tasks: vTaskPlaceOnEventList (default) tasks:vTaskPlaceOnEventList (default)
tasks: vTaskRemoveFromUnorderedEventList (default) tasks:vTaskRemoveFromUnorderedEventList (default)
tasks: vTaskPlaceOnEventListRestricted (default) tasks:vTaskPlaceOnEventListRestricted (default)
tasks: vTaskSetTimeOutState (default) tasks:vTaskSetTimeOutState (default)
tasks: vTaskInternalSetTimeOutState (default) tasks:vTaskInternalSetTimeOutState (default)
tasks: xTaskCheckForTimeOut (default) tasks:xTaskCheckForTimeOut (default)
tasks: vTaskMissedYield (default) tasks:vTaskMissedYield (default)
tasks: prvIdleTask (default) tasks:prvIdleTask (default)
if FREERTOS_THREAD_LOCAL_STORAGE_POINTERS > 0: if FREERTOS_THREAD_LOCAL_STORAGE_POINTERS > 0:
tasks: vTaskSetThreadLocalStoragePointer (default) tasks:vTaskSetThreadLocalStoragePointer (default)
tasks: pvTaskGetThreadLocalStoragePointer (default) tasks:pvTaskGetThreadLocalStoragePointer (default)
tasks: prvInitialiseTaskLists (default) tasks:prvInitialiseTaskLists (default)
tasks: prvCheckTasksWaitingTermination (default) tasks:prvCheckTasksWaitingTermination (default)
tasks: uxTaskGetStackHighWaterMark (default) tasks:uxTaskGetStackHighWaterMark (default)
tasks: prvDeleteTCB (default) tasks:prvDeleteTCB (default)
if FREERTOS_USE_STATS_FORMATTING_FUNCTIONS = y: if FREERTOS_USE_STATS_FORMATTING_FUNCTIONS = y:
tasks: prvWriteNameToBuffer (default) tasks:prvWriteNameToBuffer (default)
tasks: vTaskList (default) tasks:vTaskList (default)
if FREERTOS_GENERATE_RUN_TIME_STATS = y: if FREERTOS_GENERATE_RUN_TIME_STATS = y:
tasks: vTaskGetRunTimeStats (default) tasks:vTaskGetRunTimeStats (default)
tasks: ulTaskGetIdleRunTimeCounter (default) tasks:ulTaskGetIdleRunTimeCounter (default)
tasks: uxTaskResetEventItemValue (default) tasks:uxTaskResetEventItemValue (default)
tasks: pvTaskIncrementMutexHeldCount (default) tasks:pvTaskIncrementMutexHeldCount (default)
tasks: ulTaskGenericNotifyTake (default) tasks:ulTaskGenericNotifyTake (default)
tasks: xTaskGenericNotifyWait (default) tasks:xTaskGenericNotifyWait (default)
tasks: xTaskGenericNotify (default) tasks:xTaskGenericNotify (default)
tasks: xTaskGenericNotifyStateClear (default) tasks:xTaskGenericNotifyStateClear (default)
tasks: ulTaskGenericNotifyValueClear (default) tasks:ulTaskGenericNotifyValueClear (default)
# port # --------------------------------------------------------------------------------------------------------------
port: pxPortInitialiseStack (default)
port: xPortStartScheduler (default)
# timers.c # timers.c
timers: xTimerCreateTimerTask (default) # - Only timer function called from ISR is xTimerGenericCommandFromISR() and its dependents
timers: xTimerCreate (default) # --------------------------------------------------------------------------------------------------------------
timers: xTimerCreateStatic (default) timers:xTimerCreateTimerTask (default)
timers: prvInitialiseNewTimer (default) timers:xTimerCreate (default)
timers: xTimerGenericCommandFromTask (default) timers:xTimerCreateStatic (default)
timers: xTimerGetTimerDaemonTaskHandle (default) timers:prvInitialiseNewTimer (default)
timers: xTimerGetPeriod (default) timers:xTimerGenericCommandFromTask (default)
timers: vTimerSetReloadMode (default) timers:xTimerGetTimerDaemonTaskHandle (default)
timers: uxTimerGetReloadMode (default) timers:xTimerGetPeriod (default)
timers: xTimerGetExpiryTime (default) timers:vTimerSetReloadMode (default)
timers: pcTimerGetName (default) timers:uxTimerGetReloadMode (default)
timers: prvProcessExpiredTimer (default) timers:xTimerGetExpiryTime (default)
timers: prvTimerTask (default) timers:pcTimerGetName (default)
timers: prvProcessTimerOrBlockTask (default) timers:prvProcessExpiredTimer (default)
timers: prvGetNextExpireTime (default) timers:prvTimerTask (default)
timers: prvSampleTimeNow (default) timers:prvProcessTimerOrBlockTask (default)
timers: prvInsertTimerInActiveList (default) timers:prvGetNextExpireTime (default)
timers: prvProcessReceivedCommands (default) timers:prvSampleTimeNow (default)
timers: prvSwitchTimerLists (default) timers:prvInsertTimerInActiveList (default)
timers: prvCheckForValidListAndQueue (default) timers:prvProcessReceivedCommands (default)
timers: xTimerIsTimerActive (default) timers:prvSwitchTimerLists (default)
timers: pvTimerGetTimerID (default) timers:prvCheckForValidListAndQueue (default)
timers: vTimerSetTimerID (default) timers:xTimerIsTimerActive (default)
timers: xTimerPendFunctionCall (default) timers:pvTimerGetTimerID (default)
timers:vTimerSetTimerID (default)
timers:xTimerPendFunctionCall (default)
if FREERTOS_USE_TRACE_FACILITY = y: if FREERTOS_USE_TRACE_FACILITY = y:
timers: uxTimerGetTimerNumber (default) timers:uxTimerGetTimerNumber (default)
timers: vTimerSetTimerNumber (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:vPortSetupTimer (default)
port:xPortStartScheduler (default)
port:vPortEndScheduler (default)
port:pvPortMalloc (default)
port:vPortFree (default)
port:vPortInitialiseBlocks (default)
port:xPortGetFreeHeapSize (default)
if FREERTOS_TASK_FUNCTION_WRAPPER = y:
port:vPortTaskWrapper (default)
port:pxPortInitialiseStack (default)
if FREERTOS_UNICORE = n:
port:vPortCleanUpCoprocArea (default)
if FREERTOS_TLSP_DELETION_CALLBACKS = y:
port:vPortTLSPointersDelCb (default)
port:vPortCleanUpTCB (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:vPortSetupTimer (default)
port:xPortStartScheduler (default)
port:vPortEndScheduler (default)
port:pvPortMalloc (default)
port:vPortFree (default)
port:vPortInitialiseBlocks (default)
port:xPortGetFreeHeapSize (default)
if FREERTOS_TASK_FUNCTION_WRAPPER = y:
port:vPortTaskWrapper (default)
port:pxPortInitialiseStack (default)
if FREERTOS_TLSP_DELETION_CALLBACKS = y:
port:vPortTLSPointersDelCb (default)
port:vPortCleanUpTCB (default)