blob: 617ec2d6bece702f9d17c0bf713d1f09ac2f4d27 [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Events &mdash; NuttX latest documentation</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css" />
<link rel="stylesheet" type="text/css" href="../../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../../_static/custom.css" />
<link rel="shortcut icon" href="../../_static/favicon.ico"/>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/sphinx_highlight.js"></script>
<script src="../../_static/clipboard.min.js"></script>
<script src="../../_static/copybutton.js"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="FAQ" href="../../faq/index.html" />
<link rel="prev" title="Work Queues" href="wqueue.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../../latest" selected="selected">latest</option>
<option value="../../../10.0.0" >10.0.0</option>
<option value="../../../10.0.1" >10.0.1</option>
<option value="../../../10.1.0" >10.1.0</option>
<option value="../../../10.2.0" >10.2.0</option>
<option value="../../../10.3.0" >10.3.0</option>
<option value="../../../11.0.0" >11.0.0</option>
<option value="../../../12.0.0" >12.0.0</option>
<option value="../../../12.1.0" >12.1.0</option>
<option value="../../../12.2.0" >12.2.0</option>
<option value="../../../12.2.1" >12.2.1</option>
<option value="../../../12.3.0" >12.3.0</option>
<option value="../../../12.4.0" >12.4.0</option>
<option value="../../../12.5.0" >12.5.0</option>
<option value="../../../12.5.1" >12.5.1</option>
<option value="../../../12.6.0" >12.6.0</option>
<option value="../../../12.7.0" >12.7.0</option>
<option value="../../../12.8.0" >12.8.0</option>
<option value="../../../12.9.0" >12.9.0</option>
<option value="../../../12.10.0" >12.10.0</option>
<option value="../../../12.11.0" >12.11.0</option>
</select>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../introduction/index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../quickstart/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../contributing/index.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../platforms/index.html">Supported Platforms</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../components/index.html">OS Components</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../implementation/index.html">Implementation Details</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">API Reference</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../user/index.html">Userspace API</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="index.html">Architecture APIs</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="addrenv.html">Address Environments</a></li>
<li class="toctree-l3"><a class="reference internal" href="app_vs_os.html">Application OS vs. Internal OS Interfaces</a></li>
<li class="toctree-l3"><a class="reference internal" href="arch.html">APIs Exported by Architecture-Specific Logic to NuttX</a></li>
<li class="toctree-l3"><a class="reference internal" href="board.html">APIs Exported by Board-Specific Logic to NuttX</a></li>
<li class="toctree-l3"><a class="reference internal" href="conventions.html">Naming and Header File Conventions</a></li>
<li class="toctree-l3"><a class="reference internal" href="iob.html">I/O Buffer Management</a></li>
<li class="toctree-l3"><a class="reference internal" href="led.html">LED Support</a></li>
<li class="toctree-l3"><a class="reference internal" href="mutex.html">Mutual Exclusion lock</a></li>
<li class="toctree-l3"><a class="reference internal" href="newreno.html">Congestion Control NewReno</a></li>
<li class="toctree-l3"><a class="reference internal" href="notifier.html">Notifier Chain</a></li>
<li class="toctree-l3"><a class="reference internal" href="nuttx.html">APIs Exported by NuttX to Architecture-Specific Logic</a></li>
<li class="toctree-l3"><a class="reference internal" href="paging.html">On-Demand Paging</a></li>
<li class="toctree-l3"><a class="reference internal" href="shm.html">Shared Memory</a></li>
<li class="toctree-l3"><a class="reference internal" href="smp.html">Symmetric Multiprocessing (SMP) Application</a></li>
<li class="toctree-l3"><a class="reference internal" href="time_clock.html">System Time and Clock</a></li>
<li class="toctree-l3"><a class="reference internal" href="wqueue.html">Work Queues</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Events</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#overview">Overview</a></li>
<li class="toctree-l4"><a class="reference internal" href="#configuration-options">Configuration Options</a></li>
<li class="toctree-l4"><a class="reference internal" href="#common-events-interfaces">Common Events Interfaces</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#events-types">Events Types</a></li>
<li class="toctree-l5"><a class="reference internal" href="#notifier-chain-interfaces">Notifier Chain Interfaces</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../faq/index.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../logos/index.html">NuttX Logos</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../index.html">API Reference</a></li>
<li class="breadcrumb-item"><a href="index.html">Architecture APIs</a></li>
<li class="breadcrumb-item active">Events</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/reference/os/events.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="events">
<h1>Events<a class="headerlink" href="#events" title="Permalink to this heading"></a></h1>
<p>Events groups are synchronization primitives that allow tasks to wait
for multiple conditions to be met before proceeding. They are particularly
useful in scenarios where a task needs to wait for several events to occur
simultaneously.
This concept can be particularly powerful in real-time operating systems (RTOS).</p>
<section id="overview">
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading"></a></h2>
<p>An event group consists of a set of binary flags, each representing a
specific event. Tasks can set, clear, and wait on these flags. When a
task waits on an event group, it can specify which flags it is interested
in and whether it wants to wait for all specified flags to be set or just
any one of them.</p>
</section>
<section id="configuration-options">
<h2>Configuration Options<a class="headerlink" href="#configuration-options" title="Permalink to this heading"></a></h2>
<dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">CONFIG_SCHED_EVENTS</span></code></dt><dd><p>This option enables event objects. Threads may wait on event
objects for specific events, but both threads and ISRs may deliver
events to event objects.</p>
</dd>
</dl>
</section>
<section id="common-events-interfaces">
<h2>Common Events Interfaces<a class="headerlink" href="#common-events-interfaces" title="Permalink to this heading"></a></h2>
<section id="events-types">
<h3>Events Types<a class="headerlink" href="#events-types" title="Permalink to this heading"></a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">nxevent_t</span></code>. Defines one event group entry.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">nxevent_mask_t</span></code>. Defines one events mask value.</p></li>
</ul>
</section>
<section id="notifier-chain-interfaces">
<h3>Notifier Chain Interfaces<a class="headerlink" href="#notifier-chain-interfaces" title="Permalink to this heading"></a></h3>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxevent_init">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxevent_init</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="n"><span class="pre">nxevent_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">event</span></span>, <span class="n"><span class="pre">nxevent_mask_t</span></span><span class="w"> </span><span class="n"><span class="pre">events</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nxevent_init" title="Permalink to this definition"></a><br /></dt>
<dd><p>Initializes an event object, Set of default events to post
to event.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> – Address of the event object</p></li>
<li><p><strong>events</strong> – Set of events to post to event</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxevent_destroy">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxevent_destroy</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="n"><span class="pre">nxevent_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">event</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nxevent_destroy" title="Permalink to this definition"></a><br /></dt>
<dd><p>This function is used to destroy the event.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> – Address of the event object</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxevent_reset">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxevent_reset</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="n"><span class="pre">nxevent_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">event</span></span>, <span class="n"><span class="pre">nxevent_mask_t</span></span><span class="w"> </span><span class="n"><span class="pre">events</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nxevent_reset" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reset events mask to a specific value.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> – Address of the event object</p></li>
<li><p><strong>events</strong> – Set of events to post to event</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxevent_post">
<span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxevent_post</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="n"><span class="pre">nxevent_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">event</span></span>, <span class="n"><span class="pre">nxevent_mask_t</span></span><span class="w"> </span><span class="n"><span class="pre">events</span></span>, <span class="n"><span class="pre">nxevent_flags_t</span></span><span class="w"> </span><span class="n"><span class="pre">eflags</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nxevent_post" title="Permalink to this definition"></a><br /></dt>
<dd><p>Post one or more events to an event object.</p>
<p>This routine posts one or more events to an event object. All tasks
waiting on the event object event whose waiting conditions become
met by this posting immediately unpend.</p>
<p>Posting differs from setting in that posted events are merged together
with the current set of events tracked by the event object.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> – Address of the event object</p></li>
<li><p><strong>events</strong> – Set of events to post to event
Set events to 0 will be considered as any,
waking up the waiting thread immediately.</p></li>
<li><p><strong>eflags</strong> – Events flags</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxevent_wait">
<span class="n"><span class="pre">nxevent_mask_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxevent_wait</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="n"><span class="pre">nxevent_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">event</span></span>, <span class="n"><span class="pre">nxevent_mask_t</span></span><span class="w"> </span><span class="n"><span class="pre">events</span></span>, <span class="n"><span class="pre">nxevent_flags_t</span></span><span class="w"> </span><span class="n"><span class="pre">eflags</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nxevent_wait" title="Permalink to this definition"></a><br /></dt>
<dd><p>Wait for all of the specified events.</p>
<p>This routine waits on event object event until all of the specified
events have been delivered to the event object. A thread may wait on
up to 32 distinctly numbered events that are expressed as bits in a
single 32-bit word.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> – Address of the event object</p></li>
<li><p><strong>events</strong> – Set of events to wait, 0 will indicate wait from any events</p></li>
<li><p><strong>eflags</strong> – Events flags</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxevent_tickwait">
<span class="n"><span class="pre">nxevent_mask_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxevent_tickwait</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="n"><span class="pre">nxevent_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">event</span></span>, <span class="n"><span class="pre">nxevent_mask_t</span></span><span class="w"> </span><span class="n"><span class="pre">events</span></span>, <span class="n"><span class="pre">nxevent_flags_t</span></span><span class="w"> </span><span class="n"><span class="pre">eflags</span></span>, <span class="n"><span class="pre">uint32_t</span></span><span class="w"> </span><span class="n"><span class="pre">delay</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nxevent_tickwait" title="Permalink to this definition"></a><br /></dt>
<dd><p>Wait for all of the specified events for the specified tick time.</p>
<p>This routine waits on event object event until all of the specified
events have been delivered to the event object, or the maximum wait time
timeout has expired. A thread may wait on up to 32 distinctly numbered
events that are expressed as bits in a single 32-bit word.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> – Address of the event object.</p></li>
<li><p><strong>events</strong> – Set of events to wait, 0 will indicate wait from any events</p></li>
<li><p><strong>eflags</strong> – Events flags</p></li>
<li><p><strong>delay</strong> – Ticks to wait from the start time until the event is posted,
If ticks is zero, then this function is equivalent to nxevent_trywait().</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="c function">
<dt class="sig sig-object c" id="c.nxevent_trywait">
<span class="n"><span class="pre">nxevent_mask_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">nxevent_trywait</span></span></span><span class="sig-paren">(</span><span class="pre">FAR</span><span class="w"> </span><span class="n"><span class="pre">nxevent_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">event</span></span>, <span class="n"><span class="pre">nxevent_mask_t</span></span><span class="w"> </span><span class="n"><span class="pre">events</span></span>, <span class="n"><span class="pre">nxevent_flags_t</span></span><span class="w"> </span><span class="n"><span class="pre">eflags</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.nxevent_trywait" title="Permalink to this definition"></a><br /></dt>
<dd><p>Try wait for all of the specified events.</p>
<p>This routine try to waits on event object event if any of the specified
events have been delivered to the event object. A thread may wait on
up to 32 distinctly numbered events that are expressed as bits in a
single 32-bit word.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>event</strong> – Address of the event object</p></li>
<li><p><strong>events</strong> – Set of events to wait, 0 will indicate wait from any events</p></li>
<li><p><strong>eflags</strong> – Events flags</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="wqueue.html" class="btn btn-neutral float-left" title="Work Queues" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../../faq/index.html" class="btn btn-neutral float-right" title="FAQ" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2023, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>