<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Access peripheral SRAM in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Access-peripheral-SRAM/m-p/520431#M3637</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mburton on Tue Feb 05 04:52:25 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Linas,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes, you can use that RAM for ordinary data storage. You need to do two things:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1 - modify the linker script so that it know about the new ram region.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Below is what I am currently using for a linker script. This is for a LPC1758 which has 2 extra RAM regions. Don't use the whole script just the parts that specify the ram regions. So, from the MEMORY section at the top&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;you need one of those lines (whichever is right for your chip, see datasheet), e.g.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; RAM2(rwx) : ORIGIN = 0x20080000, LENGTH = 16k&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Lower down in the script is a section that says put all stuff in .o files that are destined for section AHB_RAM1 into the region RAM2.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.ahb_ram1 (NOLOAD):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*.o (AHB_RAM1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt;RAM2&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2 - add an attribute that specifies the section the variable resides in to the C variable declaration(s) that you want to go in that region, e.g.:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t some_data __attribute__ ((section ("AHB_RAM1")));&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That's all you have to do. Remember that these variables will not get zeroed like normal C variables do. Also, I don't think they can be initialised in the declaration, you have to initialise them in the code when it runs.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope this is useful.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Mark&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;-----------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Linker script to configure memory regions. */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;MEMORY&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; FLASH (rx)&amp;nbsp; : ORIGIN = 0x00000000, LENGTH = 512K&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; RAM (rwx) : ORIGIN = 0x10000000, LENGTH =&amp;nbsp; 32K&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; RAM1(rwx) : ORIGIN = 0x2007C000, LENGTH = 16k&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; RAM2(rwx) : ORIGIN = 0x20080000, LENGTH = 16k&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Library configurations */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GROUP(libgcc.a libc.a libm.a libnosys.a)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Linker script to place sections and symbol values. Should be used together&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * with other linker script that defines memory regions FLASH and RAM.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * It references following symbols, which must be defined in code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; Reset_Handler : Entry of reset handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * It defines following symbols, which code can use without definition:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __exidx_start&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __exidx_end&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __etext&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __data_start__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __preinit_array_start&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __preinit_array_end&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __init_array_start&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __init_array_end&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __fini_array_start&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __fini_array_end&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __data_end__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __bss_start__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __bss_end__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __end__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; end&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __HeapLimit&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __StackLimit&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __StackTop&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __stack&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ENTRY(__stext)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;SECTIONS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.text :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__stext = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;KEEP(*(.isr_vector))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.text*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;KEEP(*(.init))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;KEEP(*(.fini))&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* .ctors */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*crtbegin.o(.ctors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*crtbegin?.o(.ctors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(SORT(.ctors.*))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.ctors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* .dtors */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *crtbegin.o(.dtors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *crtbegin?.o(.dtors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *(SORT(.dtors.*))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *(.dtors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.rodata*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;KEEP(*(.eh_frame*))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; FLASH&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.ARM.extab : &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.ARM.extab* .gnu.linkonce.armextab.*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; FLASH&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;__exidx_start = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.ARM.exidx :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.ARM.exidx* .gnu.linkonce.armexidx.*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; FLASH&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__exidx_end = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;__etext = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.data : AT (__etext)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__data_start__ = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(vtable)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.data*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;. = ALIGN(4);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* preinit data */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE (__preinit_array_start = .);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.preinit_array)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE (__preinit_array_end = .);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;. = ALIGN(4);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* init data */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE (__init_array_start = .);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(SORT(.init_array.*))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.init_array)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE (__init_array_end = .);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;. = ALIGN(4);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* finit data */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE (__fini_array_start = .);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(SORT(.fini_array.*))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.fini_array)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE (__fini_array_end = .);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;. = ALIGN(4);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* All data end */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__data_end__ = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; RAM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.bss :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__bss_start__ = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.bss*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(COMMON)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__bss_end__ = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; RAM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.ahb_ram0 (NOLOAD):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*.o (AHB_RAM0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt;RAM1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.ahb_ram1 (NOLOAD):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*.o (AHB_RAM1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt;RAM2&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.heap :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__end__ = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;end = __end__;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.heap*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__HeapLimit = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; RAM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* .stack_dummy section doesn't contains any symbols. It is only&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * used for linker to calculate size of stack sections, and assign&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * values to stack symbols later */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.stack_dummy :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.stack)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; RAM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Set stack top to end of RAM, and stack limit move down by&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * size of stack_dummy section */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__StackTop = ORIGIN(RAM) + LENGTH(RAM);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__StackLimit = __StackTop - SIZEOF(.stack_dummy);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE(__stack = __StackTop);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Check if data + heap + stack exceeds RAM limit */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ASSERT(__StackLimit &amp;gt;= __HeapLimit, "region RAM overflowed with stack")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:43:56 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:43:56Z</dc:date>
    <item>
      <title>Access peripheral SRAM</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Access-peripheral-SRAM/m-p/520430#M3636</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Linas on Tue Feb 05 01:13:21 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My LPC1756 has 32 SRAM. 16 KB SRAM is accessible directly. Other 16 is dedicated for peripherals. Is it possible&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;to use this part of SRAM for ordinary data storage? How to access and allocate it in the source code? &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Linas&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:43:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Access-peripheral-SRAM/m-p/520430#M3636</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:43:55Z</dc:date>
    </item>
    <item>
      <title>Re: Access peripheral SRAM</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Access-peripheral-SRAM/m-p/520431#M3637</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mburton on Tue Feb 05 04:52:25 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Linas,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes, you can use that RAM for ordinary data storage. You need to do two things:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1 - modify the linker script so that it know about the new ram region.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Below is what I am currently using for a linker script. This is for a LPC1758 which has 2 extra RAM regions. Don't use the whole script just the parts that specify the ram regions. So, from the MEMORY section at the top&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;you need one of those lines (whichever is right for your chip, see datasheet), e.g.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; RAM2(rwx) : ORIGIN = 0x20080000, LENGTH = 16k&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Lower down in the script is a section that says put all stuff in .o files that are destined for section AHB_RAM1 into the region RAM2.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.ahb_ram1 (NOLOAD):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*.o (AHB_RAM1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt;RAM2&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2 - add an attribute that specifies the section the variable resides in to the C variable declaration(s) that you want to go in that region, e.g.:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t some_data __attribute__ ((section ("AHB_RAM1")));&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That's all you have to do. Remember that these variables will not get zeroed like normal C variables do. Also, I don't think they can be initialised in the declaration, you have to initialise them in the code when it runs.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope this is useful.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Mark&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;-----------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Linker script to configure memory regions. */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;MEMORY&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; FLASH (rx)&amp;nbsp; : ORIGIN = 0x00000000, LENGTH = 512K&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; RAM (rwx) : ORIGIN = 0x10000000, LENGTH =&amp;nbsp; 32K&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; RAM1(rwx) : ORIGIN = 0x2007C000, LENGTH = 16k&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; RAM2(rwx) : ORIGIN = 0x20080000, LENGTH = 16k&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Library configurations */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GROUP(libgcc.a libc.a libm.a libnosys.a)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Linker script to place sections and symbol values. Should be used together&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * with other linker script that defines memory regions FLASH and RAM.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * It references following symbols, which must be defined in code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; Reset_Handler : Entry of reset handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * It defines following symbols, which code can use without definition:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __exidx_start&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __exidx_end&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __etext&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __data_start__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __preinit_array_start&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __preinit_array_end&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __init_array_start&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __init_array_end&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __fini_array_start&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __fini_array_end&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __data_end__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __bss_start__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __bss_end__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __end__&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; end&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __HeapLimit&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __StackLimit&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __StackTop&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *&amp;nbsp;&amp;nbsp; __stack&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ENTRY(__stext)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;SECTIONS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.text :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__stext = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;KEEP(*(.isr_vector))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.text*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;KEEP(*(.init))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;KEEP(*(.fini))&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* .ctors */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*crtbegin.o(.ctors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*crtbegin?.o(.ctors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(SORT(.ctors.*))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.ctors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* .dtors */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *crtbegin.o(.dtors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *crtbegin?.o(.dtors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *(SORT(.dtors.*))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; *(.dtors)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.rodata*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;KEEP(*(.eh_frame*))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; FLASH&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.ARM.extab : &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.ARM.extab* .gnu.linkonce.armextab.*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; FLASH&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;__exidx_start = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.ARM.exidx :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.ARM.exidx* .gnu.linkonce.armexidx.*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; FLASH&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__exidx_end = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;__etext = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.data : AT (__etext)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__data_start__ = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(vtable)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.data*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;. = ALIGN(4);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* preinit data */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE (__preinit_array_start = .);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.preinit_array)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE (__preinit_array_end = .);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;. = ALIGN(4);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* init data */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE (__init_array_start = .);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(SORT(.init_array.*))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.init_array)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE (__init_array_end = .);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;. = ALIGN(4);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* finit data */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE (__fini_array_start = .);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(SORT(.fini_array.*))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.fini_array)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE (__fini_array_end = .);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;. = ALIGN(4);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* All data end */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__data_end__ = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; RAM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.bss :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__bss_start__ = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.bss*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(COMMON)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__bss_end__ = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; RAM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.ahb_ram0 (NOLOAD):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*.o (AHB_RAM0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt;RAM1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.ahb_ram1 (NOLOAD):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*.o (AHB_RAM1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt;RAM2&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.heap :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__end__ = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;end = __end__;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.heap*)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__HeapLimit = .;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; RAM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* .stack_dummy section doesn't contains any symbols. It is only&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * used for linker to calculate size of stack sections, and assign&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * values to stack symbols later */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.stack_dummy :&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*(.stack)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt; RAM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Set stack top to end of RAM, and stack limit move down by&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * size of stack_dummy section */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__StackTop = ORIGIN(RAM) + LENGTH(RAM);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__StackLimit = __StackTop - SIZEOF(.stack_dummy);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PROVIDE(__stack = __StackTop);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Check if data + heap + stack exceeds RAM limit */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ASSERT(__StackLimit &amp;gt;= __HeapLimit, "region RAM overflowed with stack")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:43:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Access-peripheral-SRAM/m-p/520431#M3637</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:43:56Z</dc:date>
    </item>
    <item>
      <title>Re: Access peripheral SRAM</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Access-peripheral-SRAM/m-p/520432#M3638</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mburton on Tue Feb 05 11:10:33 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi, I replied to this hours ago but the reply appears to have got lost. Try again...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Briefly, you need to modify your loader script to define the new RAM regions and then add an attribute to the C declarations you want to reside in that region. The example loader script (attached as a .txt file, should be .ld) is for the lpc1758 which has two extra RAM regions. RAM1 and RAM2 are the memory regions defined with:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; RAM1(rwx) : ORIGIN = 0x2007C000, LENGTH = 16k&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; RAM2(rwx) : ORIGIN = 0x20080000, LENGTH = 16k&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The linker is told to put stuff into those regions with:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;.ahb_ram0 (NOLOAD):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*.o (AHB_RAM0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt;RAM1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.ahb_ram1 (NOLOAD):&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*.o (AHB_RAM1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} &amp;gt;RAM2&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In the C source you need to add an attribute to the variable declaration that tells the linker where the variable is going to reside, like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t myVariableInExtraRam __attribute__ ((section ("AHB_RAM1")));&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You need to initialise the variable in code, it won't get zeroed like normal C externals.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Mark&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:43:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Access-peripheral-SRAM/m-p/520432#M3638</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:43:57Z</dc:date>
    </item>
    <item>
      <title>Re: Access peripheral SRAM</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Access-peripheral-SRAM/m-p/520433#M3639</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Linas on Fri Feb 08 07:44:42 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you for your answer.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:43:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Access-peripheral-SRAM/m-p/520433#M3639</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:43:57Z</dc:date>
    </item>
  </channel>
</rss>

