<?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:dqueue</title>
        <description></description>
        <link>http://www.pic24.ru/</link>
        <image rdf:resource="http://www.pic24.ru/lib/images/favicon.ico" />
       <dc:date>2023-02-10T09:00:04+03:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/intro?rev=1216589926"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_create?rev=1258466050"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_delete?rev=1216586906"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_ireceive?rev=1210081164"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_isend_polling?rev=1265799397"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_receive?rev=1245954337"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_receive_polling?rev=1236200414"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_send?rev=1216586963"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_send_polling?rev=1216587013"/>
            </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/dqueue/intro?rev=1216589926">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T01:38:46+03:00</dc:date>
        <title>TNKernel : Очереди сообщений</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/intro?rev=1216589926</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-68] --&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;em&gt;Очередь сообщений&lt;/em&gt; - это объект RTOS, предназначенный для передачи данных между задачами и между прерываниями и задачами.
&lt;/p&gt;

&lt;p&gt;
В &lt;strong&gt;не&lt;/strong&gt; RTOS системе передача данных между различными подпрограммами, которые вызываются в бесконечном цикле (условно их можно назвать задачами), происходит, как правило, с помощью глобальных переменных.
&lt;/p&gt;

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

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

&lt;p&gt;
&lt;em&gt;Очередь сообщений&lt;/em&gt; ассоциируется со структурой управления и буфером сообщений. Буфер является очередью типа FIFO, т.е. первым будет получено сообщение, которое отправлено раньше.
&lt;/p&gt;

&lt;p&gt;
В TNKernel под сообщением (т.е. элементом, который хранится в буфере) понимается &lt;strong&gt;указатель на данные&lt;/strong&gt;, а не сами данные. Другими словами - сообщение это не данные, а указатель на данные. Такой подход имеет как плюсы, так и минусы. 
&lt;/p&gt;

&lt;p&gt;
&lt;em class=&quot;u&quot;&gt;Плюсы:&lt;/em&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; объем передаваемых данных может быть сколь угодно большим - в качестве сообщения можно передавать указатель на структуру или массив&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; маленький размер буфера, так как в нем хранятся только указатели на данные&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;em class=&quot;u&quot;&gt;Минусы:&lt;/em&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; данные по передаваемому указателю не могут быть изменены до тех пор, пока сообщение не будет принято и обработано. Это можно обойти, используя пересылку с подтверждением, либо блоки памяти фиксированного размера.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

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

&lt;p&gt;
Основными сервисами управления очередями сообщений являются отсылка сообщения и прием сообщения.
&lt;/p&gt;

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

&lt;p&gt;
&lt;p&gt;&lt;div class=&quot;noteclassic&quot;&gt;
В TNKernel будет запущена задача, которая стоит первой в очереди задач ожидающих сообщение, вне зависимости от приоритетов задач в очереди.

&lt;/div&gt;&lt;/p&gt;
&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; [69-4754] --&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;em&gt;очередь сообщений&lt;/em&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_DQUE_S
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    CDLL_QUEUE_S        wait_send_list;
    CDLL_QUEUE_S        wait_receive_list;
&amp;nbsp;
    &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;             &lt;span class=&quot;sy2&quot;&gt;**&lt;/span&gt; data_fifo;
    TN_UWORD            num_entries;
    TN_UWORD            tail_cnt;
    TN_UWORD            header_cnt;
    TN_OBJ_ID           id_dque;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; TN_DQUE_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_send_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;wait_receive_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;data_fifo&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Указатель на буфер сообщений. Буфер сообщений это массив указателей на &lt;code&gt;void&lt;/code&gt;		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;num_entries&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Объем буфера (максимальное количество сообщений в очереди)		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;tail_cnt&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Индекс принимаемого сообщения		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;header_cnt&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_dque&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;em&gt;очереди сообщений&lt;/em&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; [4755-6611] --&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/dqueue/tn_queue_create&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:tn_queue_create&quot;&gt;tn_queue_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%3Adqueue%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/dqueue/tn_queue_delete&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:tn_queue_delete&quot;&gt;tn_queue_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%3Adqueue%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%3Adqueue%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/dqueue/tn_queue_send&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:tn_queue_send&quot;&gt;tn_queue_send()&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%3Adqueue%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%3Adqueue%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%3Adqueue%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/dqueue/tn_queue_send_polling&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:tn_queue_send_polling&quot;&gt;tn_queue_send_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%3Adqueue%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%3Adqueue%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/dqueue/tn_queue_isend_polling&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:tn_queue_isend_polling&quot;&gt;tn_queue_isend_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_int.png?id=tnkernel%3Aref%3Adqueue%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%3Adqueue%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/dqueue/tn_queue_receive&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:tn_queue_receive&quot;&gt;tn_queue_receive()&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%3Adqueue%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%3Adqueue%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%3Adqueue%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;row10&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_receive_polling&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:tn_queue_receive_polling&quot;&gt;tn_queue_receive_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%3Adqueue%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%3Adqueue%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;row11&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_ireceive&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:tn_queue_ireceive&quot;&gt;tn_queue_ireceive()&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%3Adqueue%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%3Adqueue%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; [6612-] --&gt;</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_create?rev=1258466050">
        <dc:format>text/html</dc:format>
        <dc:date>2009-11-17T16:54:10+03:00</dc:date>
        <title>tn_queue_create()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_create?rev=1258466050</link>
        <description>


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

&lt;p&gt;

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

&lt;p&gt;
Память для управляющей структуры &lt;code&gt;dque&lt;/code&gt; и буфера сообщений должна быть выделена до момента создания очереди. Память может быть выделена на этапе компиляции (объявление глобальной переменной типа &lt;code&gt;TN_DQUE&lt;/code&gt; для управляющей структуры и массива с элементами типа &lt;code&gt;*void&lt;/code&gt; для буфера), либо динамически, если пользовательское приложение использует менеджер памяти. В последнем случае размер буфера сообщений должен быть равен (в байтах) &lt;code&gt;(sizeof(*void) · num_entries)&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_queue_create &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_DQUE   &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;dque,
                           &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;     &lt;span class=&quot;sy2&quot;&gt;**&lt;/span&gt;data_fifo,
                           TN_UWORD   num_entries
                          &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;dque&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на объект очереди сообщений. Структура &lt;code&gt;dque&lt;/code&gt; типа &lt;code&gt;TN_DQUE&lt;/code&gt; должна быть создана до момента вызова функции, статически или динамически&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;data_fifo&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на буфер сообщений, который представляет собой массив элементов типа &lt;code&gt;*void&lt;/code&gt;. Параметр может быть равен 0 или &lt;code&gt;TN_NULL&lt;/code&gt; - в этом случае сервисы будут возвращать код ошибки &lt;code&gt;TERR_OUT_OF_MEM&lt;/code&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;num_entries&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;размер буфера сообщений. Другими словами, максимальное количество сообщений, хранимых в очереди. Параметр должен быть равен количеству элементов в массиве &lt;code&gt;data_fifo&lt;/code&gt;. Если указатель &lt;code&gt;data_fifo&lt;/code&gt; равен 0 или &lt;code&gt;TN_NULL&lt;/code&gt;, значение параметра может быть произвольным.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;p&gt;&lt;div class=&quot;noteclassic&quot;&gt;
&lt;strong&gt;Внимание!&lt;/strong&gt; Количество элементов очереди должно быть фактически на 1 больше, чем планируется использовать. Т.е. если &lt;code&gt;num_entries = 2&lt;/code&gt;, то в очереди будет хранится один элемент и при попытке передачи второго сервис вернет ошибку. Не следует использовать очередь с одним элементом.

&lt;/div&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;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;&lt;span class=&quot;co2&quot;&gt;#define QUEUE_SIZE    8&lt;/span&gt;
&amp;nbsp;
TN_DQUE  queue                   TN_DATA;  &lt;span class=&quot;coMULTI&quot;&gt;/* объект типа очередь */&lt;/span&gt;
&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;     &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;queue_fifo&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;QUEUE_SIZE&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; TN_DATA;  &lt;span class=&quot;coMULTI&quot;&gt;/* буфер сообщений     */&lt;/span&gt;
&amp;nbsp;
tn_queue_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;queue, queue_fifo, QUEUE_SIZE&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/dqueue/intro#сервисы_управления_очередями_сообщений&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_queue_create()&quot; [11-] --&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/dqueue/tn_queue_delete?rev=1216586906">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T00:48:26+03:00</dc:date>
        <title>tn_queue_delete()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_delete?rev=1216586906</link>
        <description>




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

&lt;p&gt;

Функция предназначена для удаления очереди сообщений. Поле &lt;code&gt;id_dque&lt;/code&gt; очереди &lt;code&gt;dque&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_queue_delete &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_DQUE &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;dque&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;dque&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;sup&gt;&lt;a href=&quot;#fn__2&quot; name=&quot;fnt__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&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_DQUE  queue TN_DATA;
&amp;nbsp;
tn_queue_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;queue&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/dqueue/intro#сервисы_управления_очередями_сообщений&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_queue_delete()&quot; [15-] --&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;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; name=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&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/dqueue/tn_queue_ireceive?rev=1210081164">
        <dc:format>text/html</dc:format>
        <dc:date>2008-05-06T17:39:24+03:00</dc:date>
        <title>tn_queue_ireceive()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_ireceive?rev=1210081164</link>
        <description>




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

&lt;p&gt;

Функция предназначена для приема сообщения через очередь сообщений &lt;code&gt;dque&lt;/code&gt; &lt;em&gt;в прерывании&lt;/em&gt;. Принятое сообщение (точнее говоря &lt;em&gt;адрес сообщения&lt;/em&gt;) сохраняется по указателю &lt;code&gt;data_ptr&lt;/code&gt;.
&lt;/p&gt;

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

&lt;p&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_queue_ireceive &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_DQUE &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;dque, &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;**&lt;/span&gt;data_ptr&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;dque&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;data_ptr&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;em class=&quot;u&quot;&gt;замечание:&lt;/em&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_DQUE  queue TN_DATA;
&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;
    MY_MSG   message;
&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_queue_ireceive&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;queue, &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;message&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;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;message&lt;span class=&quot;sy2&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;gt;&lt;/span&gt;a&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;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/dqueue/intro#сервисы_управления_очередями_сообщений&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_queue_ireceive()&quot; [13-] --&gt;</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_isend_polling?rev=1265799397">
        <dc:format>text/html</dc:format>
        <dc:date>2010-02-10T13:56:37+03:00</dc:date>
        <title>tn_queue_isend_polling()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_isend_polling?rev=1265799397</link>
        <description>




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

&lt;p&gt;

Функция предназначена для отсылки сообщения &lt;code&gt;data_ptr&lt;/code&gt; через очередь сообщений &lt;code&gt;dque&lt;/code&gt; из прерывания.
&lt;/p&gt;

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

&lt;p&gt;
Если ни одна из задач системы не ожидает сообщение, параметр &lt;code&gt;data_ptr&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_queue_isend_polling &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_DQUE &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;dque, &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;data_ptr&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;dque&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;data_ptr&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;sup&gt;&lt;a href=&quot;#fn__2&quot; name=&quot;fnt__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&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_DQUE  queue TN_DATA;
&lt;span class=&quot;kw4&quot;&gt;extern&lt;/span&gt; MY_MSG   message;
&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;
    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;
    message.&lt;span class=&quot;me1&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;
    message.&lt;span class=&quot;me1&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&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_queue_isend_polling&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;queue, &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;message&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;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/dqueue/intro#сервисы_управления_очередями_сообщений&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_queue_isend_polling()&quot; [13-] --&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;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; name=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&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/dqueue/tn_queue_receive?rev=1245954337">
        <dc:format>text/html</dc:format>
        <dc:date>2009-06-25T22:25:37+03:00</dc:date>
        <title>tn_queue_receive()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_receive?rev=1245954337</link>
        <description>




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

&lt;p&gt;

Функция предназначена для приема сообщения через очередь сообщений &lt;code&gt;dque&lt;/code&gt;. Принятое сообщение (точнее говоря &lt;em&gt;адрес сообщения&lt;/em&gt;) сохраняется по указателю &lt;code&gt;data_ptr&lt;/code&gt;.
&lt;/p&gt;

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

&lt;p&gt;
Если буфер очереди сообщений пуст, и нет задач, ожидающих освобождение буфера, то задача, вызвавшая сервис переводится в состояние ожидания. Если значение параметра &lt;code&gt;timeout&lt;/code&gt; не равно &lt;code&gt;TN_WAIT_INFINITE&lt;/code&gt;, то задача &amp;quot;проснется&amp;quot; по истечении &lt;em&gt;&lt;code&gt;timeout&lt;/code&gt;&lt;/em&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_queue_receive &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_DQUE     &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;dque,
                            &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;       &lt;span class=&quot;sy2&quot;&gt;**&lt;/span&gt;data_ptr,
                            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;dque&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;data_ptr&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;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;em class=&quot;u&quot;&gt;замечание:&lt;/em&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;TN_DQUE  queue TN_DATA;    &lt;span class=&quot;coMULTI&quot;&gt;/* очередь сообщений      */&lt;/span&gt;
MY_MSG   &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;message;         &lt;span class=&quot;coMULTI&quot;&gt;/* указатель на сообщение */&lt;/span&gt;
&amp;nbsp;
tn_queue_receive&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;queue, &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;message, &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;&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;message&lt;span class=&quot;sy2&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;gt;&lt;/span&gt;a&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/dqueue/intro#сервисы_управления_очередями_сообщений&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_queue_receive()&quot; [12-] --&gt;</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_receive_polling?rev=1236200414">
        <dc:format>text/html</dc:format>
        <dc:date>2009-03-05T00:00:14+03:00</dc:date>
        <title>tn_queue_receive_polling()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_receive_polling?rev=1236200414</link>
        <description>




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

&lt;p&gt;

Функция предназначена для приема сообщения через очередь сообщений &lt;code&gt;dque&lt;/code&gt;. Принятое сообщение (точнее говоря &lt;em&gt;адрес сообщения&lt;/em&gt;) сохраняется по указателю &lt;code&gt;data_ptr&lt;/code&gt;. Если в очереди отсутствуют сообщение, то задача &lt;em&gt;не блокируется&lt;/em&gt;, а функция возвращает код ошибки &lt;code&gt;TERR_TIMEOUT&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Если буфер очереди сообщений не пуст, функция передает первое сообщение в буфере по указателю &lt;code&gt;data_ptr&lt;/code&gt;. Таким образом, после выхода из сервиса &lt;code&gt;data_ptr&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_queue_receive_polling &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_DQUE &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;dque, &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;**&lt;/span&gt;data_ptr&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;dque&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;data_ptr&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;em class=&quot;u&quot;&gt;замечание:&lt;/em&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;TN_DQUE  queue TN_DATA;    &lt;span class=&quot;coMULTI&quot;&gt;/* очередь сообщений      */&lt;/span&gt;
MY_MSG   &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;message;         &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_queue_receive_polling&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;queue, &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;message&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;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;message&lt;span class=&quot;sy2&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;gt;&lt;/span&gt;a&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;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/dqueue/intro#сервисы_управления_очередями_сообщений&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_queue_receive_polling()&quot; [14-] --&gt;</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_send?rev=1216586963">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T00:49:23+03:00</dc:date>
        <title>tn_queue_send()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_send?rev=1216586963</link>
        <description>




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

&lt;p&gt;

Функция предназначена для отсылки сообщения &lt;code&gt;data_ptr&lt;/code&gt; через очередь сообщений &lt;code&gt;dque&lt;/code&gt;.
&lt;/p&gt;

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

&lt;p&gt;
Если ни одна из задач системы не ожидает сообщение, параметр &lt;code&gt;data_ptr&lt;/code&gt; кладется в конец буфера сообщений очереди и задача продолжает выполнение. Если буфер сообщений заполнен, то задача, посылающая сообщение переводится в состояние ожидания до тех пор, пока хотя бы одно сообщение из буфера не будет принято. При этом задача может выйти из ожидания с кодом &lt;code&gt;TERR_TIMEOUT&lt;/code&gt; по истечении &lt;code&gt;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_queue_send &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_DQUE    &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;dque,
                         &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;       &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;data_ptr,
                         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;dque&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;data_ptr&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;code&gt;TN_WAIT_INFINITE&lt;/code&gt;, задача, посылающая сообщение будет ожидать освобождения буфера.&lt;/dd&gt;
&lt;/dl&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;sup&gt;&lt;a href=&quot;#fn__2&quot; name=&quot;fnt__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&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;TN_DQUE  queue TN_DATA;
MY_MSG   message;
&amp;nbsp;
message.&lt;span class=&quot;me1&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;
message.&lt;span class=&quot;me1&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;;
&amp;nbsp;
tn_queue_send&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;queue, &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;message, 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/dqueue/intro#сервисы_управления_очередями_сообщений&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_queue_send()&quot; [15-] --&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;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; name=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&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/dqueue/tn_queue_send_polling?rev=1216587013">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T00:50:13+03:00</dc:date>
        <title>tn_queue_send_polling()</title>
        <link>http://www.pic24.ru/doku.php/tnkernel/ref/dqueue/tn_queue_send_polling?rev=1216587013</link>
        <description>




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

&lt;p&gt;

Функция предназначена для отсылки сообщения &lt;code&gt;data_ptr&lt;/code&gt; через очередь сообщений &lt;code&gt;dque&lt;/code&gt; без блокирования вызывающей задачи.
&lt;/p&gt;

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

&lt;p&gt;
Если ни одна из задач системы не ожидает сообщение, параметр &lt;code&gt;data_ptr&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_queue_send_polling &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_DQUE &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;dque, &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;data_ptr&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;dque&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;data_ptr&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;sup&gt;&lt;a href=&quot;#fn__2&quot; name=&quot;fnt__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&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;TN_DQUE  queue TN_DATA;
MY_MSG   message;
&amp;nbsp;
message.&lt;span class=&quot;me1&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;
message.&lt;span class=&quot;me1&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&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_queue_send_polling&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;queue, &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;message&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;/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/dqueue/intro#сервисы_управления_очередями_сообщений&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:dqueue:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_queue_send_polling()&quot; [13-] --&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;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; name=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; 
данный код возврата возможен только в случае использования сервисов с проверкой параметров&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
</rdf:RDF>
