<?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>MQX Software Solutions中的主题 Re: What is _mem_set_type() ?</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/What-is-mem-set-type/m-p/245113#M6963</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks a lot for your advice. I actually had a look at the source code of _mem_set_type() and then I just :smileyshocked:'ed !&lt;/P&gt;&lt;P&gt;:smileylaugh:&lt;/P&gt;&lt;P&gt;AV&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 01 Apr 2013 14:30:58 GMT</pubDate>
    <dc:creator>alexandrevincon</dc:creator>
    <dc:date>2013-04-01T14:30:58Z</dc:date>
    <item>
      <title>What is _mem_set_type() ?</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/What-is-mem-set-type/m-p/245109#M6959</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am currently using MQX 4.0 and trying to write my own I/O driver, base on TFS source code. I stumbled on this code in tfs.c :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE&gt;
&lt;P&gt;/*FUNCTION*-------------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : _io_tfs_install&lt;/P&gt;
&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : TFS error code.&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Initialize the Trivial File System.&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*---------------------------------------------------------------------*/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;uint_32 _io_tfs_install&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; (&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*[IN] the name that should be given to tfs (ex: "C:", "TFS1:", etc..) */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char_ptr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; identifier,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*[IN] pointer to the first entry of the root TFS directory&amp;nbsp; */&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const TFS_DIR_ENTRY&amp;nbsp;&amp;nbsp; *root&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; )&lt;/P&gt;
&lt;P&gt;{ /* Body */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; uint_32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; TFS_DRIVE_STRUCT_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drive_ptr;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; drive_ptr = _mem_alloc_system_zero( sizeof(TFS_DRIVE_STRUCT) );&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; if ( drive_ptr == NULL ) {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return( TFS_INSUFFICIENT_MEMORY );&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; }/* Endif */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;_mem_set_type(drive_ptr,MEM_TYPE_IO_TFS_DRIVE_STRUCT);&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; _int_disable();&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; error_code = _io_dev_install_ext( identifier, &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _io_tfs_open,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _io_tfs_close, &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _io_tfs_read,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _io_tfs_write,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _io_tfs_ioctl,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _io_tfs_uninstall,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (pointer)drive_ptr);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; if (error_code != IO_OK) {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mem_free(drive_ptr);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drive_ptr = NULL;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _int_enable();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return error_code;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; } /* Endif */&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; drive_ptr-&amp;gt;IDENTIFIER = identifier;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; drive_ptr-&amp;gt;ROOT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = root;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; _int_enable();&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; return(error_code);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;} /* Endbody */&lt;/P&gt;
&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I understand all of it except the call to _mem_set_type(). This function does not seem to be documented, so I don't know what it does and how I can adapt it for my own I/O driver.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It would be great if someone could give me a clue !&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;AV&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Mar 2013 08:36:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/What-is-mem-set-type/m-p/245109#M6959</guid>
      <dc:creator>alexandrevincon</dc:creator>
      <dc:date>2013-03-29T08:36:29Z</dc:date>
    </item>
    <item>
      <title>Re: What is _mem_set_type() ?</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/What-is-mem-set-type/m-p/245110#M6960</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Alexandre,&lt;/P&gt;&lt;P&gt;The _mem_set_type(); function call is used to identify blocks of memory with a particular driver when allocated from heap.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Example in the UART polled driver:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="ScreenHunter_13 Mar. 29 16.13.gif"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/119210iD93E472AE58D0230/image-size/large?v=v2&amp;amp;px=999" role="button" title="ScreenHunter_13 Mar. 29 16.13.gif" alt="ScreenHunter_13 Mar. 29 16.13.gif" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;The MEM_TYPE_IO_SERIAL_POLLED_DEVICE_STRUCT #define is in the mqx.h header.&lt;/P&gt;&lt;P&gt;Here is a picture of the heap before the _mem_set_type() call:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="ScreenHunter_14 Mar. 29 16.17.gif"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/119211iCB4C6E5A28EE3DEE/image-size/large?v=v2&amp;amp;px=999" role="button" title="ScreenHunter_14 Mar. 29 16.17.gif" alt="ScreenHunter_14 Mar. 29 16.17.gif" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Here is a picture of the heap after the _mem_set_type() call:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="ScreenHunter_15 Mar. 29 16.18.gif"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/119212i66E178D654B08428/image-size/large?v=v2&amp;amp;px=999" role="button" title="ScreenHunter_15 Mar. 29 16.18.gif" alt="ScreenHunter_15 Mar. 29 16.18.gif" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This allows the RTOS to be able to scan through the heap to find resources (i.e. memory) to manipulate in one fashio or another.&lt;/P&gt;&lt;P&gt;It is also used by the Task Aware Debugging (TAD) enabled IDE debuffer to be able to display the heap and show who owes what.&amp;nbsp; The TAD was used to generate the above two heap pictures.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Mar 2013 21:20:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/What-is-mem-set-type/m-p/245110#M6960</guid>
      <dc:creator>DavidS</dc:creator>
      <dc:date>2013-03-29T21:20:46Z</dc:date>
    </item>
    <item>
      <title>Re: What is _mem_set_type() ?</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/What-is-mem-set-type/m-p/245111#M6961</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;Thank you for your reply.&lt;/P&gt;&lt;P&gt;What would be the best policy for my custom I/O driver ? Can I simply omit it ? Or shall use it and create a custom #define value ?&lt;/P&gt;&lt;P&gt;The risk with the second option is that the value I choose is available today, but might be used by mqx in the next release...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;AV&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 31 Mar 2013 19:42:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/What-is-mem-set-type/m-p/245111#M6961</guid>
      <dc:creator>alexandrevincon</dc:creator>
      <dc:date>2013-03-31T19:42:05Z</dc:date>
    </item>
    <item>
      <title>Re: What is _mem_set_type() ?</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/What-is-mem-set-type/m-p/245112#M6962</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Alexandre Vincon,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I personally prefer second option with an offset (let's say at least 10) from the current top value (types are going upwards, currently max value is 1051). It specifies that that memory is being used by the new I/O driver.&lt;/P&gt;&lt;P&gt;One advice, if there's a function which is not documented, refer to the source code which usually provides details. Those can clarify an implementation even more than the documentation &lt;IMG alt="Smiley Wink" class="emoticon emoticon-smileywink" id="smileywink" src="https://community.nxp.com/i/smilies/16x16_smiley-wink.png" title="Smiley Wink" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro _jivemacro_uid_13648120881023225 jive_macro_code" jivemacro_uid="_13648120881023225"&gt;
&lt;P&gt;/*!&lt;/P&gt;
&lt;P&gt;* \brief Sets type of the specified block.&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* \param[in] mem_ptr&amp;nbsp; Address of the memory block to set type.&lt;/P&gt;
&lt;P&gt;* \param[in] mem_type Memory type to set.&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* \return TRUE (Type has been set.), FALSE (Type has not been set.).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;*/&lt;/P&gt;
&lt;P&gt;boolean _mem_set_type&lt;/P&gt;
&lt;P&gt;(&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pointer&amp;nbsp;&amp;nbsp; mem_ptr,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mem_type mem_type&lt;/P&gt;
&lt;P&gt;)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; STOREBLOCK_STRUCT_PTR block_ptr;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (mem_ptr != NULL) {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; block_ptr = GET_MEMBLOCK_PTR(mem_ptr);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _int_disable();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; block_ptr-&amp;gt;MEM_TYPE = mem_type;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CALC_CHECKSUM(block_ptr);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _int_enable();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return TRUE;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;

&lt;SPAN class="mce_paste_marker"&gt;
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;0xc0170&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Nov 2020 13:01:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/What-is-mem-set-type/m-p/245112#M6962</guid>
      <dc:creator>c0170</dc:creator>
      <dc:date>2020-11-02T13:01:21Z</dc:date>
    </item>
    <item>
      <title>Re: What is _mem_set_type() ?</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/What-is-mem-set-type/m-p/245113#M6963</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks a lot for your advice. I actually had a look at the source code of _mem_set_type() and then I just :smileyshocked:'ed !&lt;/P&gt;&lt;P&gt;:smileylaugh:&lt;/P&gt;&lt;P&gt;AV&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 01 Apr 2013 14:30:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/What-is-mem-set-type/m-p/245113#M6963</guid>
      <dc:creator>alexandrevincon</dc:creator>
      <dc:date>2013-04-01T14:30:58Z</dc:date>
    </item>
  </channel>
</rss>

