<?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: MQX new keyword using C++ in MQX Software Solutions</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-new-keyword-using-C/m-p/185649#M3166</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I struggled with this same problem for a while, and was confused at why the MQX C++ example project worked, but C++ code in my own project did not work. After consulting IAR support, it turns out that the solution is to re-direct the new() and delete() operators via the Linker Options in your project settings. Under Project&amp;gt;Options&amp;gt;Linker&amp;gt;Extra Options, check the "Use command line options" box, and add the folloiwing into the "Command Line Options" text box:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;--redirect __iar_dlmalloc=malloc&lt;BR /&gt;--redirect __iar_dlcalloc=calloc&lt;BR /&gt;--redirect __iar_dlfree=free&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This causes IAR redirects new() to __iar_dlmalloc(), and this linker option then redirects __iar_dlmalloc() to malloc(), which is redirected to the MQX _mem_alloc(). This seems like a roundabout way of doing it, but this is actually how Freescale accomplishes it in their C++ example project - take a look at the project settings and you'll find this in there.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hope this helps!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 19 Apr 2012 01:03:48 GMT</pubDate>
    <dc:creator>unmannedrussery</dc:creator>
    <dc:date>2012-04-19T01:03:48Z</dc:date>
    <item>
      <title>MQX new keyword using C++</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-new-keyword-using-C/m-p/185648#M3165</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;Hi,&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Hopefully some can help I am having trouble with the new keyword using C++ below is some example code I am using MQX 3.6.2 and a Kinetis K60.&lt;/DIV&gt;&lt;DIV&gt;When the program reaches the line "Test *T1 = new Test;" it halts and generates an MQX_UNHANDLED_INTERRUPT(0x0041)&lt;/DIV&gt;&lt;DIV&gt;&lt;P class="MsoNormal"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="MsoNormal"&gt;The same is also true for something as simple&lt;SPAN style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/SPAN&gt; as&lt;/P&gt;&lt;P class="MsoNormal"&gt;int *p_scalar = new int(5);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="MsoNormal"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="MsoNormal"&gt;Many thanks in advance&lt;/P&gt;&lt;P class="MsoNormal"&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;DIV&gt;#define START_TASK 5&lt;/DIV&gt;&lt;DIV&gt;extern void Start_task(uint_32);&lt;/DIV&gt;&lt;DIV&gt;extern "C" const TASK_TEMPLATE_STRUCT &amp;nbsp;MQX_template_list[] =&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;{&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; /* Task Index, &amp;nbsp; Function, &amp;nbsp; Stack, &amp;nbsp;Priority, Name, &amp;nbsp; &amp;nbsp; Attributes, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Param, Time Slice */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{ START_TASK, &amp;nbsp; Start_task, 1500, &amp;nbsp; 5, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"hello", &amp;nbsp;MQX_AUTO_START_TASK, 0, &amp;nbsp; &amp;nbsp; 0 },&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{ 0 }&lt;/DIV&gt;&lt;DIV&gt;};&lt;/DIV&gt;&lt;DIV&gt;class Test&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;public: &amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN style="white-space: pre;"&gt;&lt;/SPAN&gt;Test(void);&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN style="white-space: pre;"&gt;&lt;/SPAN&gt;~Test(){};&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN style="white-space: pre;"&gt;&lt;/SPAN&gt;void Init(void);&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN style="white-space: pre;"&gt;&lt;/SPAN&gt;int xx; &amp;nbsp;&lt;SPAN&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;};&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void Start_task(uint_32 initial_data)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="white-space: pre;"&gt;&amp;nbsp;&lt;/SPAN&gt;printf("Start Task\n");&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="white-space: pre;"&gt;&amp;nbsp;&lt;/SPAN&gt;Test *T1 = new Test;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="white-space: pre;"&gt;&amp;nbsp;&lt;/SPAN&gt;T1-&amp;gt;Init();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="white-space: pre;"&gt;&amp;nbsp;&lt;/SPAN&gt;while(T1-&amp;gt;xx)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="white-space: pre;"&gt;&amp;nbsp;&lt;/SPAN&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN style="white-space: pre;"&gt;&lt;/SPAN&gt;_time_delay(200);&lt;SPAN&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="white-space: pre;"&gt;&amp;nbsp;&lt;/SPAN&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN style="white-space: pre;"&gt;&lt;/SPAN&gt;_mqx_exit(0);&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;void Test::Init(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="white-space: pre;"&gt;&amp;nbsp;&lt;/SPAN&gt;printf("Init\n");&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN style="white-space: pre;"&gt;&lt;/SPAN&gt;xx=1; &amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;Test::Test(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN style="white-space: pre;"&gt;&lt;/SPAN&gt;printf("Constructor\n"); &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN style="white-space: pre;"&gt;&lt;/SPAN&gt;xx=0;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Feb 2011 17:24:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-new-keyword-using-C/m-p/185648#M3165</guid>
      <dc:creator>KJFPE</dc:creator>
      <dc:date>2011-02-23T17:24:21Z</dc:date>
    </item>
    <item>
      <title>Re: MQX new keyword using C++</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-new-keyword-using-C/m-p/185649#M3166</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I struggled with this same problem for a while, and was confused at why the MQX C++ example project worked, but C++ code in my own project did not work. After consulting IAR support, it turns out that the solution is to re-direct the new() and delete() operators via the Linker Options in your project settings. Under Project&amp;gt;Options&amp;gt;Linker&amp;gt;Extra Options, check the "Use command line options" box, and add the folloiwing into the "Command Line Options" text box:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;--redirect __iar_dlmalloc=malloc&lt;BR /&gt;--redirect __iar_dlcalloc=calloc&lt;BR /&gt;--redirect __iar_dlfree=free&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This causes IAR redirects new() to __iar_dlmalloc(), and this linker option then redirects __iar_dlmalloc() to malloc(), which is redirected to the MQX _mem_alloc(). This seems like a roundabout way of doing it, but this is actually how Freescale accomplishes it in their C++ example project - take a look at the project settings and you'll find this in there.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hope this helps!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Apr 2012 01:03:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-new-keyword-using-C/m-p/185649#M3166</guid>
      <dc:creator>unmannedrussery</dc:creator>
      <dc:date>2012-04-19T01:03:48Z</dc:date>
    </item>
  </channel>
</rss>

