<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="http://www.pic24.ru/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://www.pic24.ru/feed.php">
        <title>PIC24 tnkernel:ref:mpool</title>
        <description></description>
        <link>http://www.pic24.ru/</link>
        <image rdf:resource="http://www.pic24.ru/lib/images/favicon.ico" />
       <dc:date>2023-02-10T10:14:03+03:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/intro?rev=1216590280"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_create?rev=1216587377"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_delete?rev=1216587414"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_get?rev=1216587624"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_get_ipolling?rev=1213950362"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_get_polling?rev=1213950131"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_irelease?rev=1213950889"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_release?rev=1213950673"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://www.pic24.ru/lib/images/favicon.ico">
        <title>PIC24</title>
        <link>http://www.pic24.ru/</link>
        <url>http://www.pic24.ru/lib/images/favicon.ico</url>
    </image>
    <item rdf:about="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/intro?rev=1216590280">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T01:44:40+03:00</dc:date>
        <title>TNKernel : Блоки памяти фиксированного размера</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/mpool/intro?rev=1216590280</link>
        <description>


&lt;h1&gt;&lt;a name=&quot;tnkernel_блоки_памяти_фиксированного_размера&quot; id=&quot;tnkernel_блоки_памяти_фиксированного_размера&quot;&gt;TNKernel : Блоки памяти фиксированного размера&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;TNKernel : Блоки памяти фиксированного размера&quot; [1-94] --&gt;
&lt;h2&gt;&lt;a name=&quot;введение&quot; id=&quot;введение&quot;&gt;Введение&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Стандартные функции &lt;code&gt;malloc/free&lt;/code&gt; как правило не являются безопасными с точки зрения многозадачности, поэтому необходимо либо отказаться от их применения, либо рассматривать кучу (heap) как разделяемый ресурс (использовать мютекс), либо реализовать менеджер памяти своими силами под конкретную задачу.
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;Пул блоков памяти фиксированного размера&lt;/em&gt; - объект RTOS, предназначенный для динамического выделения памяти в многозадачной среде - может частично решить эту проблему. Пул представляет собой набор блоков памяти фиксированного размера (как правило, кратного машинному слову) и управляющую структуру, которая определяет занятые и свободные блоки.
&lt;/p&gt;

&lt;p&gt;
Задача может получить блок памяти. Если в пуле нет свободных блоков, то задача переводится в состояние ожидания до тех пор, пока один из блоков не освободится или пока не истечет таймаут сервиса запроса. После использования блока задача может освободить его.
&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Введение&quot; [95-1787] --&gt;
&lt;h2&gt;&lt;a name=&quot;структура_управления_пулом_блоков_памяти&quot; id=&quot;структура_управления_пулом_блоков_памяти&quot;&gt;Структура управления пулом блоков памяти&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Каждый пул ассоциируется со структурой управления:
&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span class=&quot;kw4&quot;&gt;typedef&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;struct&lt;/span&gt; _TN_FMP_S
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    CDLL_QUEUE_S        wait_queue;
&amp;nbsp;
    TN_UWORD            block_size;
    TN_UWORD            num_blocks;
    &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;              &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; start_addr;
    &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;              &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; free_list;
    TN_UWORD            fblkcnt;
    TN_OBJ_ID           id_fmp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; TN_FMP_S;&lt;/pre&gt;
&lt;p&gt;
В состав структуры пула входят следующие элементы:

&lt;/p&gt;
&lt;table class = &quot;fpl&quot;&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;wait_queue&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Очередь задач, ожидающих освобождение блока		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;block_size&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Размер блока памяти в байтах		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;num_blocks&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Количество блоков в пуле		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;start_addr&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Указатель на область памяти, выделенную для пула		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;free_list&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Указатель на список свободных блоков		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;fblkcnt&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Количество свободных блоков		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;id_fmp&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Поле идентификации объекта как пула блоков памяти		&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;

&lt;p&gt;&lt;div class=&quot;notewarning&quot;&gt;
Структура пула доступна только при определении &lt;code&gt;TN_DEBUG&lt;/code&gt;. Тем не менее, прямой доступ к элементам структуры пула блоков памяти крайне не рекомендуется, так как это является вмешательством в работу планировщика и других сервисов RTOS.

&lt;/div&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Структура управления пулом блоков памяти&quot; [1788-3480] --&gt;
&lt;h2&gt;&lt;a name=&quot;сервисы_управления_пулами_блоков_памяти&quot; id=&quot;сервисы_управления_пулами_блоков_памяти&quot;&gt;Сервисы управления пулами блоков памяти&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

TNKernel имеет следующий набор функций (сервисов) для управления пулами:

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Сервис  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  Описание  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  Свойства  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot; colspan=&quot;3&quot;&gt; &lt;strong&gt;Создание и удаление пула&lt;/strong&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_create&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:tn_fmem_create&quot;&gt;tn_fmem_create()&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Создание пула &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task_and_int.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task_and_int.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_task_and_int.png&quot; class=&quot;media&quot; title=&quot;Разрешен вызов в контексте задачи и в прерывании&quot; alt=&quot;Разрешен вызов в контексте задачи и в прерывании&quot; /&gt;&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_delete&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:tn_fmem_delete&quot;&gt;tn_fmem_delete()&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Удаление пула &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_task.png&quot; class=&quot;media&quot; title=&quot;Разрешен вызов только в контексте задачи&quot; alt=&quot;Разрешен вызов только в контексте задачи&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_ct_sw.png&quot; class=&quot;media&quot; title=&quot;Может привести к переключению контекста&quot; alt=&quot;Может привести к переключению контекста&quot; /&gt;&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot; colspan=&quot;3&quot;&gt; &lt;strong&gt;Получение блока памяти&lt;/strong&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_get&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:tn_fmem_get&quot;&gt;tn_fmem_get()&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Получение блока памяти &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_task.png&quot; class=&quot;media&quot; title=&quot;Разрешен вызов только в контексте задачи&quot; alt=&quot;Разрешен вызов только в контексте задачи&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_ct_sw.png&quot; class=&quot;media&quot; title=&quot;Может привести к переключению контекста&quot; alt=&quot;Может привести к переключению контекста&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_to.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_to.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_to.png&quot; class=&quot;media&quot; title=&quot;Сервис использует таймаут&quot; alt=&quot;Сервис использует таймаут&quot; /&gt;&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_get_polling&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:tn_fmem_get_polling&quot;&gt;tn_fmem_get_polling()&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Получение блока памяти без блокировки задачи &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_task.png&quot; class=&quot;media&quot; title=&quot;Разрешен вызов только в контексте задачи&quot; alt=&quot;Разрешен вызов только в контексте задачи&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_ct_sw.png&quot; class=&quot;media&quot; title=&quot;Может привести к переключению контекста&quot; alt=&quot;Может привести к переключению контекста&quot; /&gt;&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_get_ipolling&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:tn_fmem_get_ipolling&quot;&gt;tn_fmem_get_ipolling()&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Получение блока памяти в прерывании &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_int.png&quot; class=&quot;media&quot; title=&quot;Разрешен вызов только в прерывании&quot; alt=&quot;Разрешен вызов только в прерывании&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_ct_sw.png&quot; class=&quot;media&quot; title=&quot;Может привести к переключению контекста&quot; alt=&quot;Может привести к переключению контекста&quot; /&gt;&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0&quot; colspan=&quot;3&quot;&gt; &lt;strong&gt;Освобождение блока памяти&lt;/strong&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_release&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:tn_fmem_release&quot;&gt;tn_fmem_release()&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Освобождение блока памяти &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_task.png&quot; class=&quot;media&quot; title=&quot;Разрешен вызов только в контексте задачи&quot; alt=&quot;Разрешен вызов только в контексте задачи&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_ct_sw.png&quot; class=&quot;media&quot; title=&quot;Может привести к переключению контекста&quot; alt=&quot;Может привести к переключению контекста&quot; /&gt;&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row10&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_irelease&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:tn_fmem_irelease&quot;&gt;tn_fmem_irelease()&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Освобождение блока памяти в прерывании &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_int.png&quot; class=&quot;media&quot; title=&quot;Разрешен вызов только в прерывании&quot; alt=&quot;Разрешен вызов только в прерывании&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Ampool%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/tnkernel/ref/attr_call_ct_sw.png&quot; class=&quot;media&quot; title=&quot;Может привести к переключению контекста&quot; alt=&quot;Может привести к переключению контекста&quot; /&gt;&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Сервисы управления пулами блоков памяти&quot; [3481-] --&gt;</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_create?rev=1216587377">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T00:56:17+03:00</dc:date>
        <title>tn_fmem_create()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_create?rev=1216587377</link>
        <description>




&lt;h2&gt;&lt;a name=&quot;tn_fmem_create&quot; id=&quot;tn_fmem_create&quot;&gt;tn_fmem_create()&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Функция предназначена для создания пула блоков памяти фиксированного размера. Поле &lt;code&gt;id_fmp&lt;/code&gt; структуры &lt;code&gt;fmp&lt;/code&gt; должно быть равно нулю до момента создания пула. Таким образом уже созданные пулы защищаются от повторного создания.
&lt;/p&gt;

&lt;p&gt;
Память для самого пула так же должна быть выделена до вызова сервиса. Память может быть выделена статически или динамически, указатель на память передается в качестве параметра &lt;code&gt;start_addr&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Для лучшего использования памяти, желательно чтобы размер блока (&lt;code&gt;block_size&lt;/code&gt;) был кратным машинному слову: для PIC24/dsPIC это 2, 4, 6 …. байт. Для удобного выделения памяти (автоматического выравнивания) можно использовать макрос &lt;code&gt;MAKE_ALIG&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;TN_FMP   my_pool;
TN_UWORD my_pool_mem&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;NUM_BLOCKS &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;MAKE_ALIG&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BLOCK_SIZE&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_UWORD&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
tn_fmem_create &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;my_pool, my_pool_mem, BLOCK_SIZE, NUM_BLOCKS&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;

&lt;strong&gt;Вызов:&lt;/strong&gt;

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;TN_RETVAL tn_fmem_create &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_FMP   &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;fmp,
                          &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;     &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;start_addr,
                          TN_UWORD  block_size,
                          TN_UWORD  num_blocks
                         &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;Разрешен вызов:&lt;/strong&gt; &lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
В контексте задачи, в обработчике прерывания, в пользовательской критической секции
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Параметры функции:&lt;/strong&gt;
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;fmp&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на структуру пула типа &lt;code&gt;TN_FMP&lt;/code&gt;. Структура должна быть создана до момента вызова функции, статически или динамически&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;start_addr&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на память, выделенную для пула. Размер выделенной памяти должен быть не меньше &lt;code&gt;block_size * num_blocks&lt;/code&gt; байт&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;block_size&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;размер блока памяти в байтах&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;num_blocks&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;количество блоков памяти в пуле&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Возвращаемые значения:&lt;/strong&gt;  
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WRONG_PARAM&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;некорректное значение параметра &lt;sup&gt;&lt;a href=&quot;#fn__1&quot; name=&quot;fnt__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_EXS&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка создания пула, который уже создан&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NO_ERR&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;успешное выполнение&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;strong&gt;Пример вызова:&lt;/strong&gt;  

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;TN_FMP   my_pool;
TN_UWORD my_pool_mem&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;NUM_BLOCKS &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;MAKE_ALIG&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BLOCK_SIZE&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_UWORD&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
tn_fmem_create &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;my_pool, my_pool_mem, BLOCK_SIZE, NUM_BLOCKS&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
&lt;br/&gt;
 

&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/intro#сервисы_управления_пулами_блоков_памяти&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_fmem_create()&quot; [12-] --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; name=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
данный код возврата возможен только в случае использования сервисов с проверкой параметров&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_delete?rev=1216587414">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T00:56:54+03:00</dc:date>
        <title>tn_fmem_delete()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_delete?rev=1216587414</link>
        <description>




&lt;h2&gt;&lt;a name=&quot;tn_fmem_delete&quot; id=&quot;tn_fmem_delete&quot;&gt;tn_fmem_delete()&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Функция предназначена для удаления пула блоков памяти фиксированного размера. Поле &lt;code&gt;id_fmp&lt;/code&gt; структуры &lt;code&gt;fmp&lt;/code&gt; после выполнения сервиса устанавливается в 0.
&lt;/p&gt;

&lt;p&gt;
Все задачи, ожидающие освобождения блока выходят из сервиса запроса с кодом ошибки &lt;code&gt;TERR_DLT&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Вызов:&lt;/strong&gt;

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;TN_RETVAL tn_fmem_delete &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_FMP &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;fmp&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;Разрешен вызов:&lt;/strong&gt; &lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
В контексте задачи
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Параметры функции:&lt;/strong&gt;
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;fmp&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на структуру удаляемого пула&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Возвращаемые значения:&lt;/strong&gt;  
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WRONG_PARAM&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;некорректное значение параметра &lt;sup&gt;&lt;a href=&quot;#fn__1&quot; name=&quot;fnt__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NOEXS&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка удаления несуществующего пула&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WCONTEXT&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка вызова сервиса из обработчика прерывания или из пользовательской критической секции&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NO_ERR&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;успешное выполнение&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;strong&gt;Пример вызова:&lt;/strong&gt;  

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;TN_FMP   my_pool;
&amp;nbsp;
tn_fmem_delete&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;my_pool&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
&lt;br/&gt;
 

&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/intro#сервисы_управления_пулами_блоков_памяти&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_fmem_delete()&quot; [12-] --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; name=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
данный код возврата возможен только в случае использования сервисов с проверкой параметров&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_get?rev=1216587624">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T01:00:24+03:00</dc:date>
        <title>tn_fmem_get()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_get?rev=1216587624</link>
        <description>




&lt;h2&gt;&lt;a name=&quot;tn_fmem_get&quot; id=&quot;tn_fmem_get&quot;&gt;tn_fmem_get()&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Функция предназначена для получения блока памяти из пула. Указатель на получаемый блок передается в сервис в качестве параметра &lt;code&gt;p_data&lt;/code&gt;. Содержимое блока памяти после получения его задачей не определено.
&lt;/p&gt;

&lt;p&gt;
Если в пуле есть свободные блоки, то один из них выделяется для задачи, и сервис возвращает код &lt;code&gt;TERR_NO_ERR&lt;/code&gt;. Если свободные блоки в пуле отсутствуют, задача переводится в состояние ожидания и ставится в конец очереди задач, ожидающих освобождение блока памяти.
&lt;/p&gt;

&lt;p&gt;
Параметр &lt;code&gt;timeout&lt;/code&gt; задает время ожидания блока памяти в системных тиках. Если в течении этого времени блок не будет выделен для задачи, она удаляется из очереди ожидающих блок и переводится в состояние готовых к выполнению. Сервис возвращает значение TERR_TIMEOUT.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Вызов:&lt;/strong&gt;

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;TN_RETVAL tn_fmem_get &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_FMP &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;fmp, &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;**&lt;/span&gt;p_data, TN_TIMEOUT timeout&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;Разрешен вызов:&lt;/strong&gt; &lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
В контексте задачи
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Параметры функции:&lt;/strong&gt;
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;fmp&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на пул из которого будет выделяться блок памяти&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;p_data&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на указатель, который после успешного выполнения сервиса будет содержать адрес выделенного блока&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;timeout&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;таймаут в системных тиках, в течении которого задача будет ожидать освобождения блока&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Возвращаемые значения:&lt;/strong&gt;  
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WRONG_PARAM&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;некорректное значение параметра &lt;sup&gt;&lt;a href=&quot;#fn__1&quot; name=&quot;fnt__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NOEXS&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка получения блока из несуществующего пула&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WCONTEXT&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;вызов сервиса из обработчика прерывания или пользовательской критической секции&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_TIMEOUT&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;выход из сервиса по таймауту&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NO_ERR&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;успешное выполнение&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;strong&gt;Пример вызова:&lt;/strong&gt;  

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span class=&quot;co2&quot;&gt;#define BLOCK_SIZE    4&lt;/span&gt;
&amp;nbsp;
TN_FMP   my_pool;
TN_UWORD my_pool_mem&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;NUM_BLOCKS &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;MAKE_ALIG&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BLOCK_SIZE&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_UWORD&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
TN_UWORD &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;block_pt;
&amp;nbsp;
tn_fmem_create &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;my_pool, my_pool_mem, BLOCK_SIZE, NUM_BLOCKS&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
tn_fmem_get &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;my_pool, &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;block_pt, TN_WAIT_INFINITE&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
&lt;br/&gt;
 

&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/intro#сервисы_управления_пулами_блоков_памяти&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_fmem_get()&quot; [12-] --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; name=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
данный код возврата возможен только в случае использования сервисов с проверкой параметров&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_get_ipolling?rev=1213950362">
        <dc:format>text/html</dc:format>
        <dc:date>2008-06-20T12:26:02+03:00</dc:date>
        <title>tn_fmem_get_ipolling()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_get_ipolling?rev=1213950362</link>
        <description>




&lt;h2&gt;&lt;a name=&quot;tn_fmem_get_ipolling&quot; id=&quot;tn_fmem_get_ipolling&quot;&gt;tn_fmem_get_ipolling()&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Функция предназначена для получения блока памяти из пула в прерывании. Указатель на получаемый блок передается в сервис в качестве параметра &lt;code&gt;p_data&lt;/code&gt;. Содержимое блока памяти после получения его задачей не определено.
&lt;/p&gt;

&lt;p&gt;
Если в пуле есть свободные блоки, то один из них выделяется для задачи, и сервис возвращает код &lt;code&gt;TERR_NO_ERR&lt;/code&gt;. Если свободные блоки в пуле отсутствуют, сервис возвращает код ошибки &lt;code&gt;TERR_TIMEOUT&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Вызов:&lt;/strong&gt;

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;TN_RETVAL tn_fmem_get_ipolling &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_FMP &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;fmp, &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;**&lt;/span&gt;p_data&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;Разрешен вызов:&lt;/strong&gt; &lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
В прерывании
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Параметры функции:&lt;/strong&gt;
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;fmp&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на пул из которого будет выделяться блок памяти&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;p_data&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на указатель, который после успешного выполнения сервиса будет содержать адрес выделенного блока&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Возвращаемые значения:&lt;/strong&gt;  
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WRONG_PARAM&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;некорректное значение параметра (&lt;em class=&quot;u&quot;&gt;замечание:&lt;/em&gt; данный код возврата возможен только в случае использования сервисов с проверкой параметров)&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NOEXS&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка получения блока из несуществующего пула&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WCONTEXT&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;вызов сервиса из контекста задачи или из пользовательской критической секции&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_TIMEOUT&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;в пуле отсутствуют свободные блоки памяти&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NO_ERR&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;успешное выполнение&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;strong&gt;Пример вызова:&lt;/strong&gt;  

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span class=&quot;kw4&quot;&gt;extern&lt;/span&gt; TN_FMP my_pool;
&amp;nbsp;
tn_sys_interrupt &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;_T2Interrupt&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;        &lt;span class=&quot;coMULTI&quot;&gt;/* прерывание от таймера */&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    TN_UWORD &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;block;
&amp;nbsp;
    IFS0bits.&lt;span class=&quot;me1&quot;&gt;T2IF&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;;                 &lt;span class=&quot;coMULTI&quot;&gt;/* сброс флага прерывания */&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;tn_fmem_get_ipolling&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;my_pool, &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;block&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;==&lt;/span&gt; TERR_NO_ERR&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;coMULTI&quot;&gt;/* ... */&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;coMULTI&quot;&gt;/* ... */&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;br/&gt;
 

&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/intro#сервисы_управления_пулами_блоков_памяти&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_fmem_get_ipolling()&quot; [12-] --&gt;</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_get_polling?rev=1213950131">
        <dc:format>text/html</dc:format>
        <dc:date>2008-06-20T12:22:11+03:00</dc:date>
        <title>tn_fmem_get_polling()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_get_polling?rev=1213950131</link>
        <description>




&lt;h2&gt;&lt;a name=&quot;tn_fmem_get_polling&quot; id=&quot;tn_fmem_get_polling&quot;&gt;tn_fmem_get_polling()&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Функция предназначена для получения блока памяти из пула без блокировки задачи. Указатель на получаемый блок передается в сервис в качестве параметра &lt;code&gt;p_data&lt;/code&gt;. Содержимое блока памяти после получения его задачей не определено.
&lt;/p&gt;

&lt;p&gt;
Если в пуле есть свободные блоки, то один из них выделяется для задачи, и сервис возвращает код &lt;code&gt;TERR_NO_ERR&lt;/code&gt;. Если свободные блоки в пуле отсутствуют, сервис возвращает код ошибки &lt;code&gt;TERR_TIMEOUT&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Вызов:&lt;/strong&gt;

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;TN_RETVAL tn_fmem_get_polling &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_FMP &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;fmp, &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;**&lt;/span&gt;p_data&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;Разрешен вызов:&lt;/strong&gt; &lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
В контексте задачи
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Параметры функции:&lt;/strong&gt;
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;fmp&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на пул из которого будет выделяться блок памяти&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;p_data&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на указатель, который после успешного выполнения сервиса будет содержать адрес выделенного блока&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Возвращаемые значения:&lt;/strong&gt;  
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WRONG_PARAM&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;некорректное значение параметра (&lt;em class=&quot;u&quot;&gt;замечание:&lt;/em&gt; данный код возврата возможен только в случае использования сервисов с проверкой параметров)&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NOEXS&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка получения блока из несуществующего пула&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WCONTEXT&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;вызов сервиса из обработчика прерывания или пользовательской критической секции&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_TIMEOUT&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;в пуле отсутствуют свободные блоки памяти&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NO_ERR&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;успешное выполнение&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;strong&gt;Пример вызова:&lt;/strong&gt;  

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span class=&quot;co2&quot;&gt;#define BLOCK_SIZE    4&lt;/span&gt;
&amp;nbsp;
TN_FMP   my_pool;
TN_UWORD my_pool_mem&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;NUM_BLOCKS &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;MAKE_ALIG&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BLOCK_SIZE&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_UWORD&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
TN_UWORD &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;block_pt;
&amp;nbsp;
tn_fmem_create&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;my_pool, my_pool_mem, BLOCK_SIZE, NUM_BLOCKS&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;tn_fmem_get&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;my_pool, &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;block_pt&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;==&lt;/span&gt; TERR_TIMEOUT&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;coMULTI&quot;&gt;/* в пуле нет свободных блоков памяти */&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;br/&gt;
 

&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/intro#сервисы_управления_пулами_блоков_памяти&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_fmem_get_polling()&quot; [12-] --&gt;</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_irelease?rev=1213950889">
        <dc:format>text/html</dc:format>
        <dc:date>2008-06-20T12:34:49+03:00</dc:date>
        <title>tn_fmem_irelease()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_irelease?rev=1213950889</link>
        <description>


&lt;h2&gt;&lt;a name=&quot;tn_fmem_irelease&quot; id=&quot;tn_fmem_irelease&quot;&gt;tn_fmem_irelease()&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Функция предназначена для освобождения выделенного блока памяти в прерывании. Указатель на освобождаемый блок передается в сервис в качестве параметра &lt;code&gt;p_data&lt;/code&gt;. Функция не проверяет принадлежность блока &lt;code&gt;p_data&lt;/code&gt; к пулу &lt;code&gt;fmp&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Если в очереди ожидания блоков памяти есть задачи, то первая задача из очереди будет переведена в состояние готовности к выполнению.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Вызов:&lt;/strong&gt;

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;TN_RETVAL tn_fmem_irelease&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_FMP &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;fmp, &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;  &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;p_data&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;Разрешен вызов:&lt;/strong&gt; &lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
В прерывании
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Параметры функции:&lt;/strong&gt;
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;fmp&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на пул, блок которого освобождается задачей&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;p_data&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на блок, который будет освобождаться задачей&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Возвращаемые значения:&lt;/strong&gt;  
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WRONG_PARAM&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;некорректное значение параметра (&lt;em class=&quot;u&quot;&gt;замечание:&lt;/em&gt; данный код возврата возможен только в случае использования сервисов с проверкой параметров)&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NOEXS&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка освобождения блока несуществующего пула&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WCONTEXT&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;вызов сервиса в контексте задачи или из пользовательской критической секции&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NO_ERR&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;успешное выполнение&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;strong&gt;Пример вызова:&lt;/strong&gt;  

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span class=&quot;kw4&quot;&gt;extern&lt;/span&gt; TN_FMP   my_pool;
&amp;nbsp;
tn_sys_interrupt &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;_T2Interrupt&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;        &lt;span class=&quot;coMULTI&quot;&gt;/* прерывание от таймера */&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    TN_UWORD &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;block_pt;
&amp;nbsp;
    IFS0bits.&lt;span class=&quot;me1&quot;&gt;T2IF&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;;                 &lt;span class=&quot;coMULTI&quot;&gt;/* сброс флага прерывания */&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;tn_fmem_get_ipolling&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;my_pool, &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;block&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;==&lt;/span&gt; TERR_NO_ERR&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;coMULTI&quot;&gt;/* ... */&lt;/span&gt;
        tn_fmem_irelease&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;my_pool, block_pt&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;

&lt;br/&gt;
 

&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/intro#сервисы_управления_пулами_блоков_памяти&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_fmem_irelease()&quot; [11-] --&gt;</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_release?rev=1213950673">
        <dc:format>text/html</dc:format>
        <dc:date>2008-06-20T12:31:13+03:00</dc:date>
        <title>tn_fmem_release()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/mpool/tn_fmem_release?rev=1213950673</link>
        <description>


&lt;h2&gt;&lt;a name=&quot;tn_fmem_release&quot; id=&quot;tn_fmem_release&quot;&gt;tn_fmem_release()&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Функция предназначена для освобождения выделенного блока памяти. Указатель на освобождаемый блок передается в сервис в качестве параметра &lt;code&gt;p_data&lt;/code&gt;. Функция не проверяет принадлежность блока &lt;code&gt;p_data&lt;/code&gt; к пулу &lt;code&gt;fmp&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Если в очереди ожидания блоков памяти есть задачи, то первая задача из очереди будет переведена в состояние готовности к выполнению.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Вызов:&lt;/strong&gt;

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;TN_RETVAL tn_fmem_release&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_FMP &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;fmp, &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;  &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;p_data&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;Разрешен вызов:&lt;/strong&gt; &lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
В контексте задачи
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Параметры функции:&lt;/strong&gt;
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;fmp&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на пул, блок которого освобождается задачей&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;p_data&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на блок, который будет освобождаться задачей&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Возвращаемые значения:&lt;/strong&gt;  
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WRONG_PARAM&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;некорректное значение параметра (&lt;em class=&quot;u&quot;&gt;замечание:&lt;/em&gt; данный код возврата возможен только в случае использования сервисов с проверкой параметров)&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NOEXS&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка освобождения блока несуществующего пула&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WCONTEXT&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;вызов сервиса из обработчика прерывания или пользовательской критической секции&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NO_ERR&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;успешное выполнение&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;strong&gt;Пример вызова:&lt;/strong&gt;  

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span class=&quot;co2&quot;&gt;#define BLOCK_SIZE    4&lt;/span&gt;
&amp;nbsp;
TN_FMP   my_pool;
TN_UWORD my_pool_mem&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;NUM_BLOCKS &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;MAKE_ALIG&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BLOCK_SIZE&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_UWORD&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
TN_UWORD &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;block_pt;
&amp;nbsp;
tn_fmem_create &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;my_pool, my_pool_mem, BLOCK_SIZE, NUM_BLOCKS&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
tn_fmem_get &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;my_pool, &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;block_pt, TN_WAIT_INFINITE&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;coMULTI&quot;&gt;/* ... */&lt;/span&gt;
&amp;nbsp;
tn_fmem_release&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;my_pool, block_pt&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
&lt;br/&gt;
 

&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mpool/intro#сервисы_управления_пулами_блоков_памяти&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mpool:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_fmem_release()&quot; [11-] --&gt;</description>
    </item>
</rdf:RDF>
