]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso/NonSecure/FreeRTOSDemo_ns.ld
Add ARMv8M demo project for NXP LPC55S69.
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso / Projects / MCUXpresso / NonSecure / FreeRTOSDemo_ns.ld
diff --git a/FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso/NonSecure/FreeRTOSDemo_ns.ld b/FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso/NonSecure/FreeRTOSDemo_ns.ld
new file mode 100644 (file)
index 0000000..ac89d11
--- /dev/null
@@ -0,0 +1,201 @@
+GROUP (\r
+    "libgcc.a"\r
+    "libc_nano.a"\r
+    "libm.a"\r
+    "libcr_newlib_semihost.a"\r
+)\r
+\r
+MEMORY\r
+{\r
+    /* Define each memory region. */\r
+    PROGRAM_FLASH (rx)  : ORIGIN = 0x00010000, LENGTH = 0x72000 /* 456K bytes (alias Flash). */\r
+    Ram0 (rwx)          : ORIGIN = 0x20008000, LENGTH = 0x2b000 /* 172K bytes (alias RAM). */\r
+}\r
+\r
+/* Define a symbol for the top of each memory region. */\r
+__base_PROGRAM_FLASH  = 0x00010000;             /* PROGRAM_FLASH. */\r
+__base_Flash          = 0x00010000;             /* Flash. */\r
+__top_PROGRAM_FLASH   = 0x00010000 + 0x72000;   /* 456K bytes. */\r
+__top_Flash           = 0x00010000 + 0x72000;   /* 456K bytes. */\r
+\r
+__base_Ram0           = 0x20008000;             /* Ram0. */\r
+__base_RAM            = 0x20008000;             /* RAM. */\r
+__top_Ram0            = 0x20008000 + 0x2b000;   /* 172K bytes. */\r
+__top_RAM             = 0x20008000 + 0x2b000;   /* 172K bytes. */\r
+\r
+/* Entry point. */\r
+ENTRY(ResetISR)\r
+\r
+SECTIONS\r
+{\r
+    /* Vector Table Section. */\r
+    .text : ALIGN(4)\r
+    {\r
+        FILL(0xff)\r
+        __vectors_start__ = ABSOLUTE(.);\r
+        KEEP(*(.isr_vector))\r
+\r
+        /* Global Section Table. */\r
+        . = ALIGN(4);\r
+        __section_table_start = .;\r
+\r
+        __data_section_table = .;\r
+        LONG(LOADADDR(.data));\r
+        LONG(    ADDR(.data));\r
+        LONG(  SIZEOF(.data));\r
+        __data_section_table_end = .;\r
+\r
+        __bss_section_table = .;\r
+        LONG(    ADDR(.bss));\r
+        LONG(  SIZEOF(.bss));\r
+        __bss_section_table_end = .;\r
+\r
+        __section_table_end = .;\r
+        /* End of Global Section Table. */\r
+\r
+        *(.after_vectors*)\r
+    } > PROGRAM_FLASH\r
+\r
+    /* Privileged functions - Section needs to be 32 byte aligned to satisfy MPU requirements. */\r
+    .privileged_functions : ALIGN(32)\r
+    {\r
+        . = ALIGN(32);\r
+        __privileged_functions_start__ = .;\r
+        *(privileged_functions)\r
+        . = ALIGN(32);\r
+        /* End address must be the last address in the region, therefore, -1. */\r
+        __privileged_functions_end__ = . - 1;\r
+    } > PROGRAM_FLASH\r
+\r
+    /* FreeRTOS System calls - Section needs to be 32 byte aligned to satisfy MPU requirements. */\r
+    .freertos_system_calls : ALIGN(32)\r
+    {\r
+        . = ALIGN(32);\r
+        __syscalls_flash_start__ = .;\r
+        *(freertos_system_calls)\r
+        . = ALIGN(32);\r
+        /* End address must be the last address in the region, therefore, -1. */\r
+        __syscalls_flash_end__ = . - 1;\r
+    } > PROGRAM_FLASH\r
+\r
+    /* Main Text Section - Section needs to be 32 byte aligned to satisfy MPU requirements. */\r
+    .text : ALIGN(32)\r
+    {\r
+        . = ALIGN(32);\r
+        __unprivileged_flash_start__ = .;\r
+        *(.text*)\r
+        *(.rodata .rodata.* .constdata .constdata.*)\r
+        . = ALIGN(32);\r
+        /* End address must be the last address in the region, therefore, -1. */\r
+        __unprivileged_flash_end__ = . - 1;\r
+    } > PROGRAM_FLASH\r
+\r
+    /* For exception handling/unwind - some Newlib functions (in common\r
+     * with C++ and StdC++) use this. */\r
+    .ARM.extab : ALIGN(4)\r
+    {\r
+        *(.ARM.extab* .gnu.linkonce.armextab.*)\r
+    } > PROGRAM_FLASH\r
+\r
+    __exidx_start = .;\r
+    .ARM.exidx : ALIGN(4)\r
+    {\r
+        *(.ARM.exidx* .gnu.linkonce.armexidx.*)\r
+    } > PROGRAM_FLASH\r
+    __exidx_end = .;\r
+\r
+    /* Text Section End. */\r
+    _etext = .;\r
+\r
+    /* Uninit Reserved Section. */\r
+    .uninit_RESERVED : ALIGN(4)\r
+    {\r
+        KEEP(*(.bss.$RESERVED*))\r
+        . = ALIGN(4);\r
+        _end_uninit_RESERVED = .;\r
+    } > Ram0\r
+\r
+    /* Main Data section (Ram0). */\r
+    .data : ALIGN(4)\r
+    {\r
+        FILL(0xff)\r
+        _data = .;\r
+\r
+        /* Privileged data - It needs to be 32 byte aligned to satisfy MPU requirements. */\r
+        . = ALIGN(32);\r
+        __privileged_sram_start__ = .;\r
+        *(privileged_data);\r
+        . = ALIGN(32);\r
+        /* End address must be the last address in the region, therefore, -1. */\r
+        __privileged_sram_end__ = . - 1;\r
+\r
+        *(vtable)\r
+        *(.ramfunc*)\r
+        *(.data*)\r
+        _edata = .;\r
+    } > Ram0 AT>PROGRAM_FLASH\r
+\r
+    /* Main BSS Section. */\r
+    .bss : ALIGN(4)\r
+    {\r
+        _bss = .;\r
+        *(.bss*)\r
+        *(COMMON)\r
+        . = ALIGN(4);\r
+        _ebss = .;\r
+        PROVIDE(end = .);\r
+    } > Ram0\r
+\r
+    /* Default Noinit Section. */\r
+    .noinit (NOLOAD) : ALIGN(4)\r
+    {\r
+        _noinit = .;\r
+        *(.noinit*)\r
+        . = ALIGN(4);\r
+        _end_noinit = .;\r
+    } > Ram0\r
+\r
+    /* Reserve space and place heap in memory map. */\r
+    _HeapSize = 0x1000;\r
+    .heap : ALIGN(4)\r
+    {\r
+        _pvHeapStart = .;\r
+        . += _HeapSize;\r
+        . = ALIGN(4);\r
+        _pvHeapLimit = .;\r
+    } > Ram0\r
+\r
+    /* Reserve space for stack in memory. */\r
+    _StackSize = 0x1000;\r
+    .heap2stackfill :\r
+    {\r
+        . += _StackSize;\r
+    } > Ram0\r
+\r
+    /* Place actual stack in memory map. */\r
+    .stack ORIGIN(Ram0) + LENGTH(Ram0) - _StackSize - 0 :  ALIGN(4)\r
+    {\r
+        _vStackBase = .;\r
+        . = ALIGN(4);\r
+        _vStackTop = . + _StackSize;\r
+    } > Ram0\r
+\r
+    /* Create checksum value (used in startup). */\r
+    PROVIDE(__valid_user_code_checksum = 0 -\r
+                                         (_vStackTop\r
+                                         + (ResetISR + 1)\r
+                                         + (NMI_Handler + 1)\r
+                                         + (HardFault_Handler + 1)\r
+                                         + (( DEFINED(MemManage_Handler) ? MemManage_Handler : 0 ) + 1)   /* MemManage_Handler may not be defined. */\r
+                                         + (( DEFINED(BusFault_Handler) ? BusFault_Handler : 0 ) + 1)     /* BusFault_Handler may not be defined. */\r
+                                         + (( DEFINED(UsageFault_Handler) ? UsageFault_Handler : 0 ) + 1) /* UsageFault_Handler may not be defined. */\r
+                                         ) );\r
+\r
+    /* Provide basic symbols giving location and size of main text block,\r
+     * including initial values of RW data sections. Note that these will need\r
+     * extending to give a complete picture with complex images\r
+     * (e.g multiple Flash banks). */\r
+    _image_start    = LOADADDR(.text);\r
+    _image_end      = LOADADDR(.data) + SIZEOF(.data);\r
+    _image_size     = _image_end - _image_start;\r
+}\r