| <!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>» Tasks</li> |
| |
| |
| |
| <li>» <a href="os/core_os/mynewt_os/">OS Core</a></li> |
| |
| |
| |
| <li>» <a href="os/os_user_guide/">OS User Guide</a></li> |
| |
| |
| |
| <li>» <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 "project" 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">&my_task</span>, <span style="color: #C41A16">"my_task"</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> |