blob: 5ab7dc36170e18f50dbfe7d6c94d52956cce4f31 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- This is broken by doc revisioning.
-->
<link rel="shortcut icon" href="../../../../img/favicon.ico">
<title>toc - Apache Mynewt</title>
<link href="../../../../css/bootstrap-3.0.3.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../../../css/highlight.css">
<link href="../../../../css/base.css" rel="stylesheet">
<link href="../../../../css/custom.css" rel="stylesheet">
<link href="../../../../css/v2.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
<script>
(function(i, s, o, g, r, a, m) {
i["GoogleAnalyticsObject"] = r;
(i[r] =
i[r] ||
function() {
(i[r].q = i[r].q || []).push(arguments);
}),
(i[r].l = 1 * new Date());
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
ga("create", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
</head>
<body class="toc">
<div class="container">
<div class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="/img/logo.png">
</a>
<div class="tagline-cell">
<h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
</div>
<div class="news-cell">
<div class="well">
<h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.12.0, Apache NimBLE 1.7.0 </a> released (April 4, 2024)
</div>
</div>
</div>
</div>
<nav id="navbar" class="navbar navbar-inverse affix-top" data-spy="affix" data-offset-top="150" role="navigation">
<div class="container">
<!-- Collapsed navigation -->
<div class="navbar-header">
<!-- Expander button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- Expanded navigation -->
<div class="navbar-collapse collapse">
<!-- Main navigation -->
<ul class="nav navbar-nav navbar-right">
<li
class=""
>
<a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
</li>
<li
class="important"
>
<a href="/quick-start/">Quick Start</a>
</li>
<li
class=""
>
<a href="/about/">About</a>
</li>
<li
class=""
>
<a href="/talks/">Talks</a>
</li>
<li
class="active"
>
<a href="/documentation/">Documentation</a>
</li>
<li
class=""
>
<a href="/download/">Download</a>
</li>
<li
class=""
>
<a href="/community/">Community</a>
</li>
<li
class=""
>
<a href="/events/">Events</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-3 v2-sidebar sidebar-container"><div id="docSidebar" class="hidden-print" role="complementary">
<div class="top">
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<div class="form-group">
<input type="text" name="q" class="form-control" placeholder="Search documentation" />
</div>
</form>
</div>
</div>
<ul class="toc-nav">
<li class="doc-version"><select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest">
Version: master
</option>
<option value="/v1_12_0/" >
Version: 1.12.0
</option>
<option value="/v1_11_0/" >
Version: 1.11.0
</option>
<option value="/v1_10_0/" >
Version: 1.10.0
</option>
<option value="/v1_9_0/" >
Version: 1.9.0
</option>
<option value="/v1_8_0/" >
Version: 1.8.0
</option>
<option value="/v1_7_0/" >
Version: 1.7.0
</option>
<option value="/v1_6_0/" >
Version: 1.6.0
</option>
<option value="/v1_5_0/" >
Version: 1.5.0
</option>
<option value="/v1_4_0/" >
Version: 1.4.0
</option>
<option value="/v1_3_0/os/introduction" >
Version: 1.3.0
</option>
<option value="/v1_2_0/os/introduction" >
Version: 1.2.0
</option>
<option value="/v1_1_0/os/introduction" selected="selected" >
Version: 1.1.0
</option>
<option value="/v1_0_0/os/introduction" >
Version: 1.0.0
</option>
<option value="/v0_9_0/os/introduction" >
Version: 0.9.0
</option>
</select></li>
<li ><a href="../../../introduction/">Mynewt Documentation</a>
<ul>
<li ><a href="../../../get_started/get_started/">Basic Setup</a>
</li>
<li >
<a href="../../../get_started/vocabulary/">Concepts</a>
</li>
<li ><a href="../../../tutorials/tutorials/">Tutorials</a>
</li>
<li ><a href="../../../os_user_guide/">OS User Guide</a>
<ul>
<li ><a href="../../mynewt_os/">OS Core</a>
<ul>
<li><a href="
../../os_started/
">Functions</a>
</li>
<li ><a href="../../context_switch/context_switch/">Scheduler</a>
</li>
<li ><a href="../../cputime/os_cputime/">CPU Time</a>
</li>
<li ><a href="../../time/os_time/">OS Time</a>
</li>
<li class="active"><a href="./">Tasks</a>
<ul>
<li><a href="
../os_task_count/
">Functions</a>
</li>
</ul>
</li>
<li ><a href="../../event_queue/event_queue/">Event Queues</a>
</li>
<li ><a href="../../semaphore/semaphore/">Semaphores</a>
</li>
<li ><a href="../../mutex/mutex/">Mutexes</a>
</li>
<li ><a href="../../memory_pool/memory_pool/">Memory Pools</a>
</li>
<li ><a href="../../heap/heap/">Heap</a>
</li>
<li><a href="
../../mbuf/mbuf/
">Memory Buffers</a>
</li>
<li ><a href="../../sanity/sanity/">Sanity</a>
</li>
<li ><a href="../../callout/callout/">Callouts</a>
</li>
</ul>
</li>
<li ><a href="../../porting/port_os/">Porting to your Platform</a>
</li>
<li ><a href="../../../modules/console/console/">Console</a>
</li>
<li ><a href="../../../modules/shell/shell/">Shell</a>
</li>
<li ><a href="../../../modules/split/split/">Split Images</a>
</li>
<li ><a href="../../../modules/bootloader/bootloader/">Bootloader</a>
</li>
<li><a href="
../../../modules/fs/fs/fs/
">File System</a>
</li>
<li ><a href="../../../modules/hal/hal/">Hardware Abstraction Layer</a>
</li>
<li ><a href="../../../modules/sensor_framework/sensor_framework_overview/">Sensor Framework</a>
</li>
<li ><a href="../../../modules/drivers/driver/">Drivers</a>
</li>
<li ><a href="../../../modules/testutil/testutil/">Test Utilities</a>
</li>
<li ><a href="../../../modules/devmgmt/newtmgr/">Device Management with Newt Manager</a>
</li>
<li ><a href="../../../modules/imgmgr/imgmgr/">Image Manager</a>
</li>
<li >
<a href="../../../modules/baselibc/">Baselibc library</a>
</li>
<li ><a href="../../../modules/json/json/">JSON</a>
</li>
<li ><a href="../../../modules/fcb/fcb/">Flash Circular Buffer</a>
</li>
<li ><a href="../../../modules/stats/stats/">Stats</a>
</li>
<li ><a href="../../../modules/logs/logs/">Logs</a>
</li>
<li ><a href="../../../modules/sysinitconfig/sysinitconfig/">System Configuration And Initialization</a>
</li>
</ul>
</li>
<li><a href="
../../../../network/ble/ble_intro/
">BLE User Guide</a>
</li>
<li ><a href="../../../../newt/newt_intro/">Newt Tool Guide</a>
</li>
<li ><a href="../../../../newtmgr/overview/">Newt Manager Guide</a>
</li>
<li >
<a href="../../../../known_issues/">Known Issues</a>
</li>
</ul>
</li>
<li><a href="
../../../../faq/go_env/
">Appendix</a>
</li>
</ul>
</div></div>
<div class="col-md-9" role="main">
<div class="doc-header">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="/documentation/">Docs</a></li>
<li>&raquo; Tasks</li>
<li>&raquo; <a href="os/core_os/mynewt_os/">OS Core</a></li>
<li>&raquo; <a href="os/os_user_guide/">OS User Guide</a></li>
<li>&raquo; <a href="os/introduction/">Mynewt Documentation</a></li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/mynewt-site/blob/master/docs/os/core_os/task/task.md"
class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
</div>
</div>
<div class="alert alert-warning">
<p>
Version 1.1.0 is not the most recent version of the Apache Mynewt
documentation. Click <a href="/latest">here</a> to read the latest
version.
</p>
</div>
<h1 id="task">Task</h1>
<p>A task, along with the scheduler, forms the basis of the Mynewt OS. A task
consists of two basic elements: a task stack and a task function. The task
function is basically a forever loop, waiting for some "event" to wake it up.
There are two methods used to signal a task that it has work to do: event queues
and semaphores (see the appropriate manual sections for descriptions of these
features).</p>
<p>The Mynewt OS is a multi-tasking, preemptive OS. Every task is assigned a task
priority (from 0 to 255), with 0 being the highest priority task. If a higher
priority task than the current task wants to run, the scheduler preempts the
currently running task and switches context to the higher priority task. This is
just a fancy way of saying that the processor stack pointer now points to the
stack of the higher priority task and the task resumes execution where it left
off.</p>
<p>Tasks run to completion unless they are preempted by a higher priority task. The
developer must insure that tasks eventually "sleep"; otherwise lower priority
tasks will never get a chance to run (actually, any task lower in priority than
the task that never sleeps). A task will be put to sleep in the following cases:
it puts itself to sleep using <code>os_time_delay()</code>, it waits on an event queue
which is empty or attempts to obtain a mutex or a semaphore that is currently
owned by another task.</p>
<p>Note that other sections of the manual describe these OS features in more
detail.</p>
<h2 id="description">Description</h2>
<p>In order to create a task two data structures need to be defined: the task
object (struct os_task) and its associated stack. Determining the stack size can
be a bit tricky; generally developers should not declare large local variables
on the stack so that task stacks can be of limited size. However, all
applications are different and the developer must choose the stack size
accordingly. NOTE: be careful when declaring your stack! The stack is in units
of <code>os_stack_t</code> sized elements (generally 32-bits). Looking at the example given
below and assuming <code>os_stack_t</code> is defined to be a 32-bit unsigned value,
"my_task_stack" will use 256 bytes. </p>
<p>A task must also have an associated "task function". This is the function that
will be called when the task is first run. This task function should never
return!</p>
<p>In order to inform the Mynewt OS of the new task and to have it added to the
scheduler, the <code>os_task_init()</code> function is called. Once <code>os_task_init()</code> is
called, the task is made ready to run and is added to the active task list. Note
that a task can be initialized (started) before or after the os has started
(i.e. before <code>os_start()</code> is called) but must be initialized after the os has
been initialized (i.e. 'os_init' has been called). In most of the examples and
current Mynewt projects, the os is initialized, tasks are initialized, and the
the os is started. Once the os has started, the highest priority task will be
the first task set to run.</p>
<p>Information about a task can be obtained using the <code>os_task_info_get_next()</code>
API. Developers can walk the list of tasks to obtain information on all created
tasks. This information is of type <code>os_task_info</code> and is described below.</p>
<p>The following is a very simple example showing a single application task. This
task simply toggles an LED at a one second interval.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #177500">/* Create a simple &quot;project&quot; with a task that blinks a LED every second */</span>
<span style="color: #177500">/* Define task stack and task object */</span>
<span style="color: #633820">#define MY_TASK_PRI (OS_TASK_PRI_HIGHEST) </span>
<span style="color: #633820">#define MY_STACK_SIZE (64) </span>
<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">os_task</span> <span style="color: #000000">my_task</span>;
<span style="color: #000000">os_stack_t</span> <span style="color: #000000">my_task_stack</span>[<span style="color: #000000">MY_STACK_SIZE</span>];
<span style="color: #177500">/* This is the task function */</span>
<span style="color: #A90D91">void</span> <span style="color: #000000">my_task_func</span>(<span style="color: #A90D91">void</span> <span style="color: #000000">*arg</span>) {
<span style="color: #177500">/* Set the led pin as an output */</span>
<span style="color: #000000">hal_gpio_init_out</span>(<span style="color: #000000">LED_BLINK_PIN</span>, <span style="color: #1C01CE">1</span>);
<span style="color: #177500">/* The task is a forever loop that does not return */</span>
<span style="color: #A90D91">while</span> (<span style="color: #1C01CE">1</span>) {
<span style="color: #177500">/* Wait one second */</span>
<span style="color: #000000">os_time_delay</span>(<span style="color: #1C01CE">1000</span>);
<span style="color: #177500">/* Toggle the LED */</span>
<span style="color: #000000">hal_gpio_toggle</span>(<span style="color: #000000">LED_BLINK_PIN</span>);
}
}
<span style="color: #177500">/* This is the main function for the project */</span>
<span style="color: #A90D91">int</span> <span style="color: #000000">main</span>(<span style="color: #A90D91">int</span> <span style="color: #000000">argc</span>, <span style="color: #A90D91">char</span> <span style="color: #000000">**argv</span>)
{
<span style="color: #177500">/* Perform system and package initialization */</span>
<span style="color: #000000">sysinit</span>();
<span style="color: #177500">/* Initialize the task */</span>
<span style="color: #000000">os_task_init</span>(<span style="color: #000000">&amp;my_task</span>, <span style="color: #C41A16">&quot;my_task&quot;</span>, <span style="color: #000000">my_task_func</span>, <span style="color: #A90D91">NULL</span>, <span style="color: #000000">MY_TASK_PRIO</span>,
<span style="color: #000000">OS_WAIT_FOREVER</span>, <span style="color: #000000">my_task_stack</span>, <span style="color: #000000">MY_STACK_SIZE</span>);
<span style="color: #177500">/* Process events from the default event queue. */</span>
<span style="color: #A90D91">while</span> (<span style="color: #1C01CE">1</span>) {
<span style="color: #000000">os_eventq_run</span>(<span style="color: #000000">os_eventq_dflt_get</span>());
}
<span style="color: #177500">/* main never returns */</span>
}
</code></pre></div>
<h2 id="data-structures">Data structures</h2>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #177500">/* The highest and lowest task priorities */</span>
<span style="color: #633820">#define OS_TASK_PRI_HIGHEST (0)</span>
<span style="color: #633820">#define OS_TASK_PRI_LOWEST (0xff)</span>
<span style="color: #177500">/* Task states */</span>
<span style="color: #A90D91">typedef</span> <span style="color: #A90D91">enum</span> <span style="color: #000000">os_task_state</span> {
<span style="color: #000000">OS_TASK_READY</span> <span style="color: #000000">=</span> <span style="color: #1C01CE">1</span>,
<span style="color: #000000">OS_TASK_SLEEP</span> <span style="color: #000000">=</span> <span style="color: #1C01CE">2</span>
} <span style="color: #000000">os_task_state_t</span>;
<span style="color: #177500">/* Task flags */</span>
<span style="color: #633820">#define OS_TASK_FLAG_NO_TIMEOUT (0x0001U)</span>
<span style="color: #633820">#define OS_TASK_FLAG_SEM_WAIT (0x0002U)</span>
<span style="color: #633820">#define OS_TASK_FLAG_MUTEX_WAIT (0x0004U)</span>
<span style="color: #A90D91">typedef</span> <span style="color: #A90D91">void</span> (<span style="color: #000000">*os_task_func_t</span>)(<span style="color: #A90D91">void</span> <span style="color: #000000">*</span>);
<span style="color: #633820">#define OS_TASK_MAX_NAME_LEN (32)</span>
</code></pre></div>
<p><br></p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #A90D91">struct</span> <span style="color: #3F6E75">os_task</span> {
<span style="color: #000000">os_stack_t</span> <span style="color: #000000">*t_stackptr</span>;
<span style="color: #000000">os_stack_t</span> <span style="color: #000000">*t_stacktop</span>;
<span style="color: #A90D91">uint16_t</span> <span style="color: #000000">t_stacksize</span>;
<span style="color: #A90D91">uint16_t</span> <span style="color: #000000">t_flags</span>;
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">t_taskid</span>;
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">t_prio</span>;
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">t_state</span>;
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">t_pad</span>;
<span style="color: #A90D91">char</span> <span style="color: #000000">*t_name</span>;
<span style="color: #000000">os_task_func_t</span> <span style="color: #000000">t_func</span>;
<span style="color: #A90D91">void</span> <span style="color: #000000">*t_arg</span>;
<span style="color: #A90D91">void</span> <span style="color: #000000">*t_obj</span>;
<span style="color: #A90D91">struct</span> <span style="color: #3F6E75">os_sanity_check</span> <span style="color: #000000">t_sanity_check</span>;
<span style="color: #000000">os_time_t</span> <span style="color: #000000">t_next_wakeup</span>;
<span style="color: #000000">os_time_t</span> <span style="color: #000000">t_run_time</span>;
<span style="color: #A90D91">uint32_t</span> <span style="color: #000000">t_ctx_sw_cnt</span>;
<span style="color: #177500">/* Global list of all tasks, irrespective of run or sleep lists */</span>
<span style="color: #000000">STAILQ_ENTRY</span>(<span style="color: #000000">os_task</span>) <span style="color: #000000">t_os_task_list</span>;
<span style="color: #177500">/* Used to chain task to either the run or sleep list */</span>
<span style="color: #000000">TAILQ_ENTRY</span>(<span style="color: #000000">os_task</span>) <span style="color: #000000">t_os_list</span>;
<span style="color: #177500">/* Used to chain task to an object such as a semaphore or mutex */</span>
<span style="color: #000000">SLIST_ENTRY</span>(<span style="color: #000000">os_task</span>) <span style="color: #000000">t_obj_list</span>;
};
</code></pre></div>
<table>
<thead>
<tr>
<th><strong>Element</strong></th>
<th><strong>Description</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>t_stackptr</td>
<td>Current stack pointer</td>
</tr>
<tr>
<td>t_stacktop</td>
<td>The address of the top of the task stack. The stack grows downward</td>
</tr>
<tr>
<td>t_stacksize</td>
<td>The size of the stack, in units of os_stack_t (not bytes!)</td>
</tr>
<tr>
<td>t_flags</td>
<td>Task flags (see flag definitions)</td>
</tr>
<tr>
<td>t_taskid</td>
<td>A numeric id assigned to each task</td>
</tr>
<tr>
<td>t_prio</td>
<td>The priority of the task. The lower the number, the higher the priority</td>
</tr>
<tr>
<td>t_state</td>
<td>The task state (see state definitions)</td>
</tr>
<tr>
<td>t_pad</td>
<td>padding (for alignment)</td>
</tr>
<tr>
<td>t_name</td>
<td>Name of task</td>
</tr>
<tr>
<td>t_func</td>
<td>Pointer to task function</td>
</tr>
<tr>
<td>t_obj</td>
<td>Generic object used by mutexes and semaphores when the task is waiting on a mutex or semaphore</td>
</tr>
<tr>
<td>t_sanity_check</td>
<td>Sanity task data structure</td>
</tr>
<tr>
<td>t_next_wakeup</td>
<td>OS time when task is next scheduled to wake up</td>
</tr>
<tr>
<td>t_run_time</td>
<td>The amount of os time ticks this task has been running</td>
</tr>
<tr>
<td>t_ctx_sw_cnt</td>
<td>The number of times that this task has been run</td>
</tr>
<tr>
<td>t_os_task_list</td>
<td>List pointer for global task list. All tasks are placed on this list</td>
</tr>
<tr>
<td>t_os_list</td>
<td>List pointer used by either the active task list or the sleeping task list</td>
</tr>
<tr>
<td>t_obj_list</td>
<td>List pointer for tasks waiting on a semaphore or mutex</td>
</tr>
</tbody>
</table>
<p><br></p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code><span style="color: #A90D91">struct</span> <span style="color: #3F6E75">os_task_info</span> {
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">oti_prio</span>;
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">oti_taskid</span>;
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">oti_state</span>;
<span style="color: #A90D91">uint8_t</span> <span style="color: #000000">oti_flags</span>;
<span style="color: #A90D91">uint16_t</span> <span style="color: #000000">oti_stkusage</span>;
<span style="color: #A90D91">uint16_t</span> <span style="color: #000000">oti_stksize</span>;
<span style="color: #A90D91">uint32_t</span> <span style="color: #000000">oti_cswcnt</span>;
<span style="color: #A90D91">uint32_t</span> <span style="color: #000000">oti_runtime</span>;
<span style="color: #000000">os_time_t</span> <span style="color: #000000">oti_last_checkin</span>;
<span style="color: #000000">os_time_t</span> <span style="color: #000000">oti_next_checkin</span>;
<span style="color: #A90D91">char</span> <span style="color: #000000">oti_name</span>[<span style="color: #000000">OS_TASK_MAX_NAME_LEN</span>];
};
</code></pre></div>
<table>
<thead>
<tr>
<th><strong>Element</strong></th>
<th><strong>Description</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>oti_prio</td>
<td>Task priority</td>
</tr>
<tr>
<td>oti_taskid</td>
<td>Task id</td>
</tr>
<tr>
<td>oti_state</td>
<td>Task state</td>
</tr>
<tr>
<td>oti_flags</td>
<td>Task flags</td>
</tr>
<tr>
<td>oti_stkusage</td>
<td>Amount of stack used by the task (in os_stack_t units)</td>
</tr>
<tr>
<td>oti_stksize</td>
<td>The size of the stack (in os_stack_t units)</td>
</tr>
<tr>
<td>oti_cswcnt</td>
<td>The context switch count</td>
</tr>
<tr>
<td>oti_runtime</td>
<td>The amount of time that the task has run (in os time ticks)</td>
</tr>
<tr>
<td>oti_last_checkin</td>
<td>The time (os time) at which this task last checked in to the sanity task</td>
</tr>
<tr>
<td>oti_next_checkin</td>
<td>The time (os time) at which this task last checked in to the sanity task</td>
</tr>
<tr>
<td>oti_name</td>
<td>Name of the task</td>
</tr>
</tbody>
</table>
<p><br></p>
<h2 id="list-of-functions">List of Functions</h2>
<p>The functions available in task are:</p>
<table>
<thead>
<tr>
<th><strong>Function</strong></th>
<th><strong>Description</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="../os_task_init/">os_task_init</a></td>
<td>Called to create a task. This adds the task object to the list of ready to run tasks.</td>
</tr>
<tr>
<td><a href="../os_task_count/">os_task_count</a></td>
<td>Returns the number of tasks that have been created.</td>
</tr>
<tr>
<td><a href="../os_task_info_get_next/">os_task_info_get_next</a></td>
<td>Populates the os task info structure given with task information.</td>
</tr>
<tr>
<td><a href="../os_task_remove/">os_task_remove</a></td>
<td>Removes a task from the task list.</td>
</tr>
</tbody>
</table>
<div class="row">
<ul class="nav nav-pills" style="margin-bottom: 10px">
<li>
</li>
<li class="pull-right">
</li>
</ul>
</div>
<footer class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<a href="https://www.apache.org/">
<img src="/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
</a>
<p>
Copyright © 2015-2021 The Apache Software Foundation.<br>
<small class="footnote">
Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt
project logo are either registered trademarks or trademarks of the Apache
Software Foundation in the United States and other countries.
</small>
</p>
<a href="">
<img src="https://www.countit.com/images/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
<a href="https://www.apache.org/licenses/">
<button class="button-footer-asf">
License
</button>
</a>
<a href="https://www.apache.org/foundation/sponsorship.html">
<button class="button-footer-asf">
Sponsorship
</button>
</a>
<a href="https://www.apache.org/foundation/thanks.html">
<button class="button-footer-asf">
Thanks
</button>
</a>
<a href="https://www.apache.org/security/">
<button class="button-footer-asf">
Security
</button>
</a>
<a href="https://apache.org/events/current-event">
<button class="button-footer-asf">
ASF Events
</button>
</a>
</footer>
</div>
</div>
</div>
<script src="../../../../js/jquery-1.10.2.min.js"></script>
<script src="../../../../js/bootstrap-3.0.3.min.js"></script>
<script src="../../../../js/highlight.pack.js"></script>
<script src="../../../../js/base.js"></script>
<script src="../../../../js/custom.js"></script>
<script src="search/main.js"></script>
</body>
</html>