<?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: Where's the RAM gone? in LPCXpresso IDE</title>
    <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538493#M6045</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by atomicdog on Sat Jul 28 14:17:58 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Were you casting to uint32_t to get ride of a warning?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If so (and what you posted isn't a copy&amp;amp;paste error), your problem is that you're not calling the [I]__get_PSP[/I] function. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You have...&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;__get_PSP;&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt;Should be...&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;__get_PSP();&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 16 Jun 2016 01:43:41 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-16T01:43:41Z</dc:date>
    <item>
      <title>Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538488#M6040</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by graynomad on Fri Jul 27 21:16:39 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I've been trying to write some heap/stack watching functions on a 1227 and seem to be getting results I don't expect.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here's a cut down version of main()&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;int main(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32 heap_start = (uint32) malloc(1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32 psp = (uint32)__get_PSP;
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt;which shows&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;heap_start&amp;nbsp; = 0x100005f8&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;psp = 0x4b9&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and yet in the debugger I see&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;PSP = 0x10001f18&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sp = 0x10001fe0&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;both of which seem reasonable given that RAM ends at 0x2000&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Question 1, &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;What's with the __get_PSP call value of&amp;nbsp; 0x4b9? Is that the correct way to get the SP?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Question 2, &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I have a BSS of 1004 bytes and data of 308, that's 1312 bytes of RAM taken up.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;8192 (8k RAM) - 1312 = 6880, so before any malloc()s I should have 6880 free bytes, Take off about 30 byes because the stack is already used so lets say there should be 6850 bytes of free RAM.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And yet the top of the heap is at 0x5f8, &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;0x2000 - 0x5f8 = 0x1a08 or 6664(DEC) bytes. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;6850 - 6664 = 186, where have 186 bytes gone?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does the startup code use some heap space? &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Have I cocked up on my calcs or misunderstood get_PSP?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538488#M6040</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:38Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538489#M6041</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by larryvc on Fri Jul 27 22:02:25 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Where's the RAM gone?&amp;nbsp; Off following the EWE of course.:rolleyes:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Sorry, Rob.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538489#M6041</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:39Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538490#M6042</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by graynomad on Fri Jul 27 22:27:08 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;:)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Ooo I left myself open for that one, and I grew up on a sheep farm as well.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538490#M6042</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:40Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538491#M6043</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by atomicdog on Sat Jul 28 01:15:31 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Don't you want the MSP instead? Since it's the default&amp;nbsp; SP.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;You need to init/set the PSP before it will have sane/valid value.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538491#M6043</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:40Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538492#M6044</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by graynomad on Sat Jul 28 01:32:07 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes I wasn't sure so tried both, if I change to __get_MSP the returned value is 0x4e9 which is almost the same as __get_PSP (0x4b9).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I thought maybe that's a word address but if you x4 it's 0x12e4 which can't be right either.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538492#M6044</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:41Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538493#M6045</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by atomicdog on Sat Jul 28 14:17:58 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Were you casting to uint32_t to get ride of a warning?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If so (and what you posted isn't a copy&amp;amp;paste error), your problem is that you're not calling the [I]__get_PSP[/I] function. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You have...&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;__get_PSP;&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt;Should be...&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;__get_PSP();&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538493#M6045</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:41Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538494#M6046</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by graynomad on Sat Jul 28 17:31:44 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you very much atomicdog, that was the problem. Doh.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Now I can get proper numbers I still don't understand the RAM usage, &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;data + bss = 1288&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I use&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32 heap_start = (uint32) malloc(1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;to find the start of the heap, this is the first thing main() does and I get a value of 0x5e4 which is 1508 DEC.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1508-1288 = 300 bytes.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I guess there are some allocations happening behind the scenes, for example malloc() itself would need a structure. But 300 bytes?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538494#M6046</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:42Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538495#M6047</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by atomicdog on Sat Jul 28 19:03:38 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Have you looked at the [I].map[/I] file? It will show you what variables are taking up space.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538495#M6047</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:42Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538496#M6048</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by atomicdog on Sat Jul 28 19:32:23 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;The linker variable [I]_pvHeapStart[/I] is where the heap starts. [I]__end_of_heap[/I] is where the end of the heap is currently at.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538496#M6048</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:43Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538497#M6049</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by graynomad on Sun Jul 29 00:54:22 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;The only .map file I can find looks nothing like any map file I've ever seen. There's no symbols or addresses or anything normal, just a list of object files that (I guess) have been included in the project.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As for _pvHeapStart and __end_of_heap, how do I access them? They both give "undeclared variable" errors.[I] &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;:confused:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[/I]&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538497#M6049</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:44Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538498#M6050</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by graynomad on Sun Jul 29 07:37:19 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Well __end_of_heap has turned up in the debugger's "variable" window, I have no idea where it came from, at least I can see the value and it looks like a malloc(1) actually allocates 12 bytes for some sort of structure plus the 1 byte you asked for. Add the word alignment and you lose 16 bytes in all.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there any way to get __end_of_heap programatically? EDIT: Never mind, I figured it out...don't ask :o&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The map file now looks normal, maybe the last time I looked it was after a failed build and therefore was it not complete.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;There are a few things of mine (globals) taking space but the worst offender is something called __Ciob that needs 320 bytes. Yikes! It's from stdio, something to do with printf maybe?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm learning good stuff but really all I wanted to do was write a test for free ram and move on to more interesting things.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538498#M6050</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:44Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538499#M6051</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by graynomad on Sun Jul 29 08:10:16 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Don't mind me, I'll just prattle on :)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Interesting, it seems that printf() malloc()s then free()s for temp storage. That's not on for a robust system and it's probably quite large anyway so I'll need a lightweight version.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538499#M6051</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:45Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538500#M6052</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by CodeRedSupport on Mon Jul 30 00:20:25 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: graynomad&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;Interesting, it seems that printf() malloc()s then free()s for temp storage. That's not on for a robust system and it's probably quite large anyway so I'll need a lightweight version.&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As documented here...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://"&gt;http://support.code-red-tech.com/CodeRedWiki/redlib_v2_notes&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Note that you can change this behaviour by defining "[FONT=Courier New][SIZE=2]CR_PRINTF_CHAR[/SIZE][/FONT]".&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The above FAQ also provides some information on heap behaviour at a general level.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For more general information on C library issues, please see the FAQs listed at:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://"&gt;http://support.code-red-tech.com/CodeRedWiki/CodeRedFAQ#CLibrary&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;CodeRedSupport&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538500#M6052</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:45Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538501#M6053</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by graynomad on Mon Jul 30 03:41:45 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;[FONT=Arial][SIZE=2]Yes I see that this is documented behaviour that can be removed. But the recommended method doesn't seem to work.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've got [/SIZE][/FONT][FONT=Arial][SIZE=2]CR_PRINTF_CHAR[/SIZE][/FONT][FONT=Arial][SIZE=2] defined __end_of_heap is 0x5cc and main() looks like this[/SIZE][/FONT]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;#define CR_PRINTF_CHAR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1

int main(void) {

&amp;nbsp;&amp;nbsp;&amp;nbsp; heapGuardInit();
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("%s\n", "qwerty");
&amp;nbsp;&amp;nbsp; printf ("%s\n", "$GPGGA,092204.999,4250.5589,S,14718.5084")&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt;Just after heapGuardInit() the heap looks like this.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;0x100005CC&amp;nbsp; AA AA AA AA AA AA AA AA AA AA AA AA&amp;nbsp; ªªªªªªªªªªªª
0x100005D8&amp;nbsp; AA AA AA AA AA AA AA AA AA AA AA AA&amp;nbsp; ªªªªªªªªªªªª
0x100005E4&amp;nbsp; AA AA AA AA AA AA AA AA AA AA AA AA&amp;nbsp; ªªªªªªªªªªªª
0x100005F0&amp;nbsp; AA AA AA AA AA AA AA AA AA AA AA AA&amp;nbsp; ªªªªªªªªªªªª
0x100005FC&amp;nbsp; AA AA AA AA AA AA AA AA AA AA AA AA&amp;nbsp; ªªªªªªªªªªªª
0x10000608&amp;nbsp; AA AA AA AA AA AA AA AA AA AA AA AA&amp;nbsp; ªªªªªªªªªªªª
0x10000614&amp;nbsp; AA AA AA AA AA AA AA AA AA AA AA AA&amp;nbsp; ªªªªªªªªªªªª&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt;having been filled with 0xAA from __end_of_heap to just below the SP.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I step over the printf() and the heap looks like this&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;0x100005CC&amp;nbsp; 00 00 00 10 02 00 00 00 00 00 00 00&amp;nbsp; ............
0x100005D8&amp;nbsp; 71 77 65 72 74 79 0A 00 AA AA AA AA&amp;nbsp; qwerty..ªªªª
0x100005E4&amp;nbsp; AA AA AA AA AA AA AA AA AA AA AA AA&amp;nbsp; ªªªªªªªªªªªª
0x100005F0&amp;nbsp; AA AA AA AA AA AA AA AA AA AA AA AA&amp;nbsp; ªªªªªªªªªªªª
0x100005FC&amp;nbsp; AA AA AA AA AA AA AA AA AA AA AA AA&amp;nbsp; ªªªªªªªªªªªª
0x10000608&amp;nbsp; AA AA AA AA AA AA AA AA AA AA AA AA&amp;nbsp; ªªªªªªªªªªªª&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt;__end_of_heap is now 0x5E0 so clearly some heap has been allocated and not freed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Then I step over the second printf()&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;0x100005CC&amp;nbsp; 00 00 00 10 0B 00 00 00 00 00 00 00&amp;nbsp; ............
0x100005D8&amp;nbsp; 24 47 50 47 47 41 2C 30 39 32 32 30&amp;nbsp; $GPGGA,09220
0x100005E4&amp;nbsp; 34 2E 39 39 39 2C 34 32 35 30 2E 35&amp;nbsp; 4.999,4250.5
0x100005F0&amp;nbsp; 35 38 39 2C 53 2C 31 34 37 31 38 2E&amp;nbsp; 589,S,14718.
0x100005FC&amp;nbsp; 35 30 38 34 0A 00 AA AA AA AA AA AA&amp;nbsp; 5084..ªªªªªª
0x10000608&amp;nbsp; AA AA AA AA AA AA AA AA AA AA AA AA&amp;nbsp; ªªªªªªªªªªªª
0x10000614&amp;nbsp; AA AA AA AA AA AA AA AA AA AA AA AA&amp;nbsp; ªªªªªªªªªªªª&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt;__end_of_heap is now 0x604. It seems that the previous allocation has been freed and a new one performed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So what happens if I do a malloc() in between the two printf()s?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("%s\n", "qwerty");
&amp;nbsp;&amp;nbsp;&amp;nbsp; void * x = (void*)malloc(1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("%s\n", "$GPGGA,092204.999,4250.5589,S,14718.5084")&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt;The malloc() does indeed go on top of the "qwerty" as you would expect if "qwerty" had been freed. And the following printf() allocates after my malloc(). &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So looking at the memory dump things are working OK if you ignore the fact that this version of printf() is not supposed to use the heap in the first place.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;But __end_of_heap is not updated after the printf() call. Does free() deal with that variable properly?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm using Redlib(semihost) if that makes a difference.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538501#M6053</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:46Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538502#M6054</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by whitecoe on Mon Jul 30 04:05:42 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I suspect that you are setting the define up in the wrong place. Do it for the whole project (ie in Project Properties), rather than within your source file.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;HTH!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538502#M6054</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:47Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538503#M6055</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by graynomad on Mon Jul 30 04:20:33 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;[FONT=Arial][SIZE=2]Thanks whitecoe[/SIZE][/FONT][FONT=Arial][SIZE=2] that did the trick. No more heap usage and I also added CR_INTEGER_PRINTF which knocked over 4k from my program size.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[/SIZE][/FONT]&amp;nbsp; [FONT=Arial][SIZE=2]CR_PRINTF_CHAR makes the printf()s much slower as the documentation says so I can leave it out for testing. As long as I know how to kill the heap usage in the final thing.[/SIZE][/FONT]&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538503#M6055</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:47Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538504#M6056</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by riscy00 on Sat Jan 05 12:26:58 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Where is&amp;nbsp; this heapGuardInit() thing come from?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I googled it and found very little info...&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538504#M6056</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:48Z</dc:date>
    </item>
    <item>
      <title>Re: Where's the RAM gone?</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538505#M6057</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by graynomad on Sat Jan 05 17:52:26 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;heapGuardInit() is just a simple function I wrote to fill RAM with 0xAA.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
#define&amp;nbsp;&amp;nbsp;&amp;nbsp; HEAPGUARD_VAL&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xAA
uint32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __heap_size;
uint8 *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __heap_start;
uint32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __free_ram;

void heapGuardInit(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; __heap_size = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; __heap_start = __end_of_heap;
&amp;nbsp;&amp;nbsp;&amp;nbsp; __free_ram = (stackPointer() - (uint32)__end_of_heap) &amp;amp; 0x1FFF;
&amp;nbsp;&amp;nbsp;&amp;nbsp; memset (__end_of_heap, HEAPGUARD_VAL, __free_ram - 16);
}

uint32 stackPointer(void) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; return (uint32)__get_MSP();
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN&gt;I don't remember now which of those variables are defined by the system, I think __end_of_heap is. There may be other dependences, I'm using the LPCXpresso environment.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:43:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Where-s-the-RAM-gone/m-p/538505#M6057</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:43:49Z</dc:date>
    </item>
  </channel>
</rss>

