| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- <?xml version='1.0' encoding='UTF-8' standalone='no'?>
- <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.18.0" xml:lang="ja">
- <compounddef id="sync_8hpp" kind="file" language="C++">
- <compoundname>sync.hpp</compoundname>
- <includes refid="kernel_8hpp" local="yes">kernel.hpp</includes>
- <includes local="no">cstdint</includes>
- <incdepgraph>
- <node id="2">
- <label>kernel.hpp</label>
- <link refid="kernel_8hpp"/>
- <childnode refid="3" relation="include">
- </childnode>
- <childnode refid="4" relation="include">
- </childnode>
- <childnode refid="5" relation="include">
- </childnode>
- </node>
- <node id="1">
- <label>C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/sync.hpp</label>
- <link refid="sync_8hpp"/>
- <childnode refid="2" relation="include">
- </childnode>
- <childnode refid="6" relation="include">
- </childnode>
- </node>
- <node id="6">
- <label>cstdint</label>
- </node>
- <node id="5">
- <label>pico/runtime.h</label>
- </node>
- <node id="4">
- <label>stddef.h</label>
- </node>
- <node id="3">
- <label>stdint.h</label>
- </node>
- </incdepgraph>
- <innerclass refid="classtk_1_1_semaphore" prot="public">tk::Semaphore</innerclass>
- <innerclass refid="classtk_1_1_mutex" prot="public">tk::Mutex</innerclass>
- <innerclass refid="classtk_1_1_lock_guard" prot="public">tk::LockGuard</innerclass>
- <innernamespace refid="namespacetk">tk</innernamespace>
- <briefdescription>
- </briefdescription>
- <detaileddescription>
- </detaileddescription>
- <programlisting>
- <codeline lineno="1"><highlight class="preprocessor">#pragma<sp/>once</highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="2"><highlight class="normal"></highlight></codeline>
- <codeline lineno="3"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>"<ref refid="kernel_8hpp" kindref="compound">kernel.hpp</ref>"</highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="4"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/><cstdint></highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="5"><highlight class="normal"></highlight></codeline>
- <codeline lineno="6"><highlight class="normal"></highlight><highlight class="keyword">namespace<sp/></highlight><highlight class="normal"><ref refid="namespacetk" kindref="compound">tk</ref><sp/>{</highlight></codeline>
- <codeline lineno="7"><highlight class="normal"></highlight></codeline>
- <codeline lineno="24" refid="classtk_1_1_semaphore" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classtk_1_1_semaphore_1a66c5ac90338a6fcc6a9c2f22f1586de8" kindref="member">Semaphore</ref><sp/>{</highlight></codeline>
- <codeline lineno="25"><highlight class="normal"></highlight><highlight class="keyword">public</highlight><highlight class="normal">:</highlight></codeline>
- <codeline lineno="31" refid="classtk_1_1_semaphore_1a66c5ac90338a6fcc6a9c2f22f1586de8" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">explicit</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_semaphore_1a66c5ac90338a6fcc6a9c2f22f1586de8" kindref="member">Semaphore</ref>(int32_t<sp/>initial_count<sp/>=<sp/>1,<sp/>int32_t<sp/>max_count<sp/>=<sp/>1)</highlight></codeline>
- <codeline lineno="32"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>:<sp/>count_(initial_count),<sp/>max_count_(max_count)<sp/>{}</highlight></codeline>
- <codeline lineno="33"><highlight class="normal"></highlight></codeline>
- <codeline lineno="39" refid="classtk_1_1_semaphore_1a863ccee07bc701a78342c14503955d73" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_semaphore_1a863ccee07bc701a78342c14503955d73" kindref="member">acquire</ref>()<sp/>{</highlight></codeline>
- <codeline lineno="40"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="41"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>(count_<sp/><=<sp/>0)<sp/>{</highlight></codeline>
- <codeline lineno="42"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint8_t<sp/>slot<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a73a80d92a172d565201f99e8f31278e4" kindref="member">detail::current_task_slot</ref>();</highlight></codeline>
- <codeline lineno="43"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>wait_mask_<sp/>|=<sp/>(<ref refid="namespacetk_1add371a241ec6c1695ef4e67935317edd" kindref="member">task_mask_t</ref>{1}<sp/><<<sp/>slot);</highlight></codeline>
- <codeline lineno="44"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a400363f36b5fb5dfc8aec11334471d0d" kindref="member">detail::block_current_task_locked</ref>();</highlight></codeline>
- <codeline lineno="45"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="46"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>他タスクから<sp/>release()<sp/>されて再開したら再チェック</highlight><highlight class="normal"></highlight></codeline>
- <codeline lineno="47"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="49"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>count_--;</highlight></codeline>
- <codeline lineno="50"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="51"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="52"><highlight class="normal"></highlight></codeline>
- <codeline lineno="59" refid="classtk_1_1_semaphore_1a3a246c8afc866dc438186d0a53cad5c2" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_semaphore_1a3a246c8afc866dc438186d0a53cad5c2" kindref="member">try_acquire</ref>()<sp/>{</highlight></codeline>
- <codeline lineno="60"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="61"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>success<sp/>=<sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="62"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(count_<sp/>><sp/>0)<sp/>{</highlight></codeline>
- <codeline lineno="63"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>count_--;</highlight></codeline>
- <codeline lineno="64"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>success<sp/>=<sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="65"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="66"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="67"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>success;</highlight></codeline>
- <codeline lineno="68"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="69"><highlight class="normal"></highlight></codeline>
- <codeline lineno="73" refid="classtk_1_1_semaphore_1a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_semaphore_1a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b" kindref="member">release</ref>()<sp/>{</highlight></codeline>
- <codeline lineno="74"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="75"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(count_<sp/><<sp/>max_count_)<sp/>{</highlight></codeline>
- <codeline lineno="76"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>count_++;</highlight></codeline>
- <codeline lineno="77"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(wait_mask_<sp/>!=<sp/>0)<sp/>{</highlight></codeline>
- <codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint8_t<sp/>slot<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a70ba35e0daee086ad86770f1e39c9b35" kindref="member">detail::find_highest_prio_waiter</ref>(wait_mask_);</highlight></codeline>
- <codeline lineno="80"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(slot<sp/>!=<sp/>0xFF)<sp/>{</highlight></codeline>
- <codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>wait_mask_<sp/>&=<sp/>~(<ref refid="namespacetk_1add371a241ec6c1695ef4e67935317edd" kindref="member">task_mask_t</ref>{1}<sp/><<<sp/>slot);</highlight></codeline>
- <codeline lineno="82"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1ab19385598f18560cb574cc86174ececa" kindref="member">detail::wake_task_locked</ref>(<ref refid="structtk_1_1_task_handle" kindref="compound">TaskHandle</ref>{slot});</highlight></codeline>
- <codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="85"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="86"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="87"><highlight class="normal"></highlight></codeline>
- <codeline lineno="89" refid="classtk_1_1_semaphore_1ae53b9c57cc25fafb242a21776f112701" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/>int32_t<sp/><ref refid="classtk_1_1_semaphore_1ae53b9c57cc25fafb242a21776f112701" kindref="member">count</ref>()</highlight><highlight class="keyword"><sp/>const<sp/></highlight><highlight class="normal">{</highlight></codeline>
- <codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="91"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>int32_t<sp/>c<sp/>=<sp/>count_;</highlight></codeline>
- <codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="93"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>c;</highlight></codeline>
- <codeline lineno="94"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="95"><highlight class="normal"></highlight></codeline>
- <codeline lineno="96"><highlight class="normal"></highlight><highlight class="keyword">private</highlight><highlight class="normal">:</highlight></codeline>
- <codeline lineno="97"><highlight class="normal"><sp/><sp/><sp/><sp/>int32_t<sp/>count_;</highlight></codeline>
- <codeline lineno="98"><highlight class="normal"><sp/><sp/><sp/><sp/>int32_t<sp/>max_count_;</highlight></codeline>
- <codeline lineno="99"><highlight class="normal"><sp/><sp/><sp/><sp/><ref refid="namespacetk_1add371a241ec6c1695ef4e67935317edd" kindref="member">task_mask_t</ref><sp/>wait_mask_{0};</highlight></codeline>
- <codeline lineno="100"><highlight class="normal">};</highlight></codeline>
- <codeline lineno="101"><highlight class="normal"></highlight></codeline>
- <codeline lineno="105" refid="namespacetk_1ab1f2fa3d79e99f13610bd330a0df928b" refkind="member"><highlight class="normal"></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal"><ref refid="namespacetk_1ab1f2fa3d79e99f13610bd330a0df928b" kindref="member">BinarySemaphore</ref><sp/>=<sp/><ref refid="classtk_1_1_semaphore" kindref="compound">Semaphore</ref>;</highlight></codeline>
- <codeline lineno="106"><highlight class="normal"></highlight></codeline>
- <codeline lineno="123" refid="classtk_1_1_mutex" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classtk_1_1_mutex_1a8b17431db60f4ab48a3859b2ca722eb1" kindref="member">Mutex</ref><sp/>{</highlight></codeline>
- <codeline lineno="124"><highlight class="normal"></highlight><highlight class="keyword">public</highlight><highlight class="normal">:</highlight></codeline>
- <codeline lineno="125" refid="classtk_1_1_mutex_1a8b17431db60f4ab48a3859b2ca722eb1" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/><ref refid="classtk_1_1_mutex_1a8b17431db60f4ab48a3859b2ca722eb1" kindref="member">Mutex</ref>()<sp/>=<sp/></highlight><highlight class="keywordflow">default</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="126"><highlight class="normal"></highlight></codeline>
- <codeline lineno="132" refid="classtk_1_1_mutex_1a7f5645bba55df2db263f92a954802c27" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_mutex_1a7f5645bba55df2db263f92a954802c27" kindref="member">lock</ref>()<sp/>{</highlight></codeline>
- <codeline lineno="133"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="134"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint8_t<sp/>my_slot<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a73a80d92a172d565201f99e8f31278e4" kindref="member">detail::current_task_slot</ref>();</highlight></codeline>
- <codeline lineno="135"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>(locked_)<sp/>{</highlight></codeline>
- <codeline lineno="136"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>wait_mask_<sp/>|=<sp/>(<ref refid="namespacetk_1add371a241ec6c1695ef4e67935317edd" kindref="member">task_mask_t</ref>{1}<sp/><<<sp/>my_slot);</highlight></codeline>
- <codeline lineno="137"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a400363f36b5fb5dfc8aec11334471d0d" kindref="member">detail::block_current_task_locked</ref>();</highlight></codeline>
- <codeline lineno="138"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="139"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="140"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="141"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>locked_<sp/>=<sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="142"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>owner_slot_<sp/>=<sp/>my_slot;</highlight></codeline>
- <codeline lineno="143"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="144"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="145"><highlight class="normal"></highlight></codeline>
- <codeline lineno="152" refid="classtk_1_1_mutex_1a666dd03fb22c5cb855e3145f76a58b9c" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_mutex_1a666dd03fb22c5cb855e3145f76a58b9c" kindref="member">try_lock</ref>()<sp/>{</highlight></codeline>
- <codeline lineno="153"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint8_t<sp/>my_slot<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a73a80d92a172d565201f99e8f31278e4" kindref="member">detail::current_task_slot</ref>();</highlight></codeline>
- <codeline lineno="155"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>success<sp/>=<sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="156"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(!locked_)<sp/>{</highlight></codeline>
- <codeline lineno="157"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>locked_<sp/>=<sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="158"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>owner_slot_<sp/>=<sp/>my_slot;</highlight></codeline>
- <codeline lineno="159"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>success<sp/>=<sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="160"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="161"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="162"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>success;</highlight></codeline>
- <codeline lineno="163"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="164"><highlight class="normal"></highlight></codeline>
- <codeline lineno="171" refid="classtk_1_1_mutex_1ae8d5dfd5655b5aa54d63db6e0cf2f707" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_mutex_1ae8d5dfd5655b5aa54d63db6e0cf2f707" kindref="member">unlock</ref>()<sp/>{</highlight></codeline>
- <codeline lineno="172"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="173"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint8_t<sp/>my_slot<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a73a80d92a172d565201f99e8f31278e4" kindref="member">detail::current_task_slot</ref>();</highlight></codeline>
- <codeline lineno="174"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(locked_<sp/>&&<sp/>owner_slot_<sp/>==<sp/>my_slot)<sp/>{</highlight></codeline>
- <codeline lineno="175"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>locked_<sp/>=<sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="176"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>owner_slot_<sp/>=<sp/>0xFF;</highlight></codeline>
- <codeline lineno="177"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(wait_mask_<sp/>!=<sp/>0)<sp/>{</highlight></codeline>
- <codeline lineno="178"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint8_t<sp/>slot<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a70ba35e0daee086ad86770f1e39c9b35" kindref="member">detail::find_highest_prio_waiter</ref>(wait_mask_);</highlight></codeline>
- <codeline lineno="179"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(slot<sp/>!=<sp/>0xFF)<sp/>{</highlight></codeline>
- <codeline lineno="180"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>wait_mask_<sp/>&=<sp/>~(<ref refid="namespacetk_1add371a241ec6c1695ef4e67935317edd" kindref="member">task_mask_t</ref>{1}<sp/><<<sp/>slot);</highlight></codeline>
- <codeline lineno="181"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1ab19385598f18560cb574cc86174ececa" kindref="member">detail::wake_task_locked</ref>(<ref refid="structtk_1_1_task_handle" kindref="compound">TaskHandle</ref>{slot});</highlight></codeline>
- <codeline lineno="182"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="183"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="184"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="185"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="186"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="187"><highlight class="normal"></highlight></codeline>
- <codeline lineno="189" refid="classtk_1_1_mutex_1acf574e35540879481f1f6e5452a504ab" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_mutex_1acf574e35540879481f1f6e5452a504ab" kindref="member">is_locked</ref>()</highlight><highlight class="keyword"><sp/>const<sp/></highlight><highlight class="normal">{</highlight></codeline>
- <codeline lineno="190"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>uint32_t<sp/>save<sp/>=<sp/><ref refid="namespacetk_1_1detail_1a5b8fa6406a867edf8c4410fcb03c6523" kindref="member">detail::sched_lock</ref>();</highlight></codeline>
- <codeline lineno="191"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>lk<sp/>=<sp/>locked_;</highlight></codeline>
- <codeline lineno="192"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespacetk_1_1detail_1a80be9b2429346faf161eab01f595684b" kindref="member">detail::sched_unlock</ref>(save);</highlight></codeline>
- <codeline lineno="193"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>lk;</highlight></codeline>
- <codeline lineno="194"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
- <codeline lineno="195"><highlight class="normal"></highlight></codeline>
- <codeline lineno="196"><highlight class="normal"></highlight><highlight class="keyword">private</highlight><highlight class="normal">:</highlight></codeline>
- <codeline lineno="197"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>locked_{</highlight><highlight class="keyword">false</highlight><highlight class="normal">};</highlight></codeline>
- <codeline lineno="198"><highlight class="normal"><sp/><sp/><sp/><sp/>uint8_t<sp/>owner_slot_{0xFF};</highlight></codeline>
- <codeline lineno="199"><highlight class="normal"><sp/><sp/><sp/><sp/><ref refid="namespacetk_1add371a241ec6c1695ef4e67935317edd" kindref="member">task_mask_t</ref><sp/>wait_mask_{0};</highlight></codeline>
- <codeline lineno="200"><highlight class="normal">};</highlight></codeline>
- <codeline lineno="201"><highlight class="normal"></highlight></codeline>
- <codeline lineno="210"><highlight class="normal"></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/><</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Lockable></highlight></codeline>
- <codeline lineno="211" refid="classtk_1_1_lock_guard" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classtk_1_1_lock_guard_1a3a922c7edf84ce25ef67151c322bb0eb" kindref="member">LockGuard</ref><sp/>{</highlight></codeline>
- <codeline lineno="212"><highlight class="normal"></highlight><highlight class="keyword">public</highlight><highlight class="normal">:</highlight></codeline>
- <codeline lineno="217" refid="classtk_1_1_lock_guard_1a3a922c7edf84ce25ef67151c322bb0eb" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">explicit</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_lock_guard_1a3a922c7edf84ce25ef67151c322bb0eb" kindref="member">LockGuard</ref>(Lockable&<sp/>m)<sp/>:<sp/>m_(m)<sp/>{<sp/>m_.lock();<sp/>}</highlight></codeline>
- <codeline lineno="218"><highlight class="normal"></highlight></codeline>
- <codeline lineno="220" refid="classtk_1_1_lock_guard_1a52eeb50abee00bd0ed16cfa6618ce40f" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/><ref refid="classtk_1_1_lock_guard_1a52eeb50abee00bd0ed16cfa6618ce40f" kindref="member">~LockGuard</ref>()<sp/>{<sp/>m_.unlock();<sp/>}</highlight></codeline>
- <codeline lineno="221"><highlight class="normal"></highlight></codeline>
- <codeline lineno="222" refid="classtk_1_1_lock_guard_1af9bc86bc2036c4b8e54633ddee811604" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/><ref refid="classtk_1_1_lock_guard_1af9bc86bc2036c4b8e54633ddee811604" kindref="member">LockGuard</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_lock_guard_1a3a922c7edf84ce25ef67151c322bb0eb" kindref="member">LockGuard</ref>&)<sp/>=<sp/></highlight><highlight class="keyword">delete</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="223" refid="classtk_1_1_lock_guard_1a3f121f8aa1307f0f6e6e608cf138340c" refkind="member"><highlight class="normal"><sp/><sp/><sp/><sp/><ref refid="classtk_1_1_lock_guard_1a3a922c7edf84ce25ef67151c322bb0eb" kindref="member">LockGuard</ref>&<sp/><ref refid="classtk_1_1_lock_guard_1a3f121f8aa1307f0f6e6e608cf138340c" kindref="member">operator=</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="classtk_1_1_lock_guard_1a3a922c7edf84ce25ef67151c322bb0eb" kindref="member">LockGuard</ref>&)<sp/>=<sp/></highlight><highlight class="keyword">delete</highlight><highlight class="normal">;</highlight></codeline>
- <codeline lineno="224"><highlight class="normal"></highlight></codeline>
- <codeline lineno="225"><highlight class="normal"></highlight><highlight class="keyword">private</highlight><highlight class="normal">:</highlight></codeline>
- <codeline lineno="226"><highlight class="normal"><sp/><sp/><sp/><sp/>Lockable&<sp/>m_;</highlight></codeline>
- <codeline lineno="227"><highlight class="normal">};</highlight></codeline>
- <codeline lineno="228"><highlight class="normal"></highlight></codeline>
- <codeline lineno="229"><highlight class="normal">}<sp/><sp/></highlight><highlight class="comment">//<sp/>namespace<sp/>tk</highlight><highlight class="normal"></highlight></codeline>
- </programlisting>
- <location file="C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/sync.hpp"/>
- </compounddef>
- </doxygen>
|