<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="http://wiki.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://wiki.pic24.ru/feed.php">
        <title>PIC24 tnkernel:ref:task</title>
        <description></description>
        <link>http://wiki.pic24.ru/</link>
        <image rdf:resource="http://wiki.pic24.ru/lib/images/favicon.ico" />
       <dc:date>2023-02-11T15:56:23+03:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro?rev=1288092619"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_activate?rev=1216592114"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_change_priority?rev=1216592527"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_create?rev=1216591967"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_delete?rev=1216592005"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_exit?rev=1261229584"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_iactivate?rev=1216592155"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_ireference?rev=1245824828"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_irelease_wait?rev=1216592343"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_iresume?rev=1216592282"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_isuspend?rev=1241446672"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_iwakeup?rev=1216592312"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_reference?rev=1245823532"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_release_wait?rev=1216592485"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_resume?rev=1216592215"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_sleep?rev=1216592427"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_suspend?rev=1216592187"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_terminate?rev=1216592083"/>
                <rdf:li rdf:resource="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_wakeup?rev=1216592455"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://wiki.pic24.ru/lib/images/favicon.ico">
        <title>PIC24</title>
        <link>http://wiki.pic24.ru/</link>
        <url>http://wiki.pic24.ru/lib/images/favicon.ico</url>
    </image>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro?rev=1288092619">
        <dc:format>text/html</dc:format>
        <dc:date>2010-10-26T15:30:19+03:00</dc:date>
        <title>TNKernel : Задачи</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro?rev=1288092619</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; [14-52] --&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;em&gt;одновременно&lt;/em&gt; с другими задачами, что обеспечивается разделением процессорного времени между ними. Каждая задача может быть представлена как независимое приложение, которое владеет уникальными ресурсами (регистры процессора, указатель стека и т.п.). Эти ресурсы называются контекстом задачи, а время в течении которого задача выполняется можно назвать временем &lt;em&gt;в контексте задачи&lt;/em&gt;.
&lt;/p&gt;

&lt;p&gt;
Когда текущая задача приостанавливает выполнение (в случае прерывания или вызова сервиса), осуществляется &lt;em&gt;переключение контекста&lt;/em&gt; - контекст текущей задачи сохраняется в ее стеке, а контекст наиболее приоритетной задачи из готовых к выполнению восстанавливается. Этот механизм в TNKernel называется &amp;quot;диспетчером&amp;quot;.
&lt;/p&gt;

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

&lt;p&gt;
В TNKernel используется приоритетное вытесняющее планирование, основанное на приоритете, назначаемом каждой задаче, при этом чем меньше величина, тем выше уровень приоритета. В TNKernel доступно 32 уровня приоритета для 32-битных контроллеров (ARM, MIPS) и 16 уровней приоритета для 16-битных контроллеров (PIC24/dsPIC).
&lt;/p&gt;

&lt;p&gt;
Приоритеты 0 (самый высокий) и 31(&lt;strong&gt;15&lt;/strong&gt;) (самый низкий) зарезервированы для системных задач. Для пользовательских задач доступны приоритеты от 1 до 30(&lt;strong&gt;14&lt;/strong&gt;) включительно. В TNKernel несколько задач могут иметь одинаковый приоритет.

&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://wiki.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; [53-2877] --&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;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;RUNNING&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;READY&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;Задача готова к выполнению, но не может получить , так как в данный момент выполняется задача с более высоким (или равным) приоритетом. В TNKernel оба состояния &lt;code&gt;RUNNING&lt;/code&gt; и &lt;code&gt;READY&lt;/code&gt; называются &lt;code&gt;RUNNABLE&lt;/code&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;WAIT/SUSPEND&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;Когда задача находится в состоянии &lt;code&gt;WAIT/SUSPEND&lt;/code&gt; она не может начать выполнение до тех пор пока не выполнится условие, которого задача ожидает. При входе в состояние &lt;code&gt;WAIT/SUSPEND&lt;/code&gt; контекст задачи сохраняется, при выходе из этого состояния контекст восстанавливается. Состояние &lt;code&gt;WAIT/SUSPEND&lt;/code&gt; делится на три типа:
&lt;/p&gt;
&lt;table class = &quot;fpl&quot;&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;WAITING&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача находится в состоянии &lt;code&gt;WAIT/SUSPEND&lt;/code&gt; до тех пор пока не наступит событие, которого она ожидает - завершится таймаут, освободится семафор, установится флаг и т.п.		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;SUSPENDED&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача перемещена в состояние &lt;code&gt;WAIT/SUSPEND&lt;/code&gt; другой задачей или самостоятельно путем вызова специального сервиса		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;WAITING_SUSPENDED&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача находится как в состоянии &lt;code&gt;WAITING&lt;/code&gt;, так и в состоянии &lt;code&gt;SUSPENDED&lt;/code&gt; (ожидает события и приостановлена специальным сервисом). Если задача освобождается от состояния &lt;code&gt;WAITING&lt;/code&gt; (ожидаемое событие наступило), то она остается в состоянии &lt;code&gt;SUSPENDED&lt;/code&gt; и наоборот.		&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;DORMANT&lt;/code&gt; &lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;Задача уже создана, но еще ни разу не запускалась&lt;/dd&gt;
&lt;dd&gt;Выполнение задачи завершено с помощью специального таймера.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
Можно так же выделить состояние задачи, в котором она еще не создана - состояние &lt;code&gt;NON-EXISTENT&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Граф перехода между состояниями изображен на рисунке:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/task/tn_task_states_diagram.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:task:tn_task_states_diagram.png&quot;&gt;&lt;img src=&quot;http://wiki.pic24.ru/lib/exe/fetch.php/tnkernel/ref/task/tn_task_states_diagram.png&quot; class=&quot;mediacenter&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Сервисы, вызов которых приводит к изменению состояния задачи указаны возле направлений перехода. Для простоты префикс &lt;code&gt;tn_task_&lt;/code&gt; и префикс &lt;code&gt;i&lt;/code&gt; (вызов из прерывания) опущены. 
&lt;/p&gt;

&lt;p&gt;
Переход задачи из состояния &lt;code&gt;READY&lt;/code&gt; в состояние &lt;code&gt;RUNNING&lt;/code&gt; происходит тогда, когда ее приоритет наивысший из приоритетов всех задач находящихся в состоянии &lt;code&gt;READY&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Переход задачи из состояния &lt;code&gt;RUNNING&lt;/code&gt; в состояние &lt;code&gt;READY&lt;/code&gt; происходит тогда, когда ее приоритет меньше чем приоритет одной из задач, находящихся в состоянии &lt;code&gt;READY&lt;/code&gt;.
&lt;/p&gt;

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

&lt;p&gt;
Задача переходит из состояния &lt;code&gt;WAITING&lt;/code&gt; в состояние &lt;code&gt;READY&lt;/code&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://wiki.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; [2878-7334] --&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;code&gt;WAITING/SUSPEND&lt;/code&gt; или &lt;code&gt;DORMANT&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Если несколько задач с &lt;em&gt;разными приоритетами&lt;/em&gt; готовы к выполнению (т.е. находятся в состоянии &lt;code&gt;READY&lt;/code&gt;), управление получит задача с наивысшим приоритетом.
&lt;/p&gt;

&lt;p&gt;
Если несколько задач с &lt;em&gt;одинаковым приоритетом&lt;/em&gt; готовы к выполнению, то управление получит задача, которая перешла в состояние &lt;code&gt;READY&lt;/code&gt; раньше остальных, т.е. первой стоит в очереди готовых к выполнению.

&lt;/p&gt;
&lt;blockquote&gt;&lt;div class=&quot;no&quot;&gt;
 &lt;strong&gt;Пример:&lt;/strong&gt; пусть задача &lt;strong&gt;А&lt;/strong&gt; имеет приоритет 1, задачи &lt;strong&gt;Б&lt;/strong&gt;, &lt;strong&gt;В&lt;/strong&gt;, &lt;strong&gt;Г&lt;/strong&gt;, &lt;strong&gt;Д&lt;/strong&gt; - приоритет 3, задачи &lt;strong&gt;Е&lt;/strong&gt; и &lt;strong&gt;Ж&lt;/strong&gt; - приоритет 4, задача &lt;strong&gt;З&lt;/strong&gt; - приоритет 5. Если все задачи находятся в состоянии &lt;code&gt;READY&lt;/code&gt; последовательность выполнения будет следующая: &lt;br/&gt;
 &lt;br/&gt;
 1. Задача &lt;strong&gt;А&lt;/strong&gt; с наиболее высоким приоритетом (приоритет 1)&lt;br/&gt;
 2. Задачи &lt;strong&gt;Б&lt;/strong&gt;, &lt;strong&gt;В&lt;/strong&gt;, &lt;strong&gt;Г&lt;/strong&gt; и &lt;strong&gt;Д&lt;/strong&gt; в той последовательности в которой они перешли в состояние &lt;code&gt;READY&lt;/code&gt; (приоритет 3)&lt;br/&gt;
 3. Задачи &lt;strong&gt;Е&lt;/strong&gt; и &lt;strong&gt;Ж&lt;/strong&gt; в той последовательности, в которой они перешли в состояние &lt;code&gt;READY&lt;/code&gt; (приоритет 4)&lt;br/&gt;
 4. Задача &lt;strong&gt;З&lt;/strong&gt;, так как она имеет наиболее низкий приоритет (приоритет 5)&lt;/div&gt;&lt;/blockquote&gt;

&lt;p&gt;

В TNKernel задачи с одинаковым приоритетом могут получать управление в соответствии с правилами round-robin планировщика (планировщика карусельного типа). В этом случае каждой задаче выделяется квант времени. Квант времени может быть выбран для каждого приоритета.

&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://wiki.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; [7335-9884] --&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;p&gt;
Одна из этих задач (&lt;code&gt;timer_task&lt;/code&gt;) имеет наивысший приоритет (0) и обеспечивает функционирование системного таймера.
&lt;/p&gt;

&lt;p&gt;
Вторая задача (&lt;code&gt;idle_task&lt;/code&gt;) имеет минимальный приоритет (31/15) и получает управление тогда, когда нет пользовательских задач готовых к выполнению. Эта задача может использоваться для сбора статистики или перевода процессора в состояние пониженного потребления энергии.
&lt;/p&gt;

&lt;p&gt;
Размеры стеков системных задач определяет пользователь, исходя из особенностей приложение. Кроме того, необходимо объявить функцию &lt;code&gt;idle_user_cb()&lt;/code&gt;, которая циклически вызывается из задачи &lt;code&gt;idle_task&lt;/code&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://wiki.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; [9885-11127] --&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_TCB_S_STRUCT
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    TN_UWORD                &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; task_stk;
    CDLL_QUEUE_S              task_queue;
    CDLL_QUEUE_S              timer_queue;
    CDLL_QUEUE_S              block_queue;
    CDLL_QUEUE_S              create_queue;
    CDLL_QUEUE_S              mutex_queue;
    CDLL_QUEUE_S            &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; pwait_queue;
    &lt;span class=&quot;kw4&quot;&gt;struct&lt;/span&gt; TN_TCB_S_STRUCT  &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; blk_task;
&amp;nbsp;
    TN_UWORD                &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; stk_start;
    TN_UWORD                  stk_size;
&amp;nbsp;
    &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;                    &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; task_func_addr;
    &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;                    &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; task_func_param;
&amp;nbsp;
    TN_UWORD                  base_priority;
    TN_UWORD                  priority;
    TN_UWORD                  id_task;
&amp;nbsp;
    TN_WORD                   task_state;
    TN_UWORD                  task_wait_reason;
    TN_WORD                   task_wait_rc;
    TN_UWORD                  tick_count;
    TN_UWORD                  tslice_count;
&amp;nbsp;
    TN_UWORD                  ewait_pattern;
    TN_UWORD                  ewait_mode;
&amp;nbsp;
    &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;                    &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; data_elem;
&amp;nbsp;
    TN_UWORD                  activate_count;
    TN_UWORD                  wakeup_count;
    TN_UWORD                  suspend_count;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; TN_TCB_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;task_stk&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Указатель на вершину стека задачи		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;task_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;timer_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_queue&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Элемент очереди для включения задачи в список заблокированных задач (используется в протоколе priority ceiling системных мютексов)		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;create_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;mutex_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;pwait_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;blk_task&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Указатель на структуру задачи которая заблокировала эту задачу (используется в протоколе priority ceiling системных мютексов)		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;stk_start&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Указатель на базовый адрес стека задачи		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;stk_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;task_func_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;task_func_param&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Укащатель на параметр, передаваемый в функцию задачи		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;base_priority&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Базовый приоритет задачи		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;priority&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_task&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Поле идентификации объекта как задачи		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;task_state&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Состояние задачи		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;task_wait_reason&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Причина нахождения в состоянии &lt;code&gt;WAITING&lt;/code&gt;		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;task_wait_rc&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Код, возвращаемый задачей при выходе из состояния &lt;code&gt;WAITING&lt;/code&gt; (причина, по которой задача вышла из состояния ожидания)		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;tick_count&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Время до истечения таймаута в системных тиках		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;tslice_count&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Счетчик кванта времени для round-robin планирования в системных тиках		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;ewait_pattern&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Маска ожидаемых флагов		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;ewait_mode&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_elem&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Указатель на очередь сообщений		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;activate_count&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Счетчик запросов на активацию задачи		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;wakeup_count&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Счетчик запросов на пробуждение задачи		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;suspend_count&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://wiki.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; [11128-16181] --&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_create&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_create&quot;&gt;tn_task_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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_delete&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_delete&quot;&gt;tn_task_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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/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://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_exit&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_exit&quot;&gt;tn_task_exit()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_terminate&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_terminate&quot;&gt;tn_task_terminate()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_activate&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_activate&quot;&gt;tn_task_activate()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_iactivate&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_iactivate&quot;&gt;tn_task_iactivate()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;row9&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;row10&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_suspend&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_suspend&quot;&gt;tn_task_suspend()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_isuspend&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_isuspend&quot;&gt;tn_task_isuspend()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;row12&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_resume&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_resume&quot;&gt;tn_task_resume()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;row13&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_iresume&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_iresume&quot;&gt;tn_task_iresume()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;row14&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;row15&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_sleep&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_sleep&quot;&gt;tn_task_sleep()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;row16&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_wakeup&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_wakeup&quot;&gt;tn_task_wakeup()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;row17&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_iwakeup&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_iwakeup&quot;&gt;tn_task_iwakeup()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;row18&quot;&gt;
		&lt;td class=&quot;col0&quot; colspan=&quot;3&quot;&gt; &lt;strong&gt;Форсированный вывод задачи из состояния &lt;code&gt;WAITING&lt;/code&gt;&lt;/strong&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row19&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_release_wait&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_release_wait&quot;&gt;tn_task_release_wait()&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Форсированный вывод задачи из состояния &lt;code&gt;WAITING&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;row20&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_irelease_wait&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_irelease_wait&quot;&gt;tn_task_irelease_wait()&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Форсированный вывод задачи из состояния &lt;code&gt;WAITING&lt;/code&gt; в прерывании &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;row21&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;row22&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_change_priority&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_change_priority&quot;&gt;tn_task_change_priority()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;row23&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;row24&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_reference&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_reference&quot;&gt;tn_task_reference()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row25&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;   &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_ireference&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_ireference&quot;&gt;tn_task_ireference()&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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Atask%3Aintro&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/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://wiki.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; [16182-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_activate?rev=1216592114">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:15:14+03:00</dc:date>
        <title>tn_task_activate()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_activate?rev=1216592114</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Atn_task_activate&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_activate&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция активизирует задачу - переводит задачу &lt;code&gt;task&lt;/code&gt; из состояния &lt;em&gt;DORMANT&lt;/em&gt; в состояние &lt;em&gt;READY&lt;/em&gt;. 
&lt;/p&gt;

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

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;TN_RETVAL tn_task_activate(TN_TCB *task);&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB активизируемой задачи&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
&lt;br/&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_OVERFLOW&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;активируемая задача находится в состоянии, отличном от &lt;em&gt;DORMANT&lt;/em&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_TCB tcb_Task1  TN_DATA;
&amp;nbsp;
&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;need_activate_task_1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    tn_task_activate&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;tcb_Task1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;coMULTI&quot;&gt;/* ... */&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_activate()&quot; [11-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_change_priority?rev=1216592527">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:22:07+03:00</dc:date>
        <title>tn_task_change_priority()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_change_priority?rev=1216592527</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Atn_task_change_priority&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_change_priority&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция изменяет натуральный (заданный при создании) приоритет задачи.
&lt;/p&gt;

&lt;p&gt;
Функция может изменять приоритет как текущей, так и любой другой задачи, которая находится в состоянии отличном от &lt;em&gt;DORMANT&lt;/em&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;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_task_change_priority &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_TCB &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;task, TN_UWORD new_priority&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB задачи, изменяющей приоритет. Задача может изменить свой приоритет.&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;new_priority&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;новый приоритет задачи от 1 до 14 для 16-битных контроллеров и от 1 до 30 - для 32-битных контроллеров. Если значение параметра равно 0, то задача восстанавливает базовый приоритет, назначенный при создании.&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;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;dd&gt;попытка изменения приоритета задачи, находящейся в состоянии &lt;em&gt;DORMANT&lt;/em&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_task_change_priority&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;myTask, &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_change_priority()&quot; [11-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_create?rev=1216591967">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:12:47+03:00</dc:date>
        <title>tn_task_create()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_create?rev=1216591967</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Atn_task_create&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция предназначена для создания задачи. Поле &lt;code&gt;id_task&lt;/code&gt; TCB задачи &lt;code&gt;task&lt;/code&gt; должно быть равно нулю до момента создания задачи, таким образом уже созданные задачи защищаются от повторного создания. Память для управляющей структуры TCB &lt;code&gt;task&lt;/code&gt; и для стека задачи должна быть выделена до момента создания задачи. Память может быть выделена на этапе компиляции (объявление глобальной переменной типа &lt;code&gt;TN_TASK&lt;/code&gt; для TCB задачи и массива с элементами типа &lt;code&gt;TN_UWORD&lt;/code&gt; для стека задачи), либо динамически, если пользовательское приложение использует менеджер памяти.
&lt;/p&gt;

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

&lt;p&gt;
Стек задачи - это массив элементов типа &lt;code&gt;TN_UWORD&lt;/code&gt;, разрядность &lt;code&gt;TN_UWORD&lt;/code&gt; соответствует разрядности машинного слова микроконтроллера. Для ARM7 &lt;code&gt;sizeof(TN_UWORD) = 4&lt;/code&gt;, для PIC24/dsPIC &lt;code&gt;sizeof(TN_UWORD) = 2&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Параметр &lt;code&gt;task_stack_start&lt;/code&gt; является указателем на вершину стека. Если в используемой архитектуре стек растет от младшего адреса к старшему (PIC24/dsPIC), то параметр &lt;code&gt;task_stack_start&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_task_create&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_TCB   &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;task,
                         &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;     &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;task_func&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&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;param&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;,
                         TN_UWORD priority,
                         TN_UWORD &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;task_stack_start,
                         TN_UWORD task_stack_size,
                         &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;     &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;param,
                         TN_UWORD option
                        &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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель TCB задачи. Структура TCB должна быть создана до момента вызова функции, статически или динамически&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;(*task_func)(void *param)&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на функцию задачи. Функция задачи имеет следующий прототип: &lt;code&gt;void (*task_func)(void *param)&lt;/code&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;priority&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;приоритет задачи. Пользовательские задачи могут иметь приоритет от 1 до &lt;code&gt;TN_NUM_PRIORITY - 1&lt;/code&gt; включительно(приоритеты 0 и &lt;code&gt;TN_NUM_PRIORITY&lt;/code&gt; зарезервированы для служебных задач)&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;task_stack_start&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на стек задачи. Для PIC24/dsPIC - указатель на первый элемент массива стека задачи&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;task_stack_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;param&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;option&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;параметр создания задачи, может принимать одно из двух значений:
&lt;/p&gt;
&lt;table class = &quot;fpl&quot;&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TN_TASK_DORMANT_ON_CREATION&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 после создания задача переводится в состояние &lt;em&gt;DORMANT&lt;/em&gt;		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TASK_START_ON_CREATION&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 после создания задача переводится в состояние &lt;em&gt;RUNNABLE&lt;/em&gt;  		&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
  
&lt;p&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;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_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 TASK_1_STACK_SIZE      128              /* размер стека задачи */&lt;/span&gt;
&lt;span class=&quot;co2&quot;&gt;#define TASK_1_PRIORITY        11               /* приоритет задачи    */&lt;/span&gt;
&amp;nbsp;
TN_TCB   tcb_Task1 TN_DATA;                     &lt;span class=&quot;coMULTI&quot;&gt;/* TCB задачи */&lt;/span&gt;
TN_UWORD stk_Task1&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;TASK_1_STACK_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;
&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; TN_TASK Task1&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;par&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;                  &lt;span class=&quot;coMULTI&quot;&gt;/* прототип функции задачи */&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;coMULTI&quot;&gt;/* ... создание задачу... */&lt;/span&gt;
&amp;nbsp;
    tn_task_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;tcb_Task1,
                   Task1,
                   TASK_1_PRIORITY,
                   stk_Task1,
                   TASK_1_STACK_SIZE,
                   TN_NULL,
                   TN_TASK_START_ON_CREATION
                  &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;
&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; TN_TASK Task1 &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;par&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;
    &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;;;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        tn_task_sleep&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&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;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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_create()&quot; [11-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_delete?rev=1216592005">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:13:25+03:00</dc:date>
        <title>tn_task_delete()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_delete?rev=1216592005</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Atn_task_delete&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция удаляет задачу, находящуюся в состоянии &lt;em&gt;DORMANT&lt;/em&gt;. Если удаляемая задача будет находиться в другом состоянии, сервис вернет код ошибки.
&lt;/p&gt;

&lt;p&gt;
Функция сбрасывает поле &lt;code&gt;id_task&lt;/code&gt; TCB задачи, и удаляет задачу из списка доступных в системе. Освободившуюся память можно использовать для создания другой задачи. Процесс удаления необратимый - для запуска удаленной задачи нужно создать ее заново функцией &lt;code&gt;tn_task_create&lt;/code&gt;.
&lt;/p&gt;

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

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;TN_RETVAL tn_task_delete(TN_TCB *task);&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB удаляемой задачи&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
&lt;br/&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;dd&gt;удаляемая задача находится в состоянии, отличном от &lt;em&gt;DORMANT&lt;/em&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_TCB tcb_Task1  TN_DATA;
&amp;nbsp;
&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;need_delete_task_1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    tn_task_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;tcb_Task1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;coMULTI&quot;&gt;/* ... */&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_delete()&quot; [11-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_exit?rev=1261229584">
        <dc:format>text/html</dc:format>
        <dc:date>2009-12-19T16:33:04+03:00</dc:date>
        <title>tn_task_exit()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_exit?rev=1261229584</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Atn_task_exit&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_exit&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция прекращает выполнение текущей задачи, при этом задача перемещается в состояние &lt;em&gt;DORMANT&lt;/em&gt;. Все ресурсы (&lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/mutex/intro&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mutex:intro&quot;&gt;мютексы&lt;/a&gt;) занятые задачей разблокируются. Задача может быть дополнительно удалена, если сервис вызван с параметром &lt;code&gt;TN_EXIT_AND_DELETE_TASK&lt;/code&gt;.
&lt;/p&gt;

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

&lt;p&gt;
Задача может быть выведена из состояния &lt;em&gt;DORMANT&lt;/em&gt; с помощью сервисов &lt;code&gt;tn_task_activate()&lt;/code&gt; и &lt;code&gt;tn_task_iactivate()&lt;/code&gt;. В этом случае задача будет запущена с точки входа в функцию задачи и поставлена в очередь готовых к выполнению (этого же приоритета) последней.
&lt;/p&gt;

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

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

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;void tn_task_exit (TN_UWORD attr);&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;attr&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;параметр, который указывает, будет ли задача удалена после прекращения выполнения:
&lt;/p&gt;
&lt;table class = &quot;fpl&quot;&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TN_EXIT_TASK&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 функция прекратит выполнение текущей задачи. Для запуска задачи необходимо использовать сервисы &lt;code&gt;tn_task_activate()&lt;/code&gt; или &lt;code&gt;tn_task_iactivate()&lt;/code&gt;		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TN_EXIT_AND_DELETE_TASK&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 после прекращения выполнения задача будет удалена. Для запуска удаленной задачи нужно создать ее заново функцией &lt;code&gt;tn_task_create&lt;/code&gt;		&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
  
&lt;p&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;br/&gt;
 
&lt;strong&gt;Возвращаемые значения:&lt;/strong&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;&lt;span class=&quot;kw4&quot;&gt;extern&lt;/span&gt; TN_TCB tcb_Task1  TN_DATA;
&amp;nbsp;
&lt;span class=&quot;coMULTI&quot;&gt;/* ... */&lt;/span&gt;
&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; Task1 &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;param&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;for&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;;;&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;need_restart_task_1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        tn_task_exit&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_EXIT_TASK&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;#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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_exit()&quot; [11-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_iactivate?rev=1216592155">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:15:55+03:00</dc:date>
        <title>tn_task_iactivate()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_iactivate?rev=1216592155</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Atask%3Atn_task_iactivate&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_iactivate&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция активизирует задачу из прерывания - переводит задачу &lt;code&gt;task&lt;/code&gt; из состояния &lt;em&gt;DORMANT&lt;/em&gt; в состояние &lt;em&gt;READY&lt;/em&gt;. 
&lt;/p&gt;

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

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;TN_RETVAL tn_task_iactivate(TN_TCB *task);&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB активизируемой задачи&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
&lt;br/&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_OVERFLOW&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;активируемая задача находится в состоянии, отличном от &lt;em&gt;DORMANT&lt;/em&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_TCB tcb_Task1  TN_DATA;
&amp;nbsp;
tn_sys_interrupt &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;_T3Interrupt&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;
    tn_task_iactivate&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;tcb_Task1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;     &lt;span class=&quot;coMULTI&quot;&gt;/* активация задачи tcb_Task1 */&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_iactivate()&quot; [11-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_ireference?rev=1245824828">
        <dc:format>text/html</dc:format>
        <dc:date>2009-06-24T10:27:08+03:00</dc:date>
        <title>tn_task_ireference()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_ireference?rev=1245824828</link>
        <description>




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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Atask%3Atn_task_ireference&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция предназначена для получения информации о задаче в прерывании. После вызова функции заполняется структура типа &lt;code&gt;TN_TASK_REF&lt;/code&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_TASK_REF
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    TN_TASK_STATE       state;
    TN_TASK_WAIT_REASON wait_reason;
    TN_UWORD            base_priority;
    TN_UWORD            current_priority;
    TN_TIMEOUT          timeout;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; TN_TASK_REF;&lt;/pre&gt;
&lt;p&gt;
В состав структура &lt;code&gt;TN_TASK_REF&lt;/code&gt; входят следующие элементы:
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;state&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;состояние задачи, может принимать одно из следующих значений:
&lt;/p&gt;
&lt;table class = &quot;fpl&quot;&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_STATE_RUNNABLE&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача находится в очереди готовых к выполнению		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_STATE_WAIT&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает событие		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_STATE_SUSPEND&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача приостановлена		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_STATE_DORMANT&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача создана, но еще не запущена		&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;wait_reason&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;событие, которого ожидает задача, может принимать одно из следующих значений:
&lt;/p&gt;
&lt;table class = &quot;fpl&quot;&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_SLEEP&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает таймаута, переведена в состояние ожидания функцией &lt;code&gt;tn_task_sleep()&lt;/code&gt;		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_SEM&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает освобождения семафора		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_EVENT&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает флаг		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_DQUE_WSEND&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает освобождение очереди сообщений		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_DQUE_WRECEIVE&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает сообщения		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_MUTEX_C&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает освобождения ресурса, заблокированного &amp;quot;priority ceiling&amp;quot; мютексом &lt;img src=&quot;http://wiki.pic24.ru/lib/images/smileys/fixme.gif&quot; class=&quot;middle&quot; alt=&quot;FIXME&quot; /&gt;		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_MUTEX_C_BLK&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает освобождения ресурса, заблокированного &amp;quot;priority ceiling&amp;quot; мютексом &lt;img src=&quot;http://wiki.pic24.ru/lib/images/smileys/fixme.gif&quot; class=&quot;middle&quot; alt=&quot;FIXME&quot; /&gt;		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_MUTEX_I&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает освобождения ресурса, заблокированного &amp;quot;priority inheritance&amp;quot; мютексом		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_WFIXMEM&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает освобождения блока памяти фиксированного размера		&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;base_priority&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;current_priority&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;TSK_STATE_RUNNABLE&lt;/code&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;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;TN_RETVAL tn_task_ireference&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_TCB &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;task, TN_TASK_REF &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;ref&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB задачи&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;ref&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&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;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_TCB tcb_Task1  TN_DATA;
TN_TASK_REF  task_info;
&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;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;tn_task_ireference&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;tcb_Task1, &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;task_info&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;task_info.&lt;span class=&quot;me1&quot;&gt;state&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;==&lt;/span&gt; TSK_STATE_SUSPEND&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
            tn_task_iresume&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;tcb_Task1&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_ireference()&quot; [12-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_irelease_wait?rev=1216592343">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:19:03+03:00</dc:date>
        <title>tn_task_irelease_wait()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_irelease_wait?rev=1216592343</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Atask%3Atn_task_irelease_wait&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_irelease_wait&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

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

&lt;p&gt;
Если задача находится в состоянии &lt;em&gt;WAITING&lt;/em&gt;, она переводится в состояние &lt;em&gt;READY&lt;/em&gt;. Если задача находится в состоянии &lt;em&gt;WAITING_SUSPEND&lt;/em&gt;, она переводится в состояние &lt;em&gt;SUSPEND&lt;/em&gt;.
Если задача находилась в состоянии &lt;em&gt;WAITING&lt;/em&gt; по причине вызова функции &lt;code&gt;tn_task_sleep()&lt;/code&gt;, вызов функции &lt;code&gt;tn_task_irelease_wait()&lt;/code&gt; с указателем на эту задачу кроме всего прочего сбрасывает счетчик попыток пробуждения задачи.
Функция не может использоваться для активации задачи, которая находится в состоянии &lt;em&gt;SUSPEND&lt;/em&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_task_irelease_wait &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_TCB &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;task&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB задачи&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;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;dd&gt;задача находится в состоянии, отличном от &lt;em&gt;WAITING&lt;/em&gt; или &lt;em&gt;WAITING_SUSPEND&lt;/em&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_TCB tcb_Task1  TN_DATA;
&amp;nbsp;
tn_sys_interrupt &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;_T3Interrupt&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;
    tn_task_irelease_wait&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;tcb_Task1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;       &lt;span class=&quot;coMULTI&quot;&gt;/* восстановление задачи tcb_Task1 */&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_iresume?rev=1216592282">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:18:02+03:00</dc:date>
        <title>tn_task_iresume()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_iresume?rev=1216592282</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Atask%3Atn_task_iresume&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_iresume&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция предназначена для вывода задачи из состояния &lt;em&gt;SUSPENDED&lt;/em&gt; в прерывании.
&lt;/p&gt;

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

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

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;TN_RETVAL tn_task_iresume (TN_TCB *task);&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB восстанавливаемой задачи&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
&lt;br/&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_WSTATE&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка восстановления задачи, которая находится в состоянии, отличном от &lt;em&gt;WAITING_SUSPENDED&lt;/em&gt; или &lt;em&gt;SUSPENDED&lt;/em&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_TCB tcb_Task1  TN_DATA;
&amp;nbsp;
tn_sys_interrupt &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;_T3Interrupt&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;
    tn_task_iresume&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;tcb_Task1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;       &lt;span class=&quot;coMULTI&quot;&gt;/* восстановление задачи tcb_Task1 */&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_iresume()&quot; [11-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_isuspend?rev=1241446672">
        <dc:format>text/html</dc:format>
        <dc:date>2009-05-04T18:17:52+03:00</dc:date>
        <title>tn_task_isuspend()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_isuspend?rev=1241446672</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Atask%3Atn_task_isuspend&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_isuspend&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция приостанавливает выполнение задачи, переводя ее в состояние &lt;em&gt;SUSPENDED&lt;/em&gt; из прерывания. Если задача находится в состоянии &lt;em&gt;WAITING&lt;/em&gt;, она переводится в состояние &lt;em&gt;WAITING_SUSPENDED&lt;/em&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;code&quot;&gt;TN_RETVAL tn_task_isuspend (TN_TCB *task);&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB приостанавливаемой задачи&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
&lt;br/&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;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;/span&gt;&lt;/dt&gt;
&lt;dd&gt;некорректное значение параметра&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_NOEXS&lt;/code&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;/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_OVERFLOW&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка приостановки выполнения задачи, которая уже находится в состоянии &lt;em&gt;SUSPENDED&lt;/em&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WSTATE&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка приостановки выполнения задачи, которая находится в состоянии &lt;em&gt;DORMANT&lt;/em&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_TCB tcb_Task1  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;
    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;
    tn_task_isuspend&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;tcb_Task1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;      &lt;span class=&quot;coMULTI&quot;&gt;/* приостановка выполнения задачи tcb_Task1 */&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_isuspend()&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;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://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_iwakeup?rev=1216592312">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:18:32+03:00</dc:date>
        <title>tn_task_iwakeup()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_iwakeup?rev=1216592312</link>
        <description>




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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_int.png?id=tnkernel%3Aref%3Atask%3Atn_task_iwakeup&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_int.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_iwakeup&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция предназначена для пробуждения приостановленной с помощью функции &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_sleep&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_sleep&quot;&gt;tn_task_sleep()&lt;/a&gt; задачи в прерывании. При этом задача продолжит выполнение с места возврата из функции &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_sleep&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_sleep&quot;&gt;tn_task_sleep()&lt;/a&gt; без ошибок.
&lt;/p&gt;

&lt;p&gt;
Если функция пытается пробудить задачу, которая еще не приостановлена, счетчик запросов на пробуждение будет увеличен на 1.
&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_task_wakeup &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_TCB &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;task&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB пробуждаемой задачи&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
&lt;br/&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;dd&gt;попытка пробуждения задачи, находящейся в состоянии &lt;em&gt;DORMANT&lt;/em&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_OVERFLOW&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;счетчик запросов на пробуждение переполнен (=1)&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_TCB tcb_Task1  TN_DATA;
&amp;nbsp;
tn_sys_interrupt &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;_T3Interrupt&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;
    tn_task_iwakeup&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;tcb_Task1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;       &lt;span class=&quot;coMULTI&quot;&gt;/* активация задачи tcb_Task1 */&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_iwakeup()&quot; [12-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_reference?rev=1245823532">
        <dc:format>text/html</dc:format>
        <dc:date>2009-06-24T10:05:32+03:00</dc:date>
        <title>tn_task_reference()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_reference?rev=1245823532</link>
        <description>




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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Atn_task_reference&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция предназначена для получения информации о задаче, такой как текущее состояние, причина ожидания, время таймаута, текущий приоритет и др. После вызова функции заполняется структура типа &lt;code&gt;TN_TASK_REF&lt;/code&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_TASK_REF
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    TN_TASK_STATE       state;
    TN_TASK_WAIT_REASON wait_reason;
    TN_UWORD            base_priority;
    TN_UWORD            current_priority;
    TN_TIMEOUT          timeout;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; TN_TASK_REF;&lt;/pre&gt;
&lt;p&gt;
В состав структура &lt;code&gt;TN_TASK_REF&lt;/code&gt; входят следующие элементы:
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;state&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;состояние задачи, может принимать одно из следующих значений:
&lt;/p&gt;
&lt;table class = &quot;fpl&quot;&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_STATE_RUNNABLE&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача находится в очереди готовых к выполнению		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_STATE_WAIT&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает событие		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_STATE_SUSPEND&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача приостановлена		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_STATE_DORMANT&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача создана, но еще не запущена		&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;wait_reason&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;событие, которого ожидает задача, может принимать одно из следующих значений:
&lt;/p&gt;
&lt;table class = &quot;fpl&quot;&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_SLEEP&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает таймаута, переведена в состояние ожидания функцией &lt;code&gt;tn_task_sleep()&lt;/code&gt;		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_SEM&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает освобождения семафора		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_EVENT&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает флаг		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_DQUE_WSEND&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает освобождение очереди сообщений		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_DQUE_WRECEIVE&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает сообщения		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_MUTEX_C&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает освобождения ресурса, заблокированного &amp;quot;priority ceiling&amp;quot; мютексом &lt;img src=&quot;http://wiki.pic24.ru/lib/images/smileys/fixme.gif&quot; class=&quot;middle&quot; alt=&quot;FIXME&quot; /&gt;		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_MUTEX_C_BLK&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает освобождения ресурса, заблокированного &amp;quot;priority ceiling&amp;quot; мютексом &lt;img src=&quot;http://wiki.pic24.ru/lib/images/smileys/fixme.gif&quot; class=&quot;middle&quot; alt=&quot;FIXME&quot; /&gt;		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_MUTEX_I&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает освобождения ресурса, заблокированного &amp;quot;priority inheritance&amp;quot; мютексом		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;TSK_WAIT_REASON_WFIXMEM&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 Задача ожидает освобождения блока памяти фиксированного размера		&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;base_priority&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;current_priority&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;TSK_STATE_RUNNABLE&lt;/code&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;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;TN_RETVAL tn_task_reference&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_TCB &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;task, TN_TASK_REF &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;ref&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB задачи&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;ref&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&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;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;TN_TASK_REF task_info;
&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_task_reference&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;task_1, &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;task_info&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;task_info.&lt;span class=&quot;me1&quot;&gt;state&lt;/span&gt;       &lt;span class=&quot;sy1&quot;&gt;==&lt;/span&gt; TSK_STATE_WAIT &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        task_info.&lt;span class=&quot;me1&quot;&gt;wait_reason&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;==&lt;/span&gt; TSK_WAIT_REASON_SLEEP
       &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        tn_task_wakeup&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;task_1&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;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&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_task_reference&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;task_1, &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;task_info&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;==&lt;/span&gt; TERR_NOEXS&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_reference()&quot; [12-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_release_wait?rev=1216592485">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:21:25+03:00</dc:date>
        <title>tn_task_release_wait()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_release_wait?rev=1216592485</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Atn_task_release_wait&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_release_wait&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция выводит задачу из состояния ожидания события вне зависимости от причины ожидания.
&lt;/p&gt;

&lt;p&gt;
Если задача находится в состоянии &lt;em&gt;WAITING&lt;/em&gt;, она переводится в состояние &lt;em&gt;READY&lt;/em&gt;. Если задача находится в состоянии &lt;em&gt;WAITING_SUSPEND&lt;/em&gt;, она переводится в состояние &lt;em&gt;SUSPEND&lt;/em&gt;.
Если задача находилась в состоянии &lt;em&gt;WAITING&lt;/em&gt; по причине вызова функции &lt;code&gt;tn_task_sleep()&lt;/code&gt;, вызов функции &lt;code&gt;tn_task_release_wait()&lt;/code&gt; с указателем на эту задачу кроме всего прочего сбрасывает счетчик попыток пробуждения задачи.
Функция не может использоваться для активации задачи, которая находится в состоянии &lt;em&gt;SUSPEND&lt;/em&gt;. Задача не может вызывать функцию &lt;code&gt;tn_task_release_wait()&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_task_release_wait &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_TCB &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;task&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB задачи&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;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;dd&gt;задача находится в состоянии, отличном от &lt;em&gt;WAITING&lt;/em&gt; или &lt;em&gt;WAITING_SUSPEND&lt;/em&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_TCB tcb_Task1  TN_DATA;
&amp;nbsp;
&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;need_forse_task_1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    tn_task_release_wait&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;tcb_Task1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;coMULTI&quot;&gt;/* ... */&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_resume?rev=1216592215">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:16:55+03:00</dc:date>
        <title>tn_task_resume()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_resume?rev=1216592215</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Atn_task_resume&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_resume&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция предназначена для вывода задачи из состояния &lt;em&gt;SUSPENDED&lt;/em&gt;.
&lt;/p&gt;

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

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

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;TN_RETVAL tn_task_resume (TN_TCB *task);&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB восстанавливаемой задачи&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
&lt;br/&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_WSTATE&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка восстановления задачи, которая находится в состоянии, отличном от &lt;em&gt;WAITING_SUSPENDED&lt;/em&gt; или &lt;em&gt;SUSPENDED&lt;/em&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_TCB tcb_Task1  TN_DATA;
&amp;nbsp;
&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;need_resume_task_1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    tn_task_resume&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;tcb_Task1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;coMULTI&quot;&gt;/* ... */&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_resume()&quot; [11-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_sleep?rev=1216592427">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:20:27+03:00</dc:date>
        <title>tn_task_sleep()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_sleep?rev=1216592427</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Atn_task_sleep&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_sleep&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

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

&lt;p&gt;
Задача может быть переведена в ожидание с параметром &lt;code&gt;TN_WAIT_INFINITE&lt;/code&gt;. В этом случае задача будет находится в ожидании до тех пор, пока не будет вызван сервис &lt;code&gt;tn_task_wakeup()&lt;/code&gt; или &lt;code&gt;tn_task_iwakeup()&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Каждая задача имеет счетчик запросов на пробуждение. Если у текущей задачи этот счетчик больше или равен 1, то вызов сервиса &lt;code&gt;tn_task_sleep()&lt;/code&gt; декрементирует счетчик, а задача продолжает выполнение.
&lt;/p&gt;

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

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;TN_RETVAL tn_task_sleep (TN_TIMEOUT timeout);&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;timeout&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;интервал времени в системных тиках на который задача будет переведена в ожидание. &lt;code&gt;timeout&lt;/code&gt; ⊆ [&lt;code&gt;1..TN_WAIT_INFINITE&lt;/code&gt;], где &lt;code&gt;TN_WAIT_INFINITE&lt;/code&gt; = 65‘535 для 16-битных контроллеров и &lt;code&gt;TN_WAIT_INFINITE&lt;/code&gt; = 4‘294‘967‘295 для 32-битных контроллеров&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
&lt;br/&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;code&gt;timeout&lt;/code&gt; = 0 (&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_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;void&lt;/span&gt; TN_TASK Task1 &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;param&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;for&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;;;&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_task_sleep&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&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;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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_sleep()&quot; [11-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_suspend?rev=1216592187">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:16:27+03:00</dc:date>
        <title>tn_task_suspend()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_suspend?rev=1216592187</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Atn_task_suspend&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_suspend&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция приостанавливает выполнение задачи, переводя ее в состояние &lt;em&gt;SUSPENDED&lt;/em&gt;. Если задача находится в состоянии &lt;em&gt;WAITING&lt;/em&gt;, она переводится в состояние &lt;em&gt;WAITING_SUSPENDED&lt;/em&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;code&quot;&gt;TN_RETVAL tn_task_suspend (TN_TCB *task);&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB приостанавливаемой задачи&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
&lt;br/&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_OVERFLOW&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка приостановки выполнения задачи, которая уже находится в состоянии &lt;em&gt;SUSPENDED&lt;/em&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_WSTATE&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;попытка приостановки выполнения задачи, которая находится в состоянии &lt;em&gt;DORMANT&lt;/em&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_TCB tcb_Task1  TN_DATA;
&amp;nbsp;
&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;need_suspend_task_1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    tn_task_suspend&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;tcb_Task1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;coMULTI&quot;&gt;/* ... */&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_suspend()&quot; [11-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_terminate?rev=1216592083">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:14:43+03:00</dc:date>
        <title>tn_task_terminate()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_terminate?rev=1216592083</link>
        <description>




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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Atn_task_terminate&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_terminate&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция переводит задачу из любого состояние в состояние &lt;em&gt;DORMANT&lt;/em&gt;. Если задача находится в очереди ожидания какого-либо события или объекта, она удаляется из очереди, а все ресурсы (мютексы) используемые задачей будут освобождены.
&lt;/p&gt;

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

&lt;p&gt;
Задача может быть выведена из состояния &lt;em&gt;DORMANT&lt;/em&gt; с помощью сервисов &lt;code&gt;tn_task_activate()&lt;/code&gt; и &lt;code&gt;tn_task_iactivate()&lt;/code&gt;. В этом случае задача будет запущена с точки входа в функцию задачи и поставлена в очередь готовых к выполнению (этого же приоритета) последней.
&lt;/p&gt;

&lt;p&gt;
Задача не может остановить свое выполнение с помощью сервиса &lt;code&gt;tn_task_terminate()&lt;/code&gt;, для этого необходимо использовать сервис &lt;code&gt;tn_task_exit()&lt;/code&gt;.
&lt;/p&gt;

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

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;TN_RETVAL tn_task_terminate(TN_TCB *task);&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB перезапускаемой задачи&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
&lt;br/&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;em&gt;DORMANT&lt;/em&gt;&lt;/dd&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_TCB tcb_Task1  TN_DATA;
&amp;nbsp;
&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;need_stop_task_1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    tn_task_terminate&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;tcb_Task1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;coMULTI&quot;&gt;/* ... */&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;tn_task_terminate()&quot; [12-] --&gt;</description>
    </item>
    <item rdf:about="http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_wakeup?rev=1216592455">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-21T02:20:55+03:00</dc:date>
        <title>tn_task_wakeup()</title>
        <link>http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_wakeup?rev=1216592455</link>
        <description>


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

&lt;p&gt;

&lt;a href=&quot;http://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_task.png?id=tnkernel%3Aref%3Atask%3Atn_task_wakeup&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_task.png&quot;&gt;&lt;img src=&quot;http://wiki.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://wiki.pic24.ru/lib/exe/detail.php/tnkernel/ref/attr_call_ct_sw.png?id=tnkernel%3Aref%3Atask%3Atn_task_wakeup&quot; class=&quot;media&quot; title=&quot;tnkernel:ref:attr_call_ct_sw.png&quot;&gt;&lt;img src=&quot;http://wiki.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;/p&gt;

&lt;p&gt;
Функция предназначена для пробуждения приостановленной с помощью функции &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_sleep&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_sleep&quot;&gt;tn_task_sleep()&lt;/a&gt; задачи. При этом задача продолжит выполнение с места возврата из функции &lt;a href=&quot;http://wiki.pic24.ru/doku.php/tnkernel/ref/task/tn_task_sleep&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:tn_task_sleep&quot;&gt;tn_task_sleep()&lt;/a&gt; без ошибок.
&lt;/p&gt;

&lt;p&gt;
Если функция пытается пробудить задачу, которая еще не приостановлена, счетчик запросов на пробуждение будет увеличен на 1.
&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_task_wakeup &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TN_TCB &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt;task&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;task&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на TCB пробуждаемой задачи&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
&lt;br/&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;dd&gt;попытка пробуждения задачи, находящейся в состоянии &lt;em&gt;DORMANT&lt;/em&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;TERR_OVERFLOW&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;счетчик запросов на пробуждение переполнен (=1)&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_TCB tcb_Task1  TN_DATA;
&amp;nbsp;
&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;need_wakeup_task_1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    tn_task_wakeup&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;tcb_Task1&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;coMULTI&quot;&gt;/* ... */&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://wiki.pic24.ru/doku.php/tnkernel/ref/task/intro#сервисы_управления_задачами&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:task:intro&quot;&gt;К списку сервисов&lt;/a&gt;

&lt;/p&gt;

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