I am using a EK-TM4C123GXL
I currently have a project which is running a small 1.8" LCD display and SD card together, using FreeRTOS. The project (including the FatFS library) comes in at almost 15,000 lines of code. Which is proving difficult because as I slowly add functionality I keep getting errors like this:
error #10099-D: program will not fit into available memory. run placement with alignment fails for section "BSS_GROUP" size 0x222 . Available memory ranges: SRAM size: 0x8000 unused: 0x1ff max hole: 0x1ff "../freertos_demo_ccs.cmd", line 67: error #10099-D: program will not fit into available memory. run placement with alignment fails for section ".stack" size 0x200 . Available memory ranges: SRAM size: 0x8000 unused: 0x1ff max hole: 0x1ff error #10010: errors encountered during linking; "freertos_demo.out" not built
I have:
- Reduced my globals to just FreeRTOS queues/semaphores and a few FatFS structures.
- Declared as many arrays as const as possible.
- Reduced as many types as possible (e.g. int -> uint8_t )
What else can i do to reduce my SRAM usage, or if possible, see what is taking up so much?
Edit: Here is the output of the .map file just before I try to add some functionality( before it fails)
****************************************************************************** TI ARM Linker PC v5.2.2 ****************************************************************************** >> Linked Mon Apr 13 22:53:40 2015 OUTPUT FILE NAME: <freertos_demo.out> ENTRY POINT SYMBOL: "_c_int00" address: 000037b1 MEMORY CONFIGURATION name origin length used unused attr fill ---------------------- -------- --------- -------- -------- ---- -------- FLASH 00000000 00040000 000048e0 0003b720 R X SRAM 20000000 00008000 00007ff1 0000000f RW X SEGMENT ALLOCATION MAP run origin load origin length init length attrs members ---------- ----------- ---------- ----------- ----- ------- 00000000 00000000 000048e8 000048e8 r-x 00000000 00000000 0000026c 0000026c r-- .intvecs 0000026c 0000026c 00003d10 00003d10 r-x .text 00003f80 00003f80 0000083c 0000083c r-- .const 000047c0 000047c0 00000128 00000128 r-- .cinit 20000000 20000000 00007ff4 00000000 rw- 20000000 20000000 00007bd5 00000000 rw- .data 20007bd8 20007bd8 0000021c 00000000 rw- .bss 20007df4 20007df4 00000200 00000000 rw- .stack SECTION ALLOCATION MAP output attributes/ section page origin length input sections -------- ---- ---------- ---------- ---------------- .intvecs 0 00000000 0000026c 00000000 0000026c startup_ccs.obj (.intvecs) .text 0 0000026c 00003d10 0000026c 000005bc freertos_demo.obj (.text:main) 00000828 000002e4 rtsv7M4_T_le_v4SPD16_eabi.lib : fmod.obj (.text) 00000b0c 00000290 : xsin.obj (.text) 00000d9c 0000024d ustdlib.obj (.text:uvsnprintf) 00000fe9 00000001 --HOLE-- [fill = 0] 00000fea 00000002 startup_ccs.obj (.text:FaultISR) 00000fec 0000024c screen_task.obj (.text:ScreenTask$8) 00001238 0000024c graphics.obj (.text:drawString) 00001484 000001fe uartstdio.obj (.text:UARTprintf) 00001682 000001b6 rtsv7M4_T_le_v4SPD16_eabi.lib : fd_add_t2.obj (.text) 00001838 0000019c switch_task.obj (.text:SwitchTask$10) 000019d4 00000144 tasks.obj (.text:xTaskGenericCreate) 00001b18 00000136 rtsv7M4_T_le_v4SPD16_eabi.lib : fd_div_t2.obj (.text) 00001c4e 00000002 startup_ccs.obj (.text:IntDefaultHandler) 00001c50 00000134 spi_task.obj (.text:SPITask$9) 00001d84 00000130 screen_task.obj (.text:drawDials) 00001eb4 00000118 queue.obj (.text:xQueueGenericReceive) 00001fcc 00000114 tasks.obj (.text:xTaskIncrementTick) 000020e0 00000110 led_task.obj (.text:LEDTask$5) 000021f0 00000110 screen_task.obj (.text:drawDialCircle) 00002300 00000100 queue.obj (.text:xQueueGenericSend) 00002400 000000fc screen_task.obj (.text:drawDialLine) 000024fc 000000fc tiva.obj (.text:initTivaForLCD) 000025f8 000000fc rtsv7M4_T_le_v4SPD16_eabi.lib : fd_mul_t2.obj (.text) 000026f4 000000e4 queue.obj (.text:prvUnlockQueue$15) 000027d8 000000e0 screen_task.obj (.text:drawDigital) 000028b8 000000d8 graphics.obj (.text:errorScreen) 00002990 000000d0 tasks.obj (.text:xTaskResumeAll) 00002a60 000000c8 heap_2.obj (.text:pvPortMalloc) 00002b28 000000c0 rgb.obj (.text:RGBEnable) 00002be8 000000be rtsv7M4_T_le_v4SPD16_eabi.lib : xdnorm.obj (.text) 00002ca6 00000002 startup_ccs.obj (.text:NmiSR) 00002ca8 000000a8 tasks.obj (.text:vTaskSwitchContext) 00002d50 000000a6 portasm.obj (.text) 00002df6 00000002 rtsv7M4_T_le_v4SPD16_eabi.lib : _lock.obj (.text) 00002df8 000000a4 tasks.obj (.text:vTaskPriorityInherit) 00002e9c 000000a2 graphics.obj (.text:drawLine) 00002f3e 0000009c rtsv7M4_T_le_v4SPD16_eabi.lib : memcpy_t2.obj (.text) 00002fda 00000002 freertos_demo.obj (.text:vApplicationStackOverflowHook) 00002fdc 00000098 queue.obj (.text:prvCopyDataToQueue$15) 00003074 0000008c rgb.obj (.text:RGBColorSet) 00003100 0000008c tasks.obj (.text:prvIdleTask$16) 0000318c 00000086 rtsv7M4_T_le_v4SPD16_eabi.lib : fd_cmp_t2.obj (.text:__aeabi_cdcmple) 00003212 0000007e queue.obj (.text:xQueueGenericCreate) 00003290 0000007c spi_task.obj (.text:placeInQueue) 0000330c 0000007a rtsv7M4_T_le_v4SPD16_eabi.lib : memset_t2.obj (.text) 00003386 00000002 --HOLE-- [fill = 0] 00003388 00000070 tasks.obj (.text:xTaskRemoveFromEventList) 000033f8 0000006c rtsv7M4_T_le_v4SPD16_eabi.lib : autoinit.obj (.text) 00003464 0000006a : copy_decompress_rle.obj (.text) 000034ce 00000002 --HOLE-- [fill = 0] 000034d0 00000068 rgb.obj (.text:RGBDisable) 00003538 00000068 tiva.obj (.text:writeData) 000035a0 00000060 tasks.obj (.text:vTaskDelayUntil) 00003600 00000058 graphics.obj (.text:clearScreen) 00003658 00000058 tasks.obj (.text:vTaskPlaceOnEventList) 000036b0 00000058 tasks.obj (.text:xTaskCheckForTimeOut) 00003708 00000054 lcd.obj (.text:gammaAdjustmentST7735) 0000375c 00000054 queue.obj (.text:xQueueCreateMutex) 000037b0 00000050 rtsv7M4_T_le_v4SPD16_eabi.lib : boot.obj (.text) 00003800 00000050 tiva.obj (.text:writeCommand) 00003850 0000004e lcd.obj (.text:setArea) 0000389e 00000002 --HOLE-- [fill = 0] 000038a0 0000004c screen_task.obj (.text:drawDigitalValue) 000038ec 0000004c tasks.obj (.text:prvAddCurrentTaskToDelayedList$16) 00003938 0000004c rtsv7M4_T_le_v4SPD16_eabi.lib : cpy_tbl.obj (.text) 00003984 0000004c port.obj (.text:xPortStartScheduler) 000039d0 00000048 rtsv7M4_T_le_v4SPD16_eabi.lib : fd_toi_t2.obj (.text) 00003a18 00000048 heap_2.obj (.text:vPortFree) 00003a60 00000044 rtsv7M4_T_le_v4SPD16_eabi.lib : exit.obj (.text) 00003aa4 00000044 : feraiseexcept.obj (.text) 00003ae8 00000042 : u_divt2.obj (.text) 00003b2a 00000040 screen_task.obj (.text:performAction) 00003b6a 00000002 --HOLE-- [fill = 0] 00003b6c 0000003d spi_task.obj (.text:screenHandler) 00003ba9 00000003 --HOLE-- [fill = 0] 00003bac 0000003c rtsv7M4_T_le_v4SPD16_eabi.lib : signal.obj (.text) 00003be8 0000003c lcd.obj (.text:setOrientation) 00003c24 0000003a tasks.obj (.text:prvInitialiseTCBVariables$16) 00003c5e 0000003a list.obj (.text:vListInsert) 00003c98 00000038 uartstdio.obj (.text:UARTwrite) 00003cd0 00000036 graphics.obj (.text:drawRect) 00003d06 0000002e rtsv7M4_T_le_v4SPD16_eabi.lib : i_tofd_t2.obj (.text) 00003d34 00000028 ustdlib.obj (.text:ustrncpy) 00003d5c 00000024 graphics.obj (.text:drawPixel) 00003d80 00000024 queue.obj (.text:prvCopyDataFromQueue$15) 00003da4 00000024 list.obj (.text:uxListRemove) 00003dc8 00000022 port.obj (.text:pxPortInitialiseStack) 00003dea 00000020 rtsv7M4_T_le_v4SPD16_eabi.lib : u_tofd_t2.obj (.text) 00003e0a 00000002 --HOLE-- [fill = 0] 00003e0c 0000001c port.obj (.text:xPortSysTickHandler) 00003e28 0000001a ustdlib.obj (.text:usnprintf) 00003e42 0000001a screen_task.obj (.text:writeOption) 00003e5c 00000018 rtsv7M4_T_le_v4SPD16_eabi.lib : args_main.obj (.text) 00003e74 00000018 list.obj (.text:vListInsertEnd) 00003e8c 00000018 tasks.obj (.text:xTaskGetTickCount) 00003ea4 00000016 list.obj (.text:vListInitialise) 00003eba 00000002 --HOLE-- [fill = 0] 00003ebc 00000014 rgb.obj (.text:RGBIntensitySet) 00003ed0 00000014 lcd.obj (.text:getScreenWidth) 00003ee4 00000014 rtsv7M4_T_le_v4SPD16_eabi.lib : xferaise.obj (.text) 00003ef8 00000014 port.obj (.text:vPortEnterCritical) 00003f0c 00000014 port.obj (.text:vPortExitCritical) 00003f20 00000010 graphics.obj (.text:setColor) 00003f30 00000010 port.obj (.text:vPortYield) 00003f40 0000000e rtsv7M4_T_le_v4SPD16_eabi.lib : copy_decompress_none.obj (.text:decompress:none) 00003f4e 0000000c : copy_zero_init.obj (.text:decompress:ZI) 00003f5a 0000000c graphics.obj (.text:drawFastVLine) 00003f66 00000006 startup_ccs.obj (.text:ResetISR) 00003f6c 00000006 driverlib.lib : uart.obj (.text:UARTClockSourceSet) 00003f72 00000006 rtsv7M4_T_le_v4SPD16_eabi.lib : copy_decompress_rle.obj (.text:decompress:rle24) 00003f78 00000004 : pre_init.obj (.text) .const 0 00003f80 0000083c 00003f80 00000654 graphics.obj (.const) 000045d4 0000013a <whole-program> (.const:.string) 0000470e 00000002 --HOLE-- [fill = 0] 00004710 00000060 rtsv7M4_T_le_v4SPD16_eabi.lib : xsin.obj (.const) 00004770 00000020 lcd.obj (.const) 00004790 00000018 uartstdio.obj (.const) 000047a8 00000014 tasks.obj (.const:.string) .cinit 0 000047c0 00000128 000047c0 00000101 (.cinit..data.load) [load image, compression = rle] 000048c1 00000003 --HOLE-- [fill = 0] 000048c4 0000000c (__TI_handler_table) 000048d0 00000008 (.cinit..bss.load) [load image, compression = zero_init] 000048d8 00000010 (__TI_cinit_table) .init_array * 0 00000000 00000000 UNINITIALIZED .data 0 20000000 00007bd5 UNINITIALIZED 20000000 00007548 heap_2.obj (.data) 20007548 00000328 spi_task.obj (.data) 20007870 000001d4 tasks.obj (.data) 20007a44 000000b0 rtsv7M4_T_le_v4SPD16_eabi.lib : signal.obj (.data:sigtable$39) 20007af4 00000004 buttons.obj (.data) 20007af8 00000080 rtsv7M4_T_le_v4SPD16_eabi.lib : xvalues.obj (.data) 20007b78 00000014 led_task.obj (.data) 20007b8c 00000014 rgb.obj (.data) 20007ba0 00000008 graphics.obj (.data) 20007ba8 00000008 rtsv7M4_T_le_v4SPD16_eabi.lib : _lock.obj (.data) 20007bb0 00000008 : exit.obj (.data) 20007bb8 00000008 : feraiseexcept.obj (.data) 20007bc0 00000008 uartstdio.obj (.data) 20007bc8 00000004 port.obj (.data) 20007bcc 00000004 rtsv7M4_T_le_v4SPD16_eabi.lib : errno.obj (.data) 20007bd0 00000004 : stkdepth_vars.obj (.data) 20007bd4 00000001 lcd.obj (.data) .bss 0 20007bd8 0000021c UNINITIALIZED 20007bd8 00000208 ff.obj (.bss) 20007de0 00000008 freertos_demo.obj (.bss) 20007de8 00000004 (.common:g_pScreenButtonQueue) 20007dec 00000004 (.common:pxDelayedTaskList$16) 20007df0 00000004 (.common:pxOverflowDelayedTaskList$16) .TI.persistent * 0 20000000 00000000 UNINITIALIZED .TI.noinit * 0 20007bd8 00000000 UNINITIALIZED .stack 0 20007df4 00000200 UNINITIALIZED 20007df4 00000200 --HOLE-- LINKER GENERATED COPY TABLES __TI_cinit_table @ 000048d8 records: 2, size/record: 8, table size: 16 .data: load addr=000047c0, load size=00000101 bytes, run addr=20000000, run size=00007bd5 bytes, compression=rle .bss: load addr=000048d0, load size=00000008 bytes, run addr=20007bd8, run size=0000021c bytes, compression=zero_init LINKER GENERATED HANDLER TABLE __TI_handler_table @ 000048c4 records: 3, size/record: 4, table size: 12 index: 0, handler: __TI_decompress_rle24 index: 1, handler: __TI_decompress_none index: 2, handler: __TI_zero_init GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name address name ------- ---- 00003a61 C$$EXIT 00003075 RGBColorSet 000034d1 RGBDisable 00002b29 RGBEnable 00003ebd RGBIntensitySet 00003f67 ResetISR UNDEFED SHT$$INIT_ARRAY$$Base UNDEFED SHT$$INIT_ARRAY$$Limit 00003f6d UARTClockSourceSet 00001485 UARTprintf 00003c99 UARTwrite 20007af8 _Denorm 00002be9 _Dnorm 20007b08 _Eps 20007bcc _Errno 20007bb8 _Fenv 00003ee5 _Feraise 20007b18 _Hugeval 20007b68 _Inf 20007b48 _Nan 20007b58 _Rteps 00000b0d _Sin 20007b28 _Snan 20007bbc _Tls_setup__Fenv 20007b38 _Xbig 20007b40 _Zero 20007ff4 __STACK_END 00000200 __STACK_SIZE 20007ff4 __STACK_TOP 000048d8 __TI_CINIT_Base 000048e8 __TI_CINIT_Limit 000048c4 __TI_Handler_Table_Base 000048d0 __TI_Handler_Table_Limit 000033f9 __TI_auto_init 20007bb0 __TI_cleanup_ptr 00003f41 __TI_decompress_none 00003f73 __TI_decompress_rle24 20007bb4 __TI_dtors_ptr 00000000 __TI_static_base__ 00003f4f __TI_zero_init 0000318d __aeabi_cdcmpeq 0000318d __aeabi_cdcmple 000039d1 __aeabi_d2iz 0000168d __aeabi_dadd 00001b19 __aeabi_ddiv 000025f9 __aeabi_dmul 00001683 __aeabi_dsub 00003d07 __aeabi_i2d 0000330d __aeabi_memclr 0000330d __aeabi_memclr4 0000330d __aeabi_memclr8 00002f3f __aeabi_memcpy 00002f3f __aeabi_memcpy4 00002f3f __aeabi_memcpy8 0000330f __aeabi_memset 0000330f __aeabi_memset4 0000330f __aeabi_memset8 00003deb __aeabi_ui2d 00003ae9 __aeabi_uidiv 00003ae9 __aeabi_uidivmod ffffffff __binit__ ffffffff __c_args__ 20007df4 __stack 00003e5d _args_main 000037b1 _c_int00 20007ba8 _lock 00002df7 _nop 20007bd4 _orientation 00003f79 _system_pre_init 20007bac _unlock 00003a65 abort 20007ba6 bgColorHighByte 20007ba4 bgColorLowByte ffffffff binit 00003601 clearScreen 20007ba2 colorHighByte 20007ba0 colorLowByte 00003939 copy_in 000021f1 drawDialCircle 00002401 drawDialLine 00001d85 drawDials 000027d9 drawDigital 000038a1 drawDigitalValue 00003f5b drawFastVLine 00002e9d drawLine 00003d5d drawPixel 00003cd1 drawRect 00001239 drawString 000028b9 errorScreen 00003a6d exit 00003aa5 feraiseexcept 00000829 fmod 00003f80 font_5x7 00004160 font_8x12 2000754c g_pDataQueue 20007b7c g_pLEDQueue 20007de4 g_pSPISemaphore 20007de8 g_pScreenButtonQueue 20007de0 g_pUARTSemaphore 00000000 g_pfnVectors 2000759c g_psFResultStrings 00003709 gammaAdjustmentST7735 00003ed1 getScreenWidth 000024fd initTivaForLCD 0000026d main 20007bd0 main_func_sp 00002f3f memcpy 00003315 memset 00003b2b performAction 00003291 placeInQueue 00002a61 pvPortMalloc 20007870 pxCurrentTCB 00003dc9 pxPortInitialiseStack 00003b6d screenHandler 00003851 setArea 00003f21 setColor 00003be9 setOrientation 00003bad signal 00003e29 usnprintf 00003d35 ustrncpy 00000d9d uvsnprintf 00003da5 uxListRemove 00002fdb vApplicationStackOverflowHook 00003ea5 vListInitialise 00003c5f vListInsert 00003e75 vListInsertEnd 00002dad vPortClearInterruptMask 00002de5 vPortEnableVFP 00003ef9 vPortEnterCritical 00003f0d vPortExitCritical 00003a19 vPortFree 00002db7 vPortSVCHandler 00002da3 vPortSetInterruptMask 00002dd1 vPortStartFirstTask 00003f31 vPortYield 000035a1 vTaskDelayUntil 00003659 vTaskPlaceOnEventList 00002df9 vTaskPriorityInherit 00002ca9 vTaskSwitchContext 00003801 writeCommand 00003539 writeData 00003e43 writeOption 00002d55 xPortPendSVHandler 00003985 xPortStartScheduler 00003e0d xPortSysTickHandler 0000375d xQueueCreateMutex 00003213 xQueueGenericCreate 00001eb5 xQueueGenericReceive 00002301 xQueueGenericSend 000036b1 xTaskCheckForTimeOut 000019d5 xTaskGenericCreate 00003e8d xTaskGetTickCount 00001fcd xTaskIncrementTick 00003389 xTaskRemoveFromEventList 00002991 xTaskResumeAll GLOBAL SYMBOLS: SORTED BY Symbol Address address name ------- ---- 00000000 __TI_static_base__ 00000000 g_pfnVectors 00000200 __STACK_SIZE 0000026d main 00000829 fmod 00000b0d _Sin 00000d9d uvsnprintf 00001239 drawString 00001485 UARTprintf 00001683 __aeabi_dsub 0000168d __aeabi_dadd 000019d5 xTaskGenericCreate 00001b19 __aeabi_ddiv 00001d85 drawDials 00001eb5 xQueueGenericReceive 00001fcd xTaskIncrementTick 000021f1 drawDialCircle 00002301 xQueueGenericSend 00002401 drawDialLine 000024fd initTivaForLCD 000025f9 __aeabi_dmul 000027d9 drawDigital 000028b9 errorScreen 00002991 xTaskResumeAll 00002a61 pvPortMalloc 00002b29 RGBEnable 00002be9 _Dnorm 00002ca9 vTaskSwitchContext 00002d55 xPortPendSVHandler 00002da3 vPortSetInterruptMask 00002dad vPortClearInterruptMask 00002db7 vPortSVCHandler 00002dd1 vPortStartFirstTask 00002de5 vPortEnableVFP 00002df7 _nop 00002df9 vTaskPriorityInherit 00002e9d drawLine 00002f3f __aeabi_memcpy 00002f3f __aeabi_memcpy4 00002f3f __aeabi_memcpy8 00002f3f memcpy 00002fdb vApplicationStackOverflowHook 00003075 RGBColorSet 0000318d __aeabi_cdcmpeq 0000318d __aeabi_cdcmple 00003213 xQueueGenericCreate 00003291 placeInQueue 0000330d __aeabi_memclr 0000330d __aeabi_memclr4 0000330d __aeabi_memclr8 0000330f __aeabi_memset 0000330f __aeabi_memset4 0000330f __aeabi_memset8 00003315 memset 00003389 xTaskRemoveFromEventList 000033f9 __TI_auto_init 000034d1 RGBDisable 00003539 writeData 000035a1 vTaskDelayUntil 00003601 clearScreen 00003659 vTaskPlaceOnEventList 000036b1 xTaskCheckForTimeOut 00003709 gammaAdjustmentST7735 0000375d xQueueCreateMutex 000037b1 _c_int00 00003801 writeCommand 00003851 setArea 000038a1 drawDigitalValue 00003939 copy_in 00003985 xPortStartScheduler 000039d1 __aeabi_d2iz 00003a19 vPortFree 00003a61 C$$EXIT 00003a65 abort 00003a6d exit 00003aa5 feraiseexcept 00003ae9 __aeabi_uidiv 00003ae9 __aeabi_uidivmod 00003b2b performAction 00003b6d screenHandler 00003bad signal 00003be9 setOrientation 00003c5f vListInsert 00003c99 UARTwrite 00003cd1 drawRect 00003d07 __aeabi_i2d 00003d35 ustrncpy 00003d5d drawPixel 00003da5 uxListRemove 00003dc9 pxPortInitialiseStack 00003deb __aeabi_ui2d 00003e0d xPortSysTickHandler 00003e29 usnprintf 00003e43 writeOption 00003e5d _args_main 00003e75 vListInsertEnd 00003e8d xTaskGetTickCount 00003ea5 vListInitialise 00003ebd RGBIntensitySet 00003ed1 getScreenWidth 00003ee5 _Feraise 00003ef9 vPortEnterCritical 00003f0d vPortExitCritical 00003f21 setColor 00003f31 vPortYield 00003f41 __TI_decompress_none 00003f4f __TI_zero_init 00003f5b drawFastVLine 00003f67 ResetISR 00003f6d UARTClockSourceSet 00003f73 __TI_decompress_rle24 00003f79 _system_pre_init 00003f80 font_5x7 00004160 font_8x12 000048c4 __TI_Handler_Table_Base 000048d0 __TI_Handler_Table_Limit 000048d8 __TI_CINIT_Base 000048e8 __TI_CINIT_Limit 2000754c g_pDataQueue 2000759c g_psFResultStrings 20007870 pxCurrentTCB 20007af8 _Denorm 20007b08 _Eps 20007b18 _Hugeval 20007b28 _Snan 20007b38 _Xbig 20007b40 _Zero 20007b48 _Nan 20007b58 _Rteps 20007b68 _Inf 20007b7c g_pLEDQueue 20007ba0 colorLowByte 20007ba2 colorHighByte 20007ba4 bgColorLowByte 20007ba6 bgColorHighByte 20007ba8 _lock 20007bac _unlock 20007bb0 __TI_cleanup_ptr 20007bb4 __TI_dtors_ptr 20007bb8 _Fenv 20007bbc _Tls_setup__Fenv 20007bcc _Errno 20007bd0 main_func_sp 20007bd4 _orientation 20007de0 g_pUARTSemaphore 20007de4 g_pSPISemaphore 20007de8 g_pScreenButtonQueue 20007df4 __stack 20007ff4 __STACK_END 20007ff4 __STACK_TOP ffffffff __binit__ ffffffff __c_args__ ffffffff binit UNDEFED SHT$$INIT_ARRAY$$Base UNDEFED SHT$$INIT_ARRAY$$Limit [155 symbols]