Quellcode durchsuchen

Add: ドキュメントを追加

Satoshi Yoneda vor 1 Monat
Ursprung
Commit
f930aad81b
100 geänderte Dateien mit 17313 neuen und 0 gelöschten Zeilen
  1. 2560 0
      docs/Doxyfile
  2. 161 0
      docs/html/actor_8hpp.html
  3. 8 0
      docs/html/actor_8hpp.js
  4. 382 0
      docs/html/actor_8hpp_source.html
  5. 138 0
      docs/html/annotated.html
  6. 14 0
      docs/html/annotated_dup.js
  7. 151 0
      docs/html/classes.html
  8. 136 0
      docs/html/classtk_1_1_actor-members.html
  9. 491 0
      docs/html/classtk_1_1_actor.html
  10. 12 0
      docs/html/classtk_1_1_actor.js
  11. 131 0
      docs/html/classtk_1_1_event_hub-members.html
  12. 304 0
      docs/html/classtk_1_1_event_hub.html
  13. 131 0
      docs/html/classtk_1_1_lock_guard-members.html
  14. 278 0
      docs/html/classtk_1_1_lock_guard.html
  15. 7 0
      docs/html/classtk_1_1_lock_guard.js
  16. 132 0
      docs/html/classtk_1_1_mutex-members.html
  17. 303 0
      docs/html/classtk_1_1_mutex.html
  18. 8 0
      docs/html/classtk_1_1_mutex.js
  19. 131 0
      docs/html/classtk_1_1_preempt_guard-members.html
  20. 259 0
      docs/html/classtk_1_1_preempt_guard.html
  21. 7 0
      docs/html/classtk_1_1_preempt_guard.js
  22. 132 0
      docs/html/classtk_1_1_semaphore-members.html
  23. 315 0
      docs/html/classtk_1_1_semaphore.html
  24. 8 0
      docs/html/classtk_1_1_semaphore.js
  25. 61 0
      docs/html/clipboard.js
  26. 143 0
      docs/html/codefolding.js
  27. 58 0
      docs/html/cookie.js
  28. 137 0
      docs/html/dir_01f710e8c634e538c6d9f00c5eaf4f2e.html
  29. 4 0
      docs/html/dir_01f710e8c634e538c6d9f00c5eaf4f2e.js
  30. 138 0
      docs/html/dir_065670814960ad9cf60e14e38242ec92.html
  31. 5 0
      docs/html/dir_065670814960ad9cf60e14e38242ec92.js
  32. 137 0
      docs/html/dir_34ae86e414c9a960c5c39d1d6b15c7a8.html
  33. 4 0
      docs/html/dir_34ae86e414c9a960c5c39d1d6b15c7a8.js
  34. 141 0
      docs/html/dir_57f08cdb50348f663244f527066db34a.html
  35. 5 0
      docs/html/dir_57f08cdb50348f663244f527066db34a.js
  36. 137 0
      docs/html/dir_5c27857cec97849c25650021b743744e.html
  37. 4 0
      docs/html/dir_5c27857cec97849c25650021b743744e.js
  38. 138 0
      docs/html/dir_6d4b68ea9176da934383ead6eaf0491a.html
  39. 5 0
      docs/html/dir_6d4b68ea9176da934383ead6eaf0491a.js
  40. 139 0
      docs/html/dir_91e9b2eecded889eb8782a5ba7843b6a.html
  41. 6 0
      docs/html/dir_91e9b2eecded889eb8782a5ba7843b6a.js
  42. 137 0
      docs/html/dir_9b10c2ff4e034627dc7271865b055c64.html
  43. 4 0
      docs/html/dir_9b10c2ff4e034627dc7271865b055c64.js
  44. 2607 0
      docs/html/doxygen.css
  45. 21 0
      docs/html/doxygen.svg
  46. 146 0
      docs/html/doxygen_crawl.html
  47. 142 0
      docs/html/files.html
  48. 4 0
      docs/html/files_dup.js
  49. 206 0
      docs/html/functions.html
  50. 202 0
      docs/html/functions_func.html
  51. 129 0
      docs/html/functions_vars.html
  52. 139 0
      docs/html/globals.html
  53. 132 0
      docs/html/globals_defs.html
  54. 131 0
      docs/html/globals_func.html
  55. 126 0
      docs/html/globals_vars.html
  56. 125 0
      docs/html/index.html
  57. 299 0
      docs/html/kernel_8hpp.html
  58. 35 0
      docs/html/kernel_8hpp.js
  59. 257 0
      docs/html/kernel_8hpp_source.html
  60. 589 0
      docs/html/menu.js
  61. 74 0
      docs/html/menudata.js
  62. 149 0
      docs/html/namespacemembers.html
  63. 124 0
      docs/html/namespacemembers_enum.html
  64. 127 0
      docs/html/namespacemembers_eval.html
  65. 141 0
      docs/html/namespacemembers_func.html
  66. 126 0
      docs/html/namespacemembers_type.html
  67. 130 0
      docs/html/namespaces.html
  68. 4 0
      docs/html/namespaces_dup.js
  69. 601 0
      docs/html/namespacetk.html
  70. 41 0
      docs/html/namespacetk.js
  71. 272 0
      docs/html/namespacetk_1_1detail.html
  72. 329 0
      docs/html/navtree.css
  73. 1163 0
      docs/html/navtree.js
  74. 66 0
      docs/html/navtreedata.js
  75. 163 0
      docs/html/navtreeindex0.js
  76. 196 0
      docs/html/port__m33_8c.html
  77. 6 0
      docs/html/port__m33_8c.js
  78. 209 0
      docs/html/port__m33_8h.html
  79. 6 0
      docs/html/port__m33_8h.js
  80. 156 0
      docs/html/port__m33_8h_source.html
  81. 226 0
      docs/html/scheduler_8cpp.html
  82. 9 0
      docs/html/scheduler_8cpp.js
  83. 7 0
      docs/html/search/all_0.js
  84. 5 0
      docs/html/search/all_1.js
  85. 5 0
      docs/html/search/all_10.js
  86. 4 0
      docs/html/search/all_11.js
  87. 4 0
      docs/html/search/all_12.js
  88. 6 0
      docs/html/search/all_13.js
  89. 6 0
      docs/html/search/all_2.js
  90. 5 0
      docs/html/search/all_3.js
  91. 7 0
      docs/html/search/all_4.js
  92. 4 0
      docs/html/search/all_5.js
  93. 7 0
      docs/html/search/all_6.js
  94. 4 0
      docs/html/search/all_7.js
  95. 5 0
      docs/html/search/all_8.js
  96. 5 0
      docs/html/search/all_9.js
  97. 4 0
      docs/html/search/all_a.js
  98. 6 0
      docs/html/search/all_b.js
  99. 15 0
      docs/html/search/all_c.js
  100. 4 0
      docs/html/search/all_d.js

+ 2560 - 0
docs/Doxyfile

@@ -0,0 +1,2560 @@
+# Doxyfile 1.18.0
+
+# このファイルは、プロジェクトのドキュメント生成システム Doxygen (www.doxygen.org) で使用される設定を記述します。
+#
+# 二重のハッシュ(##)の後のすべてのテキストはコメントとみなされ、 それが先行するタグの前に配置されます。
+#
+# 単一のハッシュ(#)の後のすべてのテキストはコメントとみなされ、無視されます。 書式は次のとおりです:
+# TAG = value [value, ...]
+# リストの場合、次のようにして項目を追加することもできます:
+# TAG += value [value, ...]
+# 空白を含む値は、引用符(" ")で囲む必要があります。
+#
+# 注意:
+#
+# Doxygen を使用して、使用した設定ファイルをテンプレート設定ファイルと比較します:
+# doxygen -x [configFile]
+# 環境変数や CMake タイプの置換変数を置き換えずに、Doxygen を使用して 使用した設定ファイルをテンプレート設定ファイルと比較します:
+# doxygen -x_noenv [configFile]
+
+#---------------------------------------------------------------------------
+# プロジェクト関連の設定オプション
+#---------------------------------------------------------------------------
+
+# このタグは、設定ファイル内のこれ以降のすべての文字に使用されるエンコーディングを指定します。デフォルトはUTF-
+# 8で、このタグが最初に現れる前のすべてのテキストにも使用されるエンコーディングです。Doxygenは libiconv (または libc に組み込まれたi
+# conv)を使用してトランスコーディングを行います。可能なエンコーディングのリストについては、https://www.gnu.org/software/li
+# biconv/ を参照してください。
+# デフォルト値は UTF-8 です。
+
+DOXYFILE_ENCODING      = UTF-8
+
+# PROJECT_NAME タグは、ドキュメントを生成するプロジェクトを識別する単一の単語(またはDoxywizardを使用していない場合は二重引用符で囲ん
+# だ複数の単語)です。この名前は、生成されるほとんどのページのタイトルなどで使用されます。
+# デフォルト値は My Project です。
+
+PROJECT_NAME           = tinykernel
+
+# PROJECT_NUMBER タグを使用して、プロジェクト番号またはリビジョン番号を入力できます。これは、生成されたドキュメントのアーカイブや、バージョン
+# 管理システムが使用されている場合に便利です。
+
+PROJECT_NUMBER         =
+
+# PROJECT_BRIEF タグを使用すると、各ページの上部に表示されるプロジェクトの簡単な1行説明を提供できます。これにより、読者はプロジェクトの目的を
+# すぐに把握できます。説明は短くしてください。
+
+PROJECT_BRIEF          =
+
+# PROJECT_LOGO タグを使用すると、ドキュメントに含まれるロゴまたはアイコンを指定できます。ロゴの最大高さは55ピクセルを超えてはならず、最大幅は
+# 200ピクセルを超えてはなりません。Doxygenはロゴを出力ディレクトリにコピーします。
+
+PROJECT_LOGO           =
+
+# PROJECT_ICON タグを使用すると、HTMLドキュメントが表示されるときにブラウザのタブに表示されるアイコン(ファビコン)を指定できます。Doxy
+# genはアイコンを出力ディレクトリにコピーします。
+
+PROJECT_ICON           =
+
+# OUTPUT_DIRECTORY タグは、生成されたドキュメントが書き込まれるパス(相対または絶対)を指定するために使用されます。相対パスが入力された場合
+# 、Doxygenが開始された場所からの相対パスになります。空白のままにすると、現在のディレクトリが使用されます。
+
+OUTPUT_DIRECTORY       = C:/Users/yoneda/Documents/Pico_Projects/tinykernel/docs
+
+# CREATE_SUBDIRS タグが YES に設定されている場合、Doxygenは各出力形式の出力ディレクトリの下に最大4096のサブディレクトリ(2レ
+# ベル)を作成し、生成されたファイルをこれらのディレクトリに分散させます。このオプションは、Doxygenに大量のソースファイルを処理させる場合に便利です。す
+# べての生成ファイルを同じディレクトリに置くと、ファイルシステムのパフォーマンス問題が発生する可能性があるためです。サブディレクトリの数は
+# CREATE_SUBDIRS_LEVEL で調整してください。
+# デフォルト値は NO です。
+
+CREATE_SUBDIRS         = NO
+
+# CREATE_SUBDIRS タグが YES に設定されている場合に作成されるサブディレクトリの数を制御します。レベル0は16ディレクトリを表し、レベルの
+# 増加ごとにディレクトリの数が倍になり、レベル8では4096ディレクトリになります。これがデフォルトであり最大値でもあります。サブディレクトリは2レベルで編成
+# され、最初のレベルは常に16ディレクトリの固定数を持っています。
+# 最小値: 0, 最大値: 8, デフォルト値: 8。
+# このタグはタグ CREATE_SUBDIRS を YES に設定する必要があります。
+
+CREATE_SUBDIRS_LEVEL   = 8
+
+# ALLOW_UNICODE_NAMES タグが YES に設定されている場合、Doxygenは生成ファイルの名前に非ASCII文字を使用できます。 NO
+# に設定されている場合、非ASCII文字はエスケープされます。例えば、Unicode U+3044には_xE3_x81_x84が使用されます。
+# デフォルト値は NO です。
+
+ALLOW_UNICODE_NAMES    = NO
+
+# OUTPUT_LANGUAGE タグは、Doxygenによって生成されるすべてのドキュメントが書かれる言語を指定するために使用されます。Doxygenはこ
+# の情報を使用して、適切な言語ですべての定数出力を生成します。
+# 可能な値は:Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (アメリカ合衆国),
+# Esperanto, Farsi (ペルシア語), Finnish, French, German, Greek, Hindi, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (英語メッセージ付き日本語), Korean, Korean-en
+# (英語メッセージ付き韓国語), Latvian, Lithuanian, Macedonian, Norwegian, Persian (ファルシ語),
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
+# Slovene, Spanish, Swedish, Turkish, UkrainianとVietnamese.
+# デフォルト値は English です。
+
+OUTPUT_LANGUAGE        = English
+
+# BRIEF_MEMBER_DESC タグが YES
+# に設定されている場合、Doxygenはファイルおよびクラスのドキュメントにリストされているメンバーの後に概要説明を含めます( Javadoc
+# と同様)。無効にするには NO に設定してください。
+# デフォルト値は YES です。
+
+BRIEF_MEMBER_DESC      = YES
+
+# REPEAT_BRIEF タグが YES に設定されている場合、Doxygenはメンバーまたは関数の概要説明を詳細な説明の前に追加します。
+#
+# なお、HIDE_UNDOC_MEMBERSとBRIEF_MEMBER_DESCの両方が NO に設定されている場合、概要説明は完全に抑制されます。
+# デフォルト値は YES です。
+
+REPEAT_BRIEF           = YES
+
+# このタグは、各種一覧のテキストを整形するために使用される準インテリジェントな概要説明の省略機能を実装します。このリストの各文字列が概要説明の先頭に見つかった
+# 場合、その文字列はテキストから削除され、リスト全体の処理後の結果が注釈テキストとして使用されます。それ以外の場合、概要説明はそのまま使用されます。空白のまま
+# にすると、次の値が使用されます($nameは自動的にエンティティ名に置き換えられます):The $name class, The $name widget,
+# The $name file, is, provides, specifies, contains, represents, a, anとthe.
+
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# ALWAYS_DETAILED_SEC とREPEAT_BRIEFタグの両方が YES
+# に設定されている場合、概要説明しかない場合でも、Doxygenは詳細セクションを生成します。
+# デフォルト値は NO です。
+
+ALWAYS_DETAILED_SEC    = NO
+
+# INLINE_INHERITED_MEMB タグが YES に設定されている場合、Doxygenはクラスのドキュメントに継承されたすべてのメンバーを、それ
+# らのメンバーが通常のクラスメンバーであるかのように表示します。基本クラスのコンストラクタ、デストラクタ、代入演算子は表示されません。
+# デフォルト値は NO です。
+
+INLINE_INHERITED_MEMB  = NO
+
+# FULL_PATH_NAMES タグが YES
+# に設定されている場合、Doxygenはファイルリストとヘッダーファイルのファイル名の前にフルパスを追加します。 NO
+# に設定されている場合、ファイル名を一意にする最短パスが使用されます。
+# デフォルト値は YES です。
+
+FULL_PATH_NAMES        = YES
+
+# STRIP_FROM_PATH タグを使用して、パスのユーザー定義部分を削除できます。削除は、指定された文字列のいずれかがパスの左側部分と一致する場合にの
+# み行われます。このタグを使用して、ファイルリストに相対パスを表示できます。空白のままにすると、Doxygenが実行されるディレクトリが削除対象のパスとして使
+# 用されます。
+#
+# なお、ここでは絶対パスだけでなく、Doxygenの開始ディレクトリからの相対パスも指定できます。
+# このタグはタグ FULL_PATH_NAMES を YES に設定する必要があります。
+
+STRIP_FROM_PATH        =
+
+# STRIP_FROM_INC_PATH タグを使用して、クラスのドキュメントで言及されているパスのユーザー定義部分を削除できます。これは、クラスを使用する
+# ためにどのヘッダーファイルをインクルードするかを読者に伝えます。空白のままにすると、クラス定義を含むヘッダーファイルの名前のみが使用されます。それ以外の場合
+# は、通常-Iフラグを使用してコンパイラに渡されるインクルードパスのリストを指定する必要があります。
+
+STRIP_FROM_INC_PATH    =
+
+# SHORT_NAMES タグが YES
+# に設定されている場合、Doxygenは非常に短い(ただし可読性の低い)ファイル名を生成します。これは、DOS、Mac、CD-
+# ROMのようにファイルシステムが長いファイル名をサポートしない場合に便利です。
+# デフォルト値は NO です。
+
+SHORT_NAMES            = NO
+
+# JAVADOC_AUTOBRIEF タグが YES
+# に設定されている場合、DoxygenはJavadocスタイルのコメントの最初の行(最初のピリオド、疑問符、または感嘆符まで)を概要説明として解釈します。
+# NO
+# に設定されている場合、Javadocスタイルは通常のQtスタイルのコメントと同様に動作します(つまり、概要説明には明示的な@briefコマンドが必要です)。
+# デフォルト値は NO です。
+
+JAVADOC_AUTOBRIEF      = NO
+
+# JAVADOC_BANNER タグが YES に設定されている場合、Doxygenは
+# /***************
+# のような行をJavadocスタイルのコメント「バナー」の開始として解釈します。 NO
+# に設定されている場合、Javadocスタイルは通常のコメントと同様に動作し、Doxygenはそれを解釈しません。
+# デフォルト値は NO です。
+
+JAVADOC_BANNER         = NO
+
+# QT_AUTOBRIEF タグが YES
+# に設定されている場合、DoxygenはQtスタイルのコメントの最初の行(最初のピリオド、疑問符、または感嘆符まで)を概要説明として解釈します。 NO
+# に設定されている場合、Qtスタイルは通常のQtスタイルのコメントと同様に動作します(つまり、概要説明には明示的な\briefコマンドが必要です)。
+# デフォルト値は NO です。
+
+QT_AUTOBRIEF           = NO
+
+# MULTILINE_CPP_IS_BRIEF タグを YES に設定すると、Doxygenは複数行のC++特殊コメントブロック( //! または ///
+# コメントのブロック)を概要説明として扱います。これは以前のデフォルト動作でした。新しいデフォルトでは、複数行のC++コメントブロックを詳細説明として扱います
+# 。以前の動作を好む場合は、このタグを YES に設定してください。
+#
+# なお、このタグを YES に設定すると、Rational Roseコメントは認識されなくなります。
+# デフォルト値は NO です。
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# デフォルトでは、Pythonのdocstringは整形済みテキストとして表示され、Doxygenの特殊コマンドは使用できません。
+# PYTHON_DOCSTRING を NO
+# に設定すると、Doxygenの特殊コマンドを使用でき、docstringドキュメントブロックの内容がDoxygenドキュメントとして表示されます。
+# デフォルト値は YES です。
+
+PYTHON_DOCSTRING       = YES
+
+# INHERIT_DOCS タグが YES に設定されている場合、未文書化メンバーは、それが再実装する文書化済みメンバーからドキュメントを継承します。
+# デフォルト値は YES です。
+
+INHERIT_DOCS           = YES
+
+# SEPARATE_MEMBER_PAGES タグが YES に設定されている場合、Doxygenは各メンバーに個別のページを生成します。 NO
+# に設定されている場合、メンバーのドキュメントはそれを含むファイル/クラス/名前空間の一部となります。
+# デフォルト値は NO です。
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# TAB_SIZE タグを使用して、タブのスペース数を設定できます。Doxygenはこの値を使用して、コードフラグメントのタブをスペースに置き換えます。
+# 最小値: 1, 最大値: 16, デフォルト値: 4。
+
+TAB_SIZE               = 4
+
+# このタグを使用して、ドキュメント内でコマンドとして機能するエイリアスを指定できます。エイリアスの形式は次のとおりです:
+# name=value
+# 例えば、
+# "sideeffect=@par Side Effects:^^"
+# を追加すると、ドキュメントに \sideeffect (または @sideeffect )コマンドを記述でき、「Side Effects:」という見出しの
+# ユーザー定義段落が生成されます。なお、エイリアスの値部分に\nを入れて改行を挿入することはできません(出力結果において)。エイリアスの値部分に^^を入れると
+# 、元のファイルに物理的な改行があるかのように改行を挿入できます。エイリアスの値部分にリテラルの {、}、または , が必要な場合は、バックスラッシュ (\)
+# でエスケープする必要があります。これは、コマンド \{ および \} と競合する可能性があります。これらのコマンドには、バージョン @{ および @}
+# を使用するか、二重エスケープ (\\{ および \\}) を使用することをお勧めします。
+
+ALIASES                =
+
+# プロジェクトがCソースのみで構成されている場合、 OPTIMIZE_OUTPUT_FOR_C タグを YES
+# に設定してください。DoxygenはCにより適した出力を生成します。例えば、使用される名前の一部が異なり、すべてのメンバーのリストは省略されます。
+# デフォルト値は NO です。
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# プロジェクトがJavaまたはPythonソースのみで構成されている場合、 OPTIMIZE_OUTPUT_JAVA タグを YES
+# に設定してください。Doxygenはその言語により適した出力を生成します。例えば、名前空間はパッケージとして表示され、修飾スコープの表示が異なります。
+# デフォルト値は NO です。
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# プロジェクトがFortranソースで構成されている場合、 OPTIMIZE_FOR_FORTRAN タグを YES
+# に設定してください。DoxygenはFortranに適した出力を生成します。
+# デフォルト値は NO です。
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# プロジェクトがVHDLソースで構成されている場合、 OPTIMIZE_OUTPUT_VHDL タグを YES
+# に設定してください。DoxygenはVHDLに適した出力を生成します。
+# デフォルト値は NO です。
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# プロジェクトがSliceソースのみで構成されている場合、 OPTIMIZE_OUTPUT_SLICE タグを YES
+# に設定してください。Doxygenはその言語により適した出力を生成します。例えば、名前空間はモジュールとして表示され、型はより多くのグループに分類されます。
+# デフォルト値は NO です。
+
+OPTIMIZE_OUTPUT_SLICE  = NO
+
+# Doxygenは、解析するファイルの拡張子に応じて使用するパーサーを選択します。このタグを使用すると、特定の拡張子に使用するパーサーを割り当てることができま
+# す。Doxygenには組み込みのマッピングがありますが、このタグを使用して上書きまたは拡張できます。形式はext=languageで、extはファイル拡張子
+# 、languageはDoxygenがサポートするパーサーの1つです:IDL、Java、JavaScript、Csharp(C#)、C、C++、Lex、D、P
+# HP、md(Markdown)、Objective-
+# C、Python、Slice、VHDL、Fortran(固定形式Fortran:FortranFixed、自由形式Fortran:FortranFree、不
+# 明形式Fortran:Fortran。後者の場合、パーサーはコードが固定形式か自由形式かを推測します。これがFortranタイプのファイルのデフォルトです)
+# 。例えば、Doxygenに.incファイルをFortranファイルとして扱わせ(デフォルトはPHP)、
+# .fファイルをCとして扱わせる(デフォルトはFortran)には、inc=Fortran f=Cを使用します。
+#
+# なお、拡張子のないファイルの場合、プレースホルダーとしてno_extensionを使用できます。
+#
+# カスタム拡張子の場合、FILE_PATTERNSも設定する必要があります。そうしないとDoxygenはファイルを読み取りません。no_extensionを指
+# 定する場合は、FILE_PATTERNSに*を追加してください。
+#
+# デフォルトのファイル拡張子マッピングのリストも参照してください。
+
+EXTENSION_MAPPING      =
+
+# MARKDOWN_SUPPORT タグが有効な場合、DoxygenはすべてのコメントをMarkdown形式に従って前処理し、より読みやすいドキュメントを可
+# 能にします。詳細については、https://daringfireball.net/projects/markdown/ を参照してください。Markdown
+# 処理の出力はDoxygenによってさらに処理されるため、MarkdownフォーマットとDoxygen、HTML、およびXMLコマンドを混在させることができま
+# す。下位互換性の問題がある場合にのみ無効にしてください。
+# デフォルト値は YES です。
+
+MARKDOWN_SUPPORT       = YES
+
+# MARKDOWN_STRICT タグが有効な場合、DoxygenのネイティブマークアップとMarkdownが競合する場合でも、コメント内のテキストをMar
+# kdown形式として扱います。これはバッククォートが使用される場合にのみ関係します。Doxygenのネイティブマークアップでは、シングルクォートがバッククォ
+# ートで始まるテキストを終了させ、引用テキストとして扱いますが、Markdownではそのようなテキストはそのまま表示され、2番目の対応するバッククォートが見つ
+# かった場合にのみ終了します。また、Doxygenのネイティブマークアップでは、バッククォートセクション内のダブルクォートをエスケープする必要がありますが、M
+# arkdownでは不要です。
+# デフォルト値は YES です。
+# このタグはタグ MARKDOWN_SUPPORT を YES に設定する必要があります。
+
+MARKDOWN_STRICT        = YES
+
+# TOC_INCLUDE_HEADINGS
+# タグが非ゼロ値に設定されている場合、id属性がなくても、そのレベルまでのすべての見出しが目次に自動的に含まれます。
+# 注: この機能は現在Markdown見出しにのみ適用されます。
+# 最小値: 0, 最大値: 99, デフォルト値: 6。
+# このタグはタグ MARKDOWN_SUPPORT を YES に設定する必要があります。
+
+TOC_INCLUDE_HEADINGS   = 6
+
+# MARKDOWN_ID_STYLE タグを使用して、Markdown見出しの識別子を生成するアルゴリズムを指定できます。なお、各識別子は一意です。
+# 可能な値は:DOXYGEN 0から始まるシーケンス番号が続く固定の'autotoc_md'文字列を使用とGITHUB
+# タイトルの小文字版を使用し、空白は'-'に置換し、句読点文字は削除.
+# デフォルト値は DOXYGEN です。
+# このタグはタグ MARKDOWN_SUPPORT を YES に設定する必要があります。
+
+MARKDOWN_ID_STYLE      = DOXYGEN
+
+# 有効にすると、Doxygenは文書化されたクラスや名前空間に対応する単語を自動的に対応するドキュメントにリンクしようとします。このようなリンクは、単語の前に
+# % 記号を置くことで個別に防止できます。また、 AUTOLINK_SUPPORT を NO に設定することでグローバルに無効化できます。
+# AUTOLINK_IGNORE_WORDS タグにリストされた単語は自動リンクの対象外になります。
+# デフォルト値は YES です。
+
+AUTOLINK_SUPPORT       = YES
+
+# このタグは、AUTOLINK_SUPPORTを介した自動リンク生成が有効な場合に、ドキュメント内で単語の先頭と一致すると自動リンク生成を抑制する単語のリスト
+# を指定します。このリストは、\#や\link、\refコマンドを使用して明示的に作成されたリンクには影響しません。
+# このタグはタグ AUTOLINK_SUPPORT を YES に設定する必要があります。
+
+AUTOLINK_IGNORE_WORDS  =
+
+# STLクラス(std::string、std::vectorなど)を使用しているが、STLソースのタグファイルを入力として含めたくない場合は、このタグを
+# YES に設定する必要があります。これにより、DoxygenはSTLクラスを引数に持つ関数の宣言と定義を一致させることができます(例:func(std::s
+# tring);とfunc(std::string) {})。また、STLクラスを含む継承図とコラボレーション図もより完全で正確になります。
+# デフォルト値は NO です。
+
+BUILTIN_STL_SUPPORT    = NO
+
+# MicrosoftのC++/CLI言語を使用している場合は、解析サポートを有効にするためにこのオプションを YES に設定する必要があります。
+# デフォルト値は NO です。
+
+CPP_CLI_SUPPORT        = NO
+
+# プロジェクトがsip (see:
+# https://www.riverbankcomputing.com/software)ソースのみで構成されている場合は、 SIP_SUPPORT タグを
+# YES に設定します。Doxygenはそれらを通常のC++と同様に解析しますが、明示的な保護キーワードがない場合、すべてのクラスがプライベート継承ではなくパ
+# ブリック継承を使用すると見なします。
+# デフォルト値は NO です。
+
+SIP_SUPPORT            = NO
+
+# MicrosoftのIDLには、プロパティのゲッターおよびセッターメソッドを示す propget および propput 属性があります。このオプションを
+# YES に設定すると、Doxygenはドキュメント内のgetおよびsetメソッドをプロパティに置き換えます。これは、メソッドが実際に単純型を取得または設定し
+# ている場合にのみ機能します。そうでない場合、またはメソッドを表示したい場合は、このオプションを NO に設定する必要があります。
+# デフォルト値は YES です。
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# ドキュメントでメンバーグループ化が使用され、 DISTRIBUTE_GROUP_DOC タグが YES に設定されている場合、Doxygenはグループの最初
+# のメンバーのドキュメント(存在する場合)をグループの他のメンバーに再利用します。デフォルトでは、グループのすべてのメンバーを明示的に文書化する必要があります
+# 。
+# デフォルト値は NO です。
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# 構造体またはクラスをグループに追加し、このオプションが有効な場合、ネストされたクラスや構造体も同じグループに追加されます。デフォルトではこのオプションは無効
+# であり、ネストされた複合型は\ingroupを使用して明示的に追加する必要があります。
+# デフォルト値は NO です。
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# SUBGROUPING タグを YES に設定すると、同じタイプのクラスメンバーグループ(例:パブリック関数のグループ)を、そのタイプのサブグループとして
+# 配置できます(例:パブリック関数セクションの下)。サブグループ化を防ぐには NO
+# に設定します。または、\nosubgroupingコマンドを使用してクラスごとに指定することもできます。
+# デフォルト値は YES です。
+
+SUBGROUPING            = YES
+
+# INLINE_GROUPED_CLASSES タグが YES に設定されている場合、クラス、構造体、および共用体は、別のページ(HTMLおよびManページ
+# の場合)またはセクション(LaTeXおよびRTFの場合)ではなく、それらが含まれているグループ内に表示されます(例:\ingroupを使用)。
+#
+# なお、この機能はSEPARATE_MEMBER_PAGESと組み合わせて使用できません。
+# デフォルト値は NO です。
+
+INLINE_GROUPED_CLASSES = NO
+
+# INLINE_SIMPLE_STRUCTS タグが YES に設定されている場合、パブリックデータフィールドまたは単純なtypedefフィールドのみを持つ
+# 構造体、クラス、および共用体は、そのスコープが文書化されていれば、定義されているスコープ(ファイル、名前空間、またはグループ)のドキュメント内にインラインで
+# 表示されます。 NO に設定されている場合、構造体、クラス、および共用体は別のページ(HTMLおよびManページの場合)またはセクション(LaTeXおよびR
+# TFの場合)に表示されます。
+# デフォルト値は NO です。
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# TYPEDEF_HIDES_STRUCT タグを有効にすると、構造体、共用体、または列挙型のtypedefは、typedef名を持つ構造体、共用体、または
+# 列挙型として文書化されます。例えば、typedef struct TypeS {} TypeTは、ドキュメント内で TypeT
+# という名前の構造体として表示されます。無効な場合、typedefはファイル、名前空間、またはクラスのメンバーとして表示され、構造体は TypeS という名前
+# になります。これは、コーディング規約ですべての複合型をtypedefし、タグ名ではなくtypedef名のみを参照する場合に、Cコードで特に便利です。
+# デフォルト値は NO です。
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# シンボルルックアップキャッシュのサイズは、 LOOKUP_CACHE_SIZE を使用して設定できます。このキャッシュは、名前とスコープに基づいてシンボルを
+# 解決するために使用されます。これはコストのかかるプロセスであり、同じシンボルがコード内で複数回出現することが多いため、Doxygenは事前に解決されたシンボ
+# ルのキャッシュを保持します。キャッシュが小さすぎると、Doxygenは遅くなります。キャッシュが大きすぎると、メモリが無駄になります。キャッシュサイズは次の
+# 式で与えられます:2^(16+LOOKUP_CACHE_SIZE)。有効な範囲は0..9で、デフォルトは0で、キャッシュサイズは2^16=65536シンボル
+# に対応します。実行の終わりに、Doxygenはキャッシュの使用状況を報告し、速度の観点から最適なキャッシュサイズを提案します。
+# 最小値: 0, 最大値: 9, デフォルト値: 0。
+
+LOOKUP_CACHE_SIZE      = 0
+
+# NUM_PROC_THREADS は、処理中にDoxygenが使用できるスレッド数を指定します。 0 に設定すると、Doxygenはシステムで利用可能なコ
+# ア数に基づいて決定します。CPU負荷と処理速度のバランスをより細かく制御するには、0より大きい値を明示的に設定できます。現時点では、入力処理のみが複数スレッ
+# ドで実行可能です。これはまだ実験的な機能のため、デフォルトは1に設定されており、並列処理は実質的に無効になっています。問題が発生した場合はご報告ください。d
+# otグラフの並列生成は、 DOT_NUM_THREADS 設定で制御されます。
+# 最小値: 0, 最大値: 512, デフォルト値: 1。
+
+NUM_PROC_THREADS       = 1
+
+# TIMESTAMP タグが NO 以外に設定されている場合、生成された各ページにはページが生成された日付または日時が含まれます。 NO
+# に設定すると、複数回の実行結果を比較する際に便利です。
+# 可能な値は:YES, NO, DATETIMEとDATE.
+# デフォルト値は NO です。
+
+TIMESTAMP              = NO
+
+#---------------------------------------------------------------------------
+# ビルド関連の設定オプション
+#---------------------------------------------------------------------------
+
+# EXTRACT_ALL タグが YES に設定されている場合、Doxygenはドキュメントがなくても、すべてのエンティティが文書化されているものとして扱い
+# ます。プライベートクラスメンバーと静的ファイルメンバーは、それぞれEXTRACT_PRIVATEおよびEXTRACT_STATICタグを YES
+# に設定しない限り非表示になります。
+# 注: これにより、WARNINGSが YES に設定されている場合に通常生成される未文書化メンバーに関する警告も無効になります。
+# デフォルト値は NO です。
+
+EXTRACT_ALL            = YES
+
+# EXTRACT_PRIVATE タグが YES に設定されている場合、クラスのすべてのプライベートメンバーがドキュメントに含まれます。
+# デフォルト値は NO です。
+
+EXTRACT_PRIVATE        = NO
+
+# EXTRACT_PRIV_VIRTUAL タグが YES に設定されている場合、クラスの文書化されたプライベート仮想メソッドがドキュメントに含まれます。
+# デフォルト値は NO です。
+
+EXTRACT_PRIV_VIRTUAL   = NO
+
+# EXTRACT_PACKAGE タグが YES に設定されている場合、パッケージまたは内部スコープを持つすべてのメンバーがドキュメントに含まれます。
+# デフォルト値は NO です。
+
+EXTRACT_PACKAGE        = NO
+
+# EXTRACT_STATIC タグが YES に設定されている場合、ファイルのすべての静的メンバーがドキュメントに含まれます。
+# デフォルト値は NO です。
+
+EXTRACT_STATIC         = NO
+
+# EXTRACT_LOCAL_CLASSES タグが YES
+# に設定されている場合、ソースファイル内でローカルに定義されたクラス(および構造体)がドキュメントに含まれます。 NO
+# に設定されている場合、ヘッダーファイルで定義されたクラスのみが含まれます。Javaソースでは効果がありません。
+# デフォルト値は YES です。
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# このフラグはObjective-Cコードにのみ役立ちます。 YES
+# に設定されている場合、インターフェースではなく実装セクションで定義されたローカルメソッドがドキュメントに含まれます。 NO
+# に設定されている場合、インターフェースのメソッドのみが含まれます。
+# デフォルト値は NO です。
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# このフラグが YES に設定されている場合、匿名名前空間のメンバーが抽出され、ドキュメント内で'anonymous_namespace{file}'という名
+# 前の名前空間として表示されます。ここでfileは匿名名前空間を含むファイルのベース名に置き換えられます。デフォルトでは匿名名前空間は非表示です。
+# デフォルト値は NO です。
+
+EXTRACT_ANON_NSPACES   = NO
+
+# このフラグが YES
+# に設定されている場合、宣言内の無名パラメータの名前は対応する定義から決定されます。デフォルトでは、無名パラメータは出力でも無名のままです。
+# デフォルト値は YES です。
+
+RESOLVE_UNNAMED_PARAMS = YES
+
+# HIDE_UNDOC_MEMBERS タグが YES
+# に設定されている場合、Doxygenは文書化されたクラスまたはファイル内の未文書化メンバーをすべて非表示にします。 NO に設定されている場合、これらのメン
+# バーは各種概要には含まれますが、ドキュメントセクションは生成されません。EXTRACT_ALLが有効な場合、このオプションは効果がありません。
+# デフォルト値は NO です。
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# HIDE_UNDOC_CLASSES タグが YES
+# に設定されている場合、Doxygenはクラス階層で通常表示される未文書化のクラスをすべて非表示にします。 NO に設定されている場合、これらのクラスは各種概
+# 要に含まれます。このオプションを有効にすると、未文書化のC++コンセプトも非表示になります。EXTRACT_ALLが有効な場合、このオプションは効果がありま
+# せん。
+# デフォルト値は NO です。
+
+HIDE_UNDOC_CLASSES     = NO
+
+# HIDE_UNDOC_NAMESPACES タグが YES
+# に設定されている場合、Doxygenは名前空間階層で通常表示される未文書化の名前空間をすべて非表示にします。 NO
+# に設定されている場合、これらの名前空間は各種概要に含まれます。EXTRACT_ALLが有効な場合、このオプションは効果がありません。
+# デフォルト値は YES です。
+
+HIDE_UNDOC_NAMESPACES  = YES
+
+# HIDE_FRIEND_COMPOUNDS タグが YES に設定されている場合、Doxygenはすべてのfriend宣言を非表示にします。 NO
+# に設定されている場合、これらの宣言はドキュメントに含まれます。
+# デフォルト値は NO です。
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# HIDE_IN_BODY_DOCS タグが YES
+# に設定されている場合、Doxygenは関数本体内で見つかったドキュメントブロックをすべて非表示にします。 NO
+# に設定されている場合、これらのブロックは関数の詳細ドキュメントブロックに追加されます。
+# デフォルト値は NO です。
+
+HIDE_IN_BODY_DOCS      = NO
+
+# INTERNAL_DOCS タグは、\internalコマンドの後に記述されたドキュメントを含めるかどうかを決定します。タグが NO
+# に設定されている場合、そのドキュメントは除外されます。内部ドキュメントを含めるには YES に設定してください。
+# デフォルト値は NO です。
+
+INTERNAL_DOCS          = NO
+
+# CASE_SENSE_NAMES オプションを正しく設定することで、Doxygenは基盤となるファイルシステムの機能に適切に対応できるようになります。ファ
+# イルシステムが大文字と小文字を区別する場合(同じディレクトリ内で大文字小文字のみが異なる名前のファイルをサポートする場合)、入力にそのようなファイルが含まれ
+# る場合はオプションを YES に設定して適切に処理する必要があります。大文字と小文字を区別しないファイルシステムの場合は、オプションを NO
+# に設定して、大文字小文字のみが異なるシンボル(例: CLASS と Class という2つのクラス)の出力ファイルを適切に処理し、また正確な大文字小文字を指
+# 定せずにファイルを参照できるようにする必要があります。Windows(Cygwinを含む)およびmacOSでは、通常このオプションを NO
+# に設定し、Linuxやその他のUnix系では、通常 YES に設定してください。
+# 可能な値は:SYSTEM, NOとYES.
+# デフォルト値は SYSTEM です。
+
+CASE_SENSE_NAMES       = SYSTEM
+
+# HIDE_SCOPE_NAMES タグが NO
+# に設定されている場合、Doxygenはドキュメント内でメンバーを完全なクラスおよび名前空間スコープ付きで表示します。 YES
+# に設定されている場合、スコープは非表示になります。
+# デフォルト値は NO です。
+
+HIDE_SCOPE_NAMES       = NO
+
+# HIDE_COMPOUND_REFERENCE タグが NO
+# (デフォルト)に設定されている場合、Doxygenはページのタイトルに「クラスリファレンス」などの追加テキストを付加します。 YES
+# に設定されている場合、複合型リファレンスは非表示になります。
+# デフォルト値は NO です。
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# SHOW_HEADERFILE タグが YES
+# に設定されている場合、クラスのドキュメントには、クラスを使用するためにインクルードする必要があるファイルが表示されます。
+# デフォルト値は YES です。
+
+SHOW_HEADERFILE        = YES
+
+# SHOW_INCLUDE_FILES タグが YES
+# に設定されている場合、Doxygenはファイルのドキュメントに、そのファイルがインクルードしているファイルのリストを含めます。
+# デフォルト値は YES です。
+
+SHOW_INCLUDE_FILES     = YES
+
+# SHOW_GROUPED_MEMB_INC タグが YES に設定されている場合、Doxygenはグループ化された各メンバーのドキュメントにインクルード文
+# を追加し、そのメンバーを使用するためにどのファイルをインクルードすべきかを読者に示します。
+# デフォルト値は NO です。
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# FORCE_LOCAL_INCLUDES タグが YES
+# に設定されている場合、Doxygenはドキュメント内のインクルードファイルを山括弧ではなく二重引用符でリストします。
+# デフォルト値は NO です。
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# INLINE_INFO タグが YES に設定されている場合、インラインメンバーのドキュメントに[inline]タグが挿入されます。
+# デフォルト値は YES です。
+
+INLINE_INFO            = YES
+
+# SORT_MEMBER_DOCS タグが YES
+# に設定されている場合、Doxygenはファイルおよびクラスメンバーの(詳細な)ドキュメントをメンバー名でアルファベット順にソートします。 NO
+# に設定されている場合、メンバーは宣言順に表示されます。
+# デフォルト値は YES です。
+
+SORT_MEMBER_DOCS       = YES
+
+# SORT_BRIEF_DOCS タグが YES
+# に設定されている場合、Doxygenはファイル、名前空間、およびクラスメンバーの概要説明をメンバー名でアルファベット順にソートします。 NO
+# に設定されている場合、メンバーは宣言順に表示されます。なお、これはクラスリスト内のクラスの順序にも影響します。
+# デフォルト値は NO です。
+
+SORT_BRIEF_DOCS        = NO
+
+# SORT_MEMBERS_CTORS_ 1STタグが YES
+# に設定されている場合、Doxygenはクラスメンバーの(概要および詳細)ドキュメントをソートし、コンストラクタとデストラクタを最初に表示します。 NO
+# に設定されている場合、コンストラクタはSORT_BRIEF_DOCSおよびSORT_MEMBER_DOCSで定義された順序で表示されます。
+# 注: SORT_BRIEF_DOCSが NO に設定されている場合、概要メンバードキュメントのソートではこのオプションは無視されます。
+# 注: SORT_MEMBER_DOCSが NO に設定されている場合、詳細メンバードキュメントのソートではこのオプションは無視されます。
+# デフォルト値は NO です。
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# SORT_GROUP_NAMES タグが YES に設定されている場合、Doxygenはグループ名の階層をアルファベット順にソートします。 NO
+# に設定されている場合、グループ名は定義された順序で表示されます。
+# デフォルト値は NO です。
+
+SORT_GROUP_NAMES       = NO
+
+# SORT_BY_SCOPE_NAME タグが YES に設定されている場合、クラスリストは名前空間を含む完全修飾名でソートされます。 NO
+# に設定されている場合、クラスリストは名前空間部分を除いたクラス名のみでソートされます。
+# 注: このオプションは、HIDE_SCOPE_NAMESが YES に設定されている場合はあまり有用ではありません。
+# 注: このオプションはクラスリストにのみ適用され、アルファベット順リストには適用されません。
+# デフォルト値は NO です。
+
+SORT_BY_SCOPE_NAME     = NO
+
+# STRICT_PROTO_MATCHING オプションが有効で、Doxygenが関数のすべてのパラメータの型解決に失敗した場合、候補が1つしかない場合や、
+# 単純な文字列一致で選択すべき候補が明らかな場合でも、メンバー関数のプロトタイプと実装の一致を拒否します。 STRICT_PROTO_MATCHING
+# を無効にすると、そのような場合でもプロトタイプと実装の一致を受け入れます。
+# デフォルト値は NO です。
+
+STRICT_PROTO_MATCHING  = NO
+
+# GENERATE_TODOLIST タグを使用して、todoリストを有効( YES )または無効( NO
+# )にできます。このリストは、ドキュメントに\todoコマンドを配置することで作成されます。
+# デフォルト値は YES です。
+
+GENERATE_TODOLIST      = YES
+
+# GENERATE_TESTLIST タグを使用して、テストリストを有効( YES )または無効( NO
+# )にできます。このリストは、ドキュメントに\testコマンドを配置することで作成されます。
+# デフォルト値は YES です。
+
+GENERATE_TESTLIST      = YES
+
+# GENERATE_BUGLIST タグを使用して、バグリストを有効( YES )または無効( NO
+# )にできます。このリストは、ドキュメントに\bugコマンドを配置することで作成されます。
+# デフォルト値は YES です。
+
+GENERATE_BUGLIST       = YES
+
+# GENERATE_DEPRECATEDLIST タグを使用して、非推奨リストを有効( YES )または無効( NO
+# )にできます。このリストは、ドキュメントに\deprecatedコマンドを配置することで作成されます。
+# デフォルト値は YES です。
+
+GENERATE_DEPRECATEDLIST= YES
+
+# GENERATE_REQUIREMENTS タグを使用して、要件ページを有効( YES )または無効( NO
+# )にできます。有効な場合、このページは、\requirementコマンドを含む少なくとも1つのコメントブロックが入力に現れると自動的に作成されます。
+# デフォルト値は YES です。
+
+GENERATE_REQUIREMENTS  = YES
+
+# REQ_TRACEABILITY_INFO
+# タグは、要件ページにトレーサビリティ情報を表示するかどうかを制御します(\requirementコメントブロック使用時のみ関連)。 NO
+# に設定すると、トレーサビリティ情報は完全に無効になります。 UNSATISFIED_ONLY
+# に設定すると、満足関係が欠けている要件のリストを表示します(\satisfiesコマンド経由)。同様に、 UNVERIFIED_ONLY
+# に設定すると、検証関係が欠けている要件のリストを表示します(\verifiesコマンド経由)。 YES
+# (デフォルト)に設定すると、該当する場合は両方のリストを表示します。
+# 可能な値は:YES, NO, UNSATISFIED_ONLYとUNVERIFIED_ONLY.
+# デフォルト値は YES です。
+# このタグはタグ GENERATE_REQUIREMENTS を YES に設定する必要があります。
+
+REQ_TRACEABILITY_INFO  = YES
+
+# ENABLED_SECTIONS タグを使用して、\if <section_label> ... \endifおよび\cond
+# <section_label> ... \endcondブロックでマークされた条件付きドキュメントセクションを有効にできます。
+
+ENABLED_SECTIONS       =
+
+# MAX_INITIALIZER_LINES タグは、変数またはマクロ/定義の初期値がドキュメントに表示される最大行数を指定します。初期化子がここで指定した
+# 行数を超える場合は非表示になります。初期化子を完全に非表示にするには0を指定します。個々の変数やマクロ/定義の値の表示は、この設定に関係なく、ドキュメント内
+# で\showinitializerまたは\hideinitializerコマンドを使用して制御できます。
+# 最小値: 0, 最大値: 10000, デフォルト値: 30。
+
+MAX_INITIALIZER_LINES  = 30
+
+# SHOW_USED_FILES タグを NO に設定すると、クラスと構造体のドキュメントの下部に生成されるファイルのリストが無効になります。 YES
+# に設定されている場合、リストはドキュメントの生成に使用されたファイルを示します。
+# デフォルト値は YES です。
+
+SHOW_USED_FILES        = YES
+
+# SHOW_FILES タグを NO に設定すると、ファイルページの生成が無効になります。これにより、クイックインデックスとフォルダツリービュー(指定されて
+# いる場合)からファイルエントリが削除されます。
+# デフォルト値は YES です。
+
+SHOW_FILES             = YES
+
+# SHOW_NAMESPACES タグを NO に設定すると、名前空間ページの生成が無効になります。これにより、クイックインデックスとフォルダツリービュー(
+# 指定されている場合)から名前空間エントリが削除されます。
+# デフォルト値は YES です。
+
+SHOW_NAMESPACES        = YES
+
+# FILE_VERSION_FILTER タグを使用して、各ファイルの現在のバージョンを取得するためにDoxygenが呼び出すプログラムまたはスクリプトを指
+# 定できます(通常はバージョン管理システムから取得)。Doxygenはpopen()経由でcommand
+# input_fileコマンドを実行してプログラムを呼び出します。ここで command は FILE_VERSION_FILTER タグの値、
+# input_file はDoxygenが提供する入力ファイル名です。プログラムが標準出力に書き込んだ内容がファイルバージョンとして使用されます。例については
+# ドキュメントを参照してください。
+
+FILE_VERSION_FILTER    =
+
+# LAYOUT_FILE タグを使用して、Doxygenが解析するレイアウトファイルを指定できます。レイアウトファイルは、出力形式に依存しない方法で生成され
+# る出力ファイルのグローバル構造を制御します。Doxygenのデフォルトを表すレイアウトファイルを作成するには、-
+# lオプションを指定してDoxygenを実行します。オプションの後にファイル名を指定できます。省略した場合、 DoxygenLayout
+# .xmlがレイアウトファイル名として使用されます。詳細についてはセクション"Changing the layout of pages" を参照してください。
+#
+# なお、 DoxygenLayout .xmlというファイルを含むディレクトリからDoxygenを実行すると、 LAYOUT_FILE
+# タグが空白でも、Doxygenはそれを自動的に解析します。
+
+LAYOUT_FILE            =
+
+# CITE_BIB_FILES タグを使用して、参照定義を含む1つ以上の bib ファイルを指定できます。これは
+# .bibファイルのリストである必要があります。 .bib拡張子は省略された場合自動的に追加されます。これには bibtex ツールがインストールされている必
+# 要があります。詳細については、https://en.wikipedia.org/wiki/BibTeXも参照してください。LaTeXの場合、参考文献のスタイ
+# ルはLATEX_BIB_STYLEを使用して制御できます。この機能を使用するには、検索パスで bibtex と perl
+# が利用可能である必要があります。参照の作成方法については、\citeも参照してください。
+
+CITE_BIB_FILES         =
+
+# EXTERNAL_TOOL_PATH タグを使用して、 latex や gs
+# などの外部ツールを見つけられるように検索パス(PATH環境変数)を拡張できます。
+# 注: EXTERNAL_TOOL_PATHで指定したディレクトリは、PATH変数で既に指定されているパスの前に、指定した順序で追加されます。
+# 注: このオプションは、DoxywizardからDoxygenを実行する場合のmacOSバージョン14(Sonoma)以降で特に便利です。この場合、PATH
+# へのユーザー定義の変更は無視されるためです。macOSでの典型的な例は、
+# EXTERNAL_TOOL_PATH = /Library/TeX/texbin /usr/local/bin
+# のように設定することで、標準パスと合わせて、外部ツール起動時にDoxygenが使用する完全な検索パスは
+# PATH=/Library/TeX/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
+# となります。
+
+EXTERNAL_TOOL_PATH     =
+
+#---------------------------------------------------------------------------
+# 警告および進行メッセージに関連する設定オプション
+#---------------------------------------------------------------------------
+
+# QUIET タグを使用して、Doxygenが標準出力に生成するメッセージのオン/オフを切り替えることができます。 QUIET が YES
+# に設定されている場合、メッセージは抑制されます。
+# デフォルト値は NO です。
+
+QUIET                  = NO
+
+# WARNINGS タグを使用して、Doxygenによって標準エラー( stderr )に生成される警告メッセージのオン/オフを切り替えることができます。
+# WARNINGS が YES に設定されている場合、警告が有効になります。
+#
+# ヒント:ドキュメントの作成中は警告を有効にしてください。
+# デフォルト値は YES です。
+
+WARNINGS               = YES
+
+# WARN_IF_UNDOCUMENTED タグが YES
+# に設定されている場合、Doxygenは未文書化のメンバーに対して警告を生成します。EXTRACT_ALLが YES
+# に設定されている場合、このフラグは自動的に無効になります。
+# デフォルト値は YES です。
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# WARN_IF_DOC_ERROR タグが YES に設定されている場合、Doxygenはドキュメント内の潜在的なエラー(文書化された関数で一部のパラメー
+# タを2回文書化する、存在しないパラメータを文書化する、マークアップコマンドを誤って使用するなど)に対して警告を生成します。
+# デフォルト値は YES です。
+
+WARN_IF_DOC_ERROR      = YES
+
+# WARN_IF_INCOMPLETE_DOC が YES に設定されている場合、Doxygenは不完全な関数パラメータドキュメントについて警告します。
+# NO に設定されている場合、Doxygenは一部のパラメータにドキュメントがないことを警告なしで受け入れます。
+# デフォルト値は YES です。
+
+WARN_IF_INCOMPLETE_DOC = YES
+
+# この WARN_NO_PARAMDOC
+# オプションを有効にすると、文書化されているがパラメータまたは戻り値のドキュメントがない関数に対する警告を取得できます。 NO
+# に設定されている場合、Doxygenはパラメータドキュメントの誤りについてのみ警告し、ドキュメントの欠落については警告しません。EXTRACT_ALLが
+# YES に設定されている場合、このフラグは自動的に無効になります。WARN_IF_INCOMPLETE_DOCも参照してください。
+# デフォルト値は NO です。
+
+WARN_NO_PARAMDOC       = NO
+
+# WARN_IF_UNDOC_ENUM_VAL オプションが YES に設定されている場合、Doxygenは未文書化の列挙値について警告します。 NO
+# に設定されている場合、Doxygenは未文書化の列挙値を受け入れます。EXTRACT_ALLが YES
+# に設定されている場合、このフラグは自動的に無効になります。
+# デフォルト値は NO です。
+
+WARN_IF_UNDOC_ENUM_VAL = NO
+
+# WARN_LAYOUT_FILE オプションが YES に設定されている場合、Doxygenはユーザー定義のレイアウトファイルの解析中に見つかった問題(欠
+# 落または誤った要素など)について警告します。詳細については、LAYOUT_FILEも参照してください。 NO
+# に設定されている場合、レイアウトファイルの問題は抑制されます。
+# デフォルト値は YES です。
+
+WARN_LAYOUT_FILE       = YES
+
+# WARN_AS_ERROR タグが YES に設定されている場合、Doxygenは警告が発生するとすぐに停止します。 WARN_AS_ERROR タグが
+# FAIL_ON_WARNINGS に設定されている場合、Doxygenは WARN_AS_ERROR タグが NO
+# に設定されているかのように実行を継続しますが、Doxygenプロセスの終了時に、Doxygenは非ゼロのステータスで戻ります。 WARN_AS_ERROR
+# タグが FAIL_ON_WARNINGS_PRINT に設定されている場合、Doxygenは FAIL_ON_WARNINGS のように動作しますが、WAR
+# N_LOGFILEが定義されていない場合、Doxygenは警告メッセージを他のメッセージの間に書き込まず、実行の終了時に書き込みます。WARN_LOGFIL
+# Eが定義されている場合、警告メッセージは定義されたファイルにあることに加えて、実行の終了時にも表示されます。ただし、WARN_LOGFILEが-
+# (つまり標準出力stdout)として定義されている場合を除き、その場合の動作は FAIL_ON_WARNINGS の設定と同じままです。
+# 可能な値は:NO, YES, FAIL_ON_WARNINGSとFAIL_ON_WARNINGS_PRINT.
+# デフォルト値は NO です。
+
+WARN_AS_ERROR          = NO
+
+# WARN_FORMAT タグは、Doxygenが生成できる警告メッセージの形式を決定します。文字列には、警告が発生したファイルと行番号、および警告テキスト
+# に置き換えられる$file、$line、および$textタグが含まれている必要があります。オプションで、形式には$versionを含めることができます。これ
+# は、(FILE_VERSION_FILTERを介して取得できた場合)ファイルのバージョンに置き換えられます。
+# 参照: WARN_LINE_FORMAT
+# デフォルト値は $file:$line: $text です。
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# WARN_FORMATコマンドの$text部分で、より具体的な場所への参照が指定されることがあります。この場所に(Doxygen外部から)ジャンプしやすくす
+# るために、ユーザーはカスタムの「カット」/「ペースト」文字列を定義できます。例:
+# WARN_LINE_FORMAT = "'vi $file +$line'"
+# 参照: WARN_FORMAT
+# デフォルト値は at line $line of file $file です。
+
+WARN_LINE_FORMAT       = "at line $line of file $file"
+
+# WARN_LOGFILE タグを使用して、警告およびエラーメッセージの出力先ファイルを指定できます。空白のままにすると、出力は標準エラー(stderr)に
+# 書き込まれます。指定されたファイルを書き込み用に開けない場合、警告およびエラーメッセージは標準エラーに書き込まれます。ファイルとして-
+# が指定されている場合、警告およびエラーメッセージは標準出力(stdout)に書き込まれます。
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# 入力ファイルに関連する設定オプション
+#---------------------------------------------------------------------------
+
+# INPUT タグは、文書化されたソースファイルを含むファイルおよび/またはディレクトリを指定するために使用されます。 myfile.cpp
+# のようなファイル名や /usr/src/myproject のようなディレクトリを入力できます。ファイルまたはディレクトリをスペースで区切ってください。FI
+# LE_PATTERNSおよびEXTENSION_MAPPINGも参照してください。
+# 注: このタグが空の場合、現在のディレクトリが検索されます。
+
+INPUT                  = C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel
+
+# このタグを使用して、Doxygenが解析するソースファイルの文字エンコーディングを指定できます。内部的には、DoxygenはUTF-
+# 8エンコーディングを使用します。Doxygenはトランスコーディングにlibiconv(またはlibcに組み込まれたiconv)を使用します。可能なエンコー
+# ディングのリストについては、libiconvのドキュメント (see:
+# https://www.gnu.org/software/libiconv/)を参照してください。
+# 参照: INPUT_FILE_ENCODING
+# デフォルト値は UTF-8 です。
+
+INPUT_ENCODING         = UTF-8
+
+# このタグを使用して、Doxygenが解析するソースファイルの文字エンコーディングを指定できます。 INPUT_FILE_ENCODING タグを使用して、フ
+# ァイルパターンごとに文字エンコーディングを指定できます。Doxygenはファイル名を各パターンと比較し、一致がある場合、デフォルトのINPUT_ENCODI
+# NGの代わりにエンコーディングを適用します。文字エンコーディングは、pattern=encodingの形式のリストです(*.php=ISO-8859-
+# 1のように)。
+# 参照: サポートされているエンコーディングの詳細については、INPUT_ENCODINGを参照してください。
+
+INPUT_FILE_ENCODING    =
+
+# INPUTタグの値にディレクトリが含まれている場合、 FILE_PATTERNS
+# タグを使用して、ディレクトリ内のソースファイルをフィルタリングする1つ以上のワイルドカードパターン(*.cppや*.hのように)を指定できます。
+#
+# カスタム拡張子または直接サポートされていない拡張子の場合、拡張子のEXTENSION_MAPPINGも設定する必要があります。そうしないと、ファイルはDox
+# ygenによって読み取られません。
+#
+# デフォルトでチェックされるファイルパターンのリストは、デフォルトのファイル拡張子マッピングのリストと異なる場合があることに注意してください。
+#
+# 空白のままにすると、次のパターンがテストされます:*.c, *.cc, *.cxx, *.cxxm, *.cpp, *.cppm, *.ccm,
+# *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl,
+# *.h, *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5,
+# *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as Doxygen
+# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,
+# *.vhdl, *.ucf, *.qsfと*.ice.
+
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cxxm \
+                         *.cpp \
+                         *.cppm \
+                         *.ccm \
+                         *.c++ \
+                         *.c++m \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.idl \
+                         *.ddl \
+                         *.odl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.l \
+                         *.cs \
+                         *.d \
+                         *.php \
+                         *.php4 \
+                         *.php5 \
+                         *.phtml \
+                         *.inc \
+                         *.m \
+                         *.markdown \
+                         *.md \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.pyw \
+                         *.f90 \
+                         *.f95 \
+                         *.f03 \
+                         *.f08 \
+                         *.f18 \
+                         *.f \
+                         *.for \
+                         *.vhd \
+                         *.vhdl \
+                         *.ucf \
+                         *.qsf \
+                         *.ice
+
+# RECURSIVE タグを使用して、入力ファイルのサブディレクトリも検索するかどうかを指定できます。
+# デフォルト値は NO です。
+
+RECURSIVE              = YES
+
+# EXCLUDE タグを使用して、INPUTソースファイルから除外するファイルおよび/またはディレクトリを指定できます。これにより、INPUTタグでルートが
+# 指定されたディレクトリツリーからサブディレクトリを簡単に除外できます。
+#
+# 相対パスは、Doxygenが実行されるディレクトリからの相対パスであることに注意してください。
+
+EXCLUDE                =
+
+# EXCLUDE_SYMLINKS
+# タグを使用して、シンボリックリンク(Unixファイルシステムの機能)であるファイルまたはディレクトリを入力から除外するかどうかを選択できます。
+# デフォルト値は NO です。
+
+EXCLUDE_SYMLINKS       = NO
+
+# INPUTタグの値にディレクトリが含まれている場合、 EXCLUDE_PATTERNS
+# タグを使用して、それらのディレクトリから特定のファイルを除外する1つ以上のワイルドカードパターンを指定できます。
+#
+# ワイルドカードは絶対パスを持つファイルと一致するため、すべてのテストディレクトリを除外するには、例えばパターン*/test/*を使用します。
+
+EXCLUDE_PATTERNS       =
+
+# EXCLUDE_SYMBOLS タグを使用して、出力から除外する1つ以上のシンボル名(名前空間、クラス、関数など)を指定できます。シンボル名は、完全修飾名
+# 、単語、またはワイルドカード*が使用されている場合は部分文字列です。例:ANamespace、AClass、ANamespace::AClass、AName
+# space::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# EXAMPLE_PATH
+# タグを使用して、インクルードされるサンプルコードの断片を含む1つ以上のファイルまたはディレクトリを指定できます(\includeコマンドを参照)。
+
+EXAMPLE_PATH           =
+
+# EXAMPLE_PATHタグの値にディレクトリが含まれている場合、 EXAMPLE_PATTERNS タグを使用して、ディレクトリ内のソースファイルをフィル
+# タリングする1つ以上のワイルドカードパターン(*.cppや*.hのように)を指定できます。空白のままにすると、すべてのファイルがインクルードされます。
+
+EXAMPLE_PATTERNS       = *
+
+# EXAMPLE_RECURSIVE タグが YES に設定されている場合、RECURSIVEタグの値に関係なく、\includeまたは\dontinclu
+# deコマンドで使用する入力ファイルのサブディレクトリが検索されます。
+# デフォルト値は NO です。
+
+EXAMPLE_RECURSIVE      = NO
+
+# IMAGE_PATH
+# タグを使用して、ドキュメントに含める画像が格納された1つ以上のファイルまたはディレクトリを指定できます(\imageコマンドを参照)。
+
+IMAGE_PATH             =
+
+# INPUT_FILTER
+# タグを使用して、Doxygenが各入力ファイルをフィルタリングするために呼び出すプログラムを指定できます。Doxygenは、popen()を介してコマンド:
+#
+# <filter> <input-file>
+#
+# を実行することでフィルタプログラムを呼び出します。ここで、<filter>は INPUT_FILTER タグの値、<input-file>は入力ファイルの名
+# 前です。Doxygenは、フィルタプログラムが標準出力に書き込む出力を使用します。FILTER_PATTERNSが指定されている場合、このタグは無視されます
+# 。
+#
+# フィルタは行を追加または削除してはならないことに注意してください。コードがスキャンされる前に適用されますが、出力コードが生成されるときには適用されません。行
+# が追加または削除されると、アンカーが正しく配置されません。
+#
+# Doxygenは、処理されたデータを標準出力に書き込んでさらに処理するために使用するため、デバッグステートメントや使用されたコマンドのような他のもの(Win
+# dowsバッチファイルの場合は常に@echo OFFを使用)は標準出力に書き込まれるべきではないことに注意してください。
+#
+# カスタム拡張子または直接サポートされていない拡張子の場合、拡張子のEXTENSION_MAPPINGも設定する必要があります。そうしないと、ファイルはDox
+# ygenによって正しく処理されません。
+
+INPUT_FILTER           =
+
+# FILTER_PATTERNS タグを使用して、ファイルパターンごとにフィルタを指定できます。Doxygenはファイル名を各パターンと比較し、一致がある場
+# 合にフィルタを適用します。フィルタは、pattern=filterの形式のリストです(*.cpp=my_cpp_filterのように)。フィルタの使用方法に
+# ついては、INPUT_FILTERを参照してください。 FILTER_PATTERNS
+# タグが空の場合、またはパターンのいずれもファイル名と一致しない場合、INPUT_FILTERが適用されます。
+#
+# カスタム拡張子または直接サポートされていない拡張子の場合、拡張子のEXTENSION_MAPPINGも設定する必要があります。そうしないと、ファイルはDox
+# ygenによって正しく処理されません。
+
+FILTER_PATTERNS        =
+
+# FILTER_SOURCE_FILES タグが YES に設定されている場合、入力フィルタ(INPUT_FILTERを使用して設定されている場合)は、ブラ
+# ウズするソースファイルを生成するために使用される入力ファイルもフィルタリングするために使用されます(つまり、SOURCE_BROWSERが YES
+# に設定されている場合)。
+# デフォルト値は NO です。
+
+FILTER_SOURCE_FILES    = NO
+
+# FILTER_SOURCE_PATTERNS タグを使用して、ファイルパターンごとにソースフィルタを指定できます。パターンはFILTER_PATTERNの
+# 設定を上書きし(ある場合)、*.ext=を使用して特定のパターンのソースフィルタリングを無効にすることもできます(フィルタに名前を付けずに)。
+# このタグはタグ FILTER_SOURCE_FILES を YES に設定する必要があります。
+
+FILTER_SOURCE_PATTERNS =
+
+# USE_MDFILE_AS_MAINPAGE タグが入力の一部であるマークダウンファイルの名前を参照している場合、その内容はメインページ(index.ht
+# ml)に配置されます。これは、例えばGitHubにプロジェクトがあり、紹介ページもDoxygen出力に再利用したい場合に便利です。
+
+USE_MDFILE_AS_MAINPAGE =
+
+# IMPLICIT_DIR_DOCS タグが YES に設定されている場合、プロジェクトのルートのサブディレクトリで見つかったREADME.mdファイルは、
+# README.mdが\dir、\page、または\mainpageコマンドで始まらない限り、そのサブディレクトリのドキュメントとして使用されます。 NO
+# に設定されている場合、ディレクトリドキュメントとして使用されるためには、README.mdファイルは明示的な\dirコマンドで始まる必要があります。
+# デフォルト値は YES です。
+
+IMPLICIT_DIR_DOCS      = YES
+
+# Fortran標準では、固定形式のFortranコードでは、位置72以降のすべての文字がコメントと見なされることが規定されています。一般的な拡張機能は、自動
+# コメントが始まる前により長い行を許可することです。 FORTRAN_COMMENT_AFTER
+# の設定により、自動コメントが始まる前により長い行を処理できるようになります。
+# 最小値: 7, 最大値: 10000, デフォルト値: 72。
+
+FORTRAN_COMMENT_AFTER  = 72
+
+#---------------------------------------------------------------------------
+# ソースブラウジングに関連する設定オプション
+#---------------------------------------------------------------------------
+
+# SOURCE_BROWSER タグが YES
+# に設定されている場合、ソースファイルのリストが生成されます。文書化されたエンティティはこれらのソースと相互参照されます。
+#
+# 注意:生成された出力からすべてのソースコードを取り除くには、VERBATIM_HEADERSも NO に設定されていることを確認してください。
+# デフォルト値は NO です。
+
+SOURCE_BROWSER         = NO
+
+# INLINE_SOURCES タグを YES
+# に設定すると、関数、複数行マクロ、列挙型、またはリスト初期化変数の本体がドキュメントに直接インクルードされます。
+# デフォルト値は NO です。
+
+INLINE_SOURCES         = NO
+
+# STRIP_CODE_COMMENTS タグを YES に設定すると、Doxygenは生成されたソースコード断片から特殊コマンドを含むコメントブロックを非
+# 表示にします。通常のC、C++、Fortranコメントは常に表示されたままです。
+# デフォルト値は YES です。
+
+STRIP_CODE_COMMENTS    = YES
+
+# REFERENCED_BY_RELATION タグが YES
+# に設定されている場合、文書化された各エンティティについて、それを参照する文書化されたすべての関数がリストされます。
+# デフォルト値は NO です。
+
+REFERENCED_BY_RELATION = NO
+
+# REFERENCES_RELATION タグが YES
+# に設定されている場合、文書化された各関数について、その関数によって呼び出し/使用される文書化されたすべてのエンティティがリストされます。
+# デフォルト値は NO です。
+
+REFERENCES_RELATION    = NO
+
+# REFERENCES_LINK_SOURCE タグが YES に設定され、SOURCE_BROWSERタグが YES に設定されている場合、REFEREN
+# CES_RELATIONおよびREFERENCED_BY_RELATIONリストの関数からのハイパーリンクはソースコードにリンクします。それ以外の場合は、ド
+# キュメントにリンクします。
+# デフォルト値は YES です。
+
+REFERENCES_LINK_SOURCE = YES
+
+# SOURCE_TOOLTIPS が有効な場合(デフォルト)、ソースコード内のハイパーリンクにカーソルを合わせると、プロトタイプ、概要説明、定義およびドキュ
+# メントへのリンクなどの追加情報を含むツールチップが表示されます。これによりHTMLファイルが大きくなり、大きなファイルの読み込みが少し遅くなるため、この機能
+# を無効にすることもできます。
+# デフォルト値は YES です。
+# このタグはタグ SOURCE_BROWSER を YES に設定する必要があります。
+
+SOURCE_TOOLTIPS        = YES
+
+# USE_HTAGS タグが YES に設定されている場合、ソースコードへの参照は、Doxygenの組み込みソースブラウザではなく、 htags
+# (1)ツールによって生成されたHTMLを指します。 htags ツールは、GNUのグローバルソースタグ付けシステムの一部です(https://www.gnu
+# .org/software/global/global.htmlを参照)。バージョン4.8.6以上が必要です。
+#
+# 使用するには、次の手順を実行します:
+# - global の最新バージョンをインストールする
+# - 設定ファイルでSOURCE_BROWSERと USE_HTAGS を有効にする
+# - INPUTがソースツリーのルートを指していることを確認する
+# - 通常通り doxygen を実行する
+#
+# Doxygenは htags を呼び出し(それがさらに gtags
+# を呼び出します)、これらのツールはコマンドライン(つまり検索パス内)から利用可能である必要があります。
+#
+# 結果:Doxygenによって生成されたソースブラウザの代わりに、ソースコードへのリンクは htags の出力を指すようになります。
+# デフォルト値は NO です。
+# このタグはタグ SOURCE_BROWSER を YES に設定する必要があります。
+
+USE_HTAGS              = NO
+
+# VERBATIM_HEADERS タグが YES
+# に設定されている場合、Doxygenはインクルードが指定されている各クラスのヘッダーファイルをそのままコピーして出力します。これを無効にするには NO
+# に設定します。
+# 参照: セクション\class。
+# デフォルト値は YES です。
+
+VERBATIM_HEADERS       = YES
+
+# CLANG_ASSISTED_PARSING タグが YES に設定されている場合、Doxygenはclangパーサー (see:
+# http://clang.llvm.org/)を使用して、パフォーマンスは低下しますがより正確な解析を行います。これは、Doxygenの組み込みパーサーが必
+# 要な型情報を欠いているテンプレートを多用したC++コードで特に役立ちます。
+# 注: このオプションの可用性は、DoxygenがCMakeの-Duse_libclang=ONオプションでビルドされたかどうかに依存します。
+# デフォルト値は NO です。
+
+CLANG_ASSISTED_PARSING = NO
+
+# CLANG_ASSISTED_PARSING タグが YES に設定され、 CLANG_ADD_INC_PATHS タグが YES
+# に設定されている場合、Doxygenは各入力のディレクトリをインクルードパスに追加します。
+# デフォルト値は YES です。
+# このタグはタグ CLANG_ASSISTED_PARSING を YES に設定する必要があります。
+
+CLANG_ADD_INC_PATHS    = YES
+
+# clangアシスト解析が有効な場合、コンパイラを呼び出すときに通常使用するコマンドラインオプションをコンパイラに提供できます。インクルードパスは、INPUT
+# およびINCLUDE_PATHで指定されたファイルおよびディレクトリに対してDoxygenによってすでに設定されていることに注意してください。
+# このタグはタグ CLANG_ASSISTED_PARSING を YES に設定する必要があります。
+
+CLANG_OPTIONS          =
+
+# clangアシスト解析が有効な場合、compile_commands.jsonというファイルを含むディレクトリへのパスをclangパーサーに提供できます。こ
+# のファイルは、ソースファイルのビルド時に使用されたオプションを含むコンパイルデータベース (see:
+# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html)です。これは、clang-
+# checkのようなclangツールに-
+# pオプションを指定することと同等です。これらのオプションはパーサーに渡されます。CLANG_OPTIONSで指定されたオプションも追加されます。
+# 注: このオプションの可用性は、DoxygenがCMakeの-Duse_libclang=ONオプションでビルドされたかどうかに依存します。
+
+CLANG_DATABASE_PATH    =
+
+#---------------------------------------------------------------------------
+# アルファベット順クラスインデックスに関連する設定オプション
+#---------------------------------------------------------------------------
+
+# ALPHABETICAL_INDEX タグが YES に設定されている場合、すべての複合型のアルファベット順インデックスが生成されます。プロジェクトに多数
+# のクラス、構造体、共用体、またはインターフェースが含まれている場合は、これを有効にしてください。
+# デフォルト値は YES です。
+
+ALPHABETICAL_INDEX     = YES
+
+# IGNORE_PREFIX タグを使用して、インデックスヘッダーの生成時に無視されるプレフィックス(またはプレフィックスのリスト)を指定できます。
+# IGNORE_PREFIX タグは、クラス、関数、およびメンバー名に対して機能します。エンティティは、プレフィックスを削除した後に残る名前の最初の文字でアル
+# ファベット順リストに配置されます。
+# このタグはタグ ALPHABETICAL_INDEX を YES に設定する必要があります。
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# HTML出力に関連する設定オプション
+#---------------------------------------------------------------------------
+
+# GENERATE_HTML タグが YES に設定されている場合、DoxygenはHTML出力を生成します。
+# デフォルト値は YES です。
+
+GENERATE_HTML          = YES
+
+# HTML_OUTPUT
+# タグは、HTMLドキュメントの出力先を指定するために使用されます。相対パスを入力した場合、OUTPUT_DIRECTORYの値がその前に付加されます。
+# デフォルトのディレクトリは html です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_OUTPUT            = html
+
+# HTML_FILE_EXTENSION タグを使用して、生成される各HTMLページのファイル拡張子を指定できます(例: .htm, .php,
+# .asp)。
+# デフォルト値は .html です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_FILE_EXTENSION    = .html
+
+# HTML_HEADER タグを使用して、生成される各HTMLページのユーザー定義HTMLヘッダーファイルを指定できます。タグが空白のままの場合、Doxyg
+# enは標準ヘッダーを生成します。
+#
+# 有効なHTMLを取得するには、ヘッダーファイルにDoxygenが必要とするすべてのスクリプトとスタイルシートを含める必要があります。これは使用される設定オプ
+# ションに依存します(例:GENERATE_TREEVIEWの設定)。次を使用してデフォルトのヘッダーから始めることを強くお勧めします:
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# 次にファイル new_header.html を変更します。Doxygenが通常使用するデフォルトヘッダーの生成方法については、セクション"Doxygen
+# usage" も参照してください。
+# 注: ヘッダーは変更される可能性があるため、通常はDoxygenの新しいバージョンにアップグレードする際にデフォルトヘッダーを再生成する必要があります。使用
+# 可能なマーカー名とブロック名の説明については、ドキュメントを参照してください。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_HEADER            =
+
+# HTML_FOOTER タグを使用して、生成される各HTMLページのユーザー定義HTMLフッターを指定できます。タグが空白のままの場合、Doxygenは標
+# 準フッターを生成します。デフォルトのフッターの生成方法とフッター内で使用できる特別なコマンドの詳細については、HTML_HEADERを参照してください。Do
+# xygenが通常使用するデフォルトフッターの生成方法については、セクション"Doxygen usage" も参照してください。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_FOOTER            =
+
+# HTML_STYLESHEET タグを使用して、各HTMLページで使用されるユーザー定義のカスケーディングスタイルシートを指定できます。HTML出力の外観
+# を微調整するために使用できます。空白のままにすると、Doxygenはデフォルトのスタイルシートを生成します。Doxygenが通常使用するスタイルシートの生成
+# 方法については、セクション"Doxygen usage" も参照してください。
+# 注: より堅牢であるため、このタグの代わりにHTML_EXTRA_STYLESHEETを使用することをお勧めします。このタグ(HTML_STYLESHEET
+# )は将来廃止される予定です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_STYLESHEET        =
+
+# HTML_EXTRA_STYLESHEET タグを使用して、Doxygenによって作成された標準スタイルシートの後にインクルードされる追加のユーザー定義カ
+# スケーディングスタイルシートを指定できます。このオプションを使用すると、特定のスタイルの側面をオーバーライドできます。これは、標準スタイルシートを置き換えな
+# いため、将来の更新に対してより堅牢なHTML_STYLESHEETを使用するよりも推奨されます。Doxygenはスタイルシートファイルを出力ディレクトリにコ
+# ピーします。
+# 注: 追加のスタイルシートファイルの順序は重要です(例:リストの最後のスタイルシートは、リスト内の前のものの設定をオーバーライドします)。
+# 注: スクロールバーのスタイル設定は現在Webkit/Chromiumでオーバーライドできないため、1つ以上の追加スタイルシートが指定されている場合、スタイ
+# ル設定はデフォルトのdoxygen.cssから除外されます。したがって、スクロールバーのカスタマイズが必要な場合は、明示的に追加する必要があります。例につい
+# てはドキュメントを参照してください。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_EXTRA_STYLESHEET  =
+
+# HTML_EXTRA_FILES タグを使用して、HTML出力ディレクトリにコピーする1つ以上の追加画像またはその他のソースファイルを指定できます。これら
+# のファイルはベースHTML出力ディレクトリにコピーされることに注意してください。HTML_HEADERおよび/またはHTML_FOOTERファイルで$rel
+# path^マーカーを使用してこれらのファイルを読み込みます。HTML_STYLESHEETファイルでは、ファイル名のみを使用します。また、ファイルはそのまま
+# コピーされることにも注意してください。コマンドやマーカーは処理されません。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_EXTRA_FILES       =
+
+# HTML_COLORSTYLE タグを使用して、生成されたHTML出力をダークテーマまたはライトテーマでレンダリングするかどうかを指定できます。
+# 可能な値は:LIGHT 常にライトモード出力を生成, DARK 常にダークモード出力を生成, AUTO_LIGHT
+# ユーザー設定に従ってモードを自動設定、設定がない場合はライトモードを使用(デフォルト), AUTO_DARK
+# ユーザー設定に従ってモードを自動設定、設定がない場合はダークモードを使用とTOGGLE ボタンでライトモードとダークモードを切り替え可能.
+# デフォルト値は AUTO_LIGHT です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_COLORSTYLE        = AUTO_LIGHT
+
+# HTML_COLORSTYLE_HUE タグはHTML出力の色相を制御します。Doxygenはこの色に基づいてスタイルシートと背景画像の色を調整します。色
+# 相はカラーホイール上の角度として指定されます。詳細については、https://en.wikipedia.org/wiki/Hueを参照してください。例えば、
+# 値0は赤、60は黄、120は緑、180はシアン、240は青、300は紫、360は再び赤を表します。
+# 最小値: 0, 最大値: 359, デフォルト値: 220。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_COLORSTYLE_HUE    = 220
+
+# HTML_COLORSTYLE_SAT
+# タグはHTML出力の色の純度(または彩度)を制御します。値が0の場合、出力はグレースケールのみを使用します。値が255の場合、最も鮮やかな色が生成されます。
+# 最小値: 0, 最大値: 255, デフォルト値: 100。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_COLORSTYLE_SAT    = 100
+
+# HTML_COLORSTYLE_GAMMA タグはHTML出力の色の輝度成分に適用されるガンマ補正を制御します。100未満の値は出力を徐々に明るくし、10
+# 0を超える値は出力を暗くします。値を100で割ったものが実際に適用されるガンマです。したがって、80はガンマ0.8を表し、値220はガンマ2.2を表し、10
+# 0はガンマを変更しません。
+# 最小値: 40, 最大値: 240, デフォルト値: 80。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# HTML_DYNAMIC_MENUS タグが YES に設定されている場合、生成されたHTMLドキュメントには、JavaScriptで動的に作成される垂直
+# ナビゲーションメニューを備えたメインインデックスが含まれます。無効にすると、ナビゲーションインデックスは各HTMLページに静的に埋め込まれた複数レベルのタブ
+# で構成されます。QtヘルプブラウザのようにJavaScriptをサポートしないブラウザに対応するには、このオプションを無効にします。
+# デフォルト値は YES です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_DYNAMIC_MENUS     = YES
+
+# HTML_DYNAMIC_SECTIONS タグが YES
+# に設定されている場合、生成されたHTMLドキュメントには、ページが読み込まれた後に非表示および表示できるセクションが含まれます。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# HTML_CODE_FOLDING タグが YES
+# に設定されている場合、クラスと関数は生成されたHTMLソースコードで動的に折りたたみおよび展開できます。
+# デフォルト値は YES です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_CODE_FOLDING      = YES
+
+# HTML_COPY_CLIPBOARD タグが YES に設定されている場合、Doxygenはコードおよびテキスト断片の右上隅にアイコンを表示し、ユーザー
+# がその内容をクリップボードにコピーできるようにします。なお、これはブラウザでサポートされており、かつWebページが安全なコンテキスト (see:
+# https://www.w3.org/TR/secure-
+# contexts/)(https:またはfile:プロトコル)で提供されている場合にのみ機能します。
+# デフォルト値は YES です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_COPY_CLIPBOARD    = YES
+
+# Doxygenはブラウザにいくつかの設定を永続的に保存します(例:Cookieを使用)。デフォルトでは、これらの設定はすべてのプロジェクトでDoxygenが
+# 生成したすべてのHTMLページに適用されます。 HTML_PROJECT_COOKIE
+# タグを使用すると、設定をプロジェクト固有のキーで保存し、ユーザー設定が個別に保存されるようにできます。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_PROJECT_COOKIE    =
+
+# HTML_INDEX_NUM_ENTRIES を使用すると、各種ツリー構造インデックスに最初に表示されるエントリーの推奨数を制御できます。ユーザーは後で動
+# 的にエントリーを展開および折りたたむことができます。Doxygenは、指定された数以下のエントリーが表示されるレベルまでツリーを展開します(完全に折りたたま
+# れたツリーがすでにこの量を超えている場合を除く)。そのため、エントリー数を1に設定すると、デフォルトで完全に折りたたまれたツリーが生成されます。0は無限のエ
+# ントリー数を表す特別な値で、デフォルトで完全に展開されたツリーになります。
+# 最小値: 0, 最大値: 9999, デフォルト値: 100。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# GENERATE_DOCSET タグが YES に設定されている場合、OSX 10.5(Leopard)で導入されたAppleのXcode 3統合開発環境
+# (see:
+# https://developer.apple.com/xcode/)の入力として使用できる追加のインデックスファイルが生成されます。ドキュメントセットを作
+# 成するために、DoxygenはHTML出力ディレクトリにMakefileを生成します。 make
+# を実行すると、そのディレクトリにdocsetが生成され、make installを実行すると、docsetが~/Library/Developer/Shar
+# ed/Documentation/DocSetsにインストールされ、Xcodeが起動時にそれを見つけられるようになります。詳細については、https://d
+# eveloper.apple.com/library/archive/featuredarticles/DoxygenXcode/_index.htmlを参
+# 照してください。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+GENERATE_DOCSET        = NO
+
+# このタグはdocsetフィードの名前を決定します。ドキュメントフィードは、単一のプロバイダー(企業や製品スイートなど)からの複数のドキュメントセットをグルー
+# プ化するための上位分類を提供します。
+# デフォルト値は Doxygen generated docs です。
+# このタグはタグ GENERATE_DOCSET を YES に設定する必要があります。
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# このタグはdocsetフィードのURLを決定します。ドキュメントフィードは、単一のプロバイダー(企業や製品スイートなど)からの複数のドキュメントセットをグル
+# ープ化するための上位分類を提供します。
+# このタグはタグ GENERATE_DOCSET を YES に設定する必要があります。
+
+DOCSET_FEEDURL         =
+
+# このタグは、ドキュメントセットバンドルを一意に識別する文字列を指定します。これは逆ドメイン名スタイルの文字列である必要があります。例:com.mycompa
+# ny.MyDocSet。Doxygenは名前に .docsetを追加します。
+# デフォルト値は org.doxygen.Project です。
+# このタグはタグ GENERATE_DOCSET を YES に設定する必要があります。
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# DOCSET_PUBLISHER_ID タグは、ドキュメントパブリッシャーを一意に識別する文字列を指定します。これは逆ドメイン名スタイルの文字列である必要
+# があります。例:com.mycompany.MyDocSet.documentation。
+# デフォルト値は org.doxygen.Publisher です。
+# このタグはタグ GENERATE_DOCSET を YES に設定する必要があります。
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# DOCSET_PUBLISHER_NAME タグはドキュメントパブリッシャーを識別します。
+# デフォルト値は Publisher です。
+# このタグはタグ GENERATE_DOCSET を YES に設定する必要があります。
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# GENERATE_HTMLHELP タグが YES に設定されている場合、Doxygenは3つの追加HTMLインデックスファイルを生成します:
+# index.hhp 、 index.hhc 、および index.hhk 。 index.hhp は、Windows上のMicrosoftのHTMLヘルプワ
+# ークショップで読み取ることができるプロジェクトファイルです。2021年初頭、Microsoftは元のページをオフラインにしました(HTMLヘルプワークショッ
+# プはすでに何年もメンテナンスモードでした)。WebアーカイブからHTMLヘルプワークショップをダウンロードできます:インストール実行可能ファイル (see:
+# http://web.archive.org/web/20160201063255/https://download.microsoft.com/downl
+# oad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe)。
+#
+# HTMLヘルプワークショップには、Doxygenによって生成されたすべてのHTML出力を単一のコンパイル済みHTMLファイル(
+# .chm)に変換できるコンパイラが含まれています。コンパイル済みHTMLファイルは現在Windows
+# 98ヘルプ形式として使用されており、将来すべてのWindowsプラットフォームで古いWindowsヘルプ形式( .hlp)に取って代わります。圧縮HTMLフ
+# ァイルにはインデックスと目次も含まれており、ドキュメント内の単語を検索できます。HTMLワークショップには、圧縮HTMLファイルのビューアも含まれています。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+GENERATE_HTMLHELP      = NO
+
+# CHM_FILE タグを使用して、結果の
+# .chmファイルのファイル名を指定できます。結果をHTML出力ディレクトリに書き込まない場合は、ファイルの前にパスを追加できます。
+# このタグはタグ GENERATE_HTMLHELP を YES に設定する必要があります。
+
+CHM_FILE               =
+
+# HHC_LOCATION タグを使用して、HTMLヘルプコンパイラ( hhc.exe
+# )の場所(ファイル名を含む絶対パス)を指定できます。空でない場合、Doxygenは生成された index.hhp
+# でHTMLヘルプコンパイラを実行しようとします。
+# ファイルは完全パスで指定する必要があります。
+# このタグはタグ GENERATE_HTMLHELP を YES に設定する必要があります。
+
+HHC_LOCATION           =
+
+# GENERATE_CHI フラグは、別の .chiインデックスファイルが生成されるか( YES )、メインの .chmファイルに含まれるか( NO
+# )を制御します。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_HTMLHELP を YES に設定する必要があります。
+
+GENERATE_CHI           = NO
+
+# CHM_INDEX_ENCODING は、HtmlHelpインデックス( hhk )、コンテンツ( hhc
+# )、およびプロジェクトファイルのコンテンツをエンコードするために使用されます。
+# このタグはタグ GENERATE_HTMLHELP を YES に設定する必要があります。
+
+CHM_INDEX_ENCODING     =
+
+# BINARY_TOC フラグは、 .chmファイルでバイナリ目次を生成するか( YES )、通常の目次を生成するか( NO
+# )を制御します。さらに、「前へ」および「次へ」ボタンを有効にします。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_HTMLHELP を YES に設定する必要があります。
+
+BINARY_TOC             = NO
+
+# TOC_EXPAND フラグを YES に設定すると、HTMLヘルプドキュメントの目次およびツリービューにグループメンバーの追加項目が追加されます。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_HTMLHELP を YES に設定する必要があります。
+
+TOC_EXPAND             = NO
+
+# SITEMAP_URL タグは、ドキュメントのデプロイ時にユーザーが生成されたドキュメントをサーバー上のどこに配置するかを示す完全なURLを指定するために
+# 使用されます。生成されるサイトマップはsitemap.xmlという名前で、HTML_OUTPUTで指定されたディレクトリに配置されます。
+# SITEMAP_URL が指定されていない場合、サイトマップは生成されません。サイトマッププロトコルの詳細については、https://www.sitemap
+# s.orgを参照してください。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+SITEMAP_URL            =
+
+# GENERATE_QHP タグが YES
+# に設定され、QHP_NAMESPACEとQHP_VIRTUAL_FOLDERの両方が設定されている場合、生成されたHTMLドキュメントのQt圧縮ヘルプ(
+# .qch)を生成するためにQtのqhelpgeneratorの入力として使用できる追加のインデックスファイルが生成されます。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+GENERATE_QHP           = NO
+
+# QHG_LOCATIONタグが指定されている場合、 QCH_FILE タグを使用して結果の
+# .qchファイルのファイル名を指定できます。指定されたパスはHTML出力フォルダーからの相対パスです。
+# このタグはタグ GENERATE_QHP を YES に設定する必要があります。
+
+QCH_FILE               =
+
+# QHP_NAMESPACE
+# タグは、Qtヘルププロジェクト出力を生成するときに使用する名前空間を指定します。詳細については、Qtヘルププロジェクト/名前空間 (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace)を参照してください。
+# デフォルト値は org.doxygen.Project です。
+# このタグはタグ GENERATE_QHP を YES に設定する必要があります。
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# QHP_VIRTUAL_FOLDER
+# タグは、Qtヘルププロジェクト出力を生成するときに使用する仮想フォルダーを指定します。詳細については、Qtヘルププロジェクト/仮想フォルダー (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-
+# folders)を参照してください。
+# デフォルト値は doc です。
+# このタグはタグ GENERATE_QHP を YES に設定する必要があります。
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# QHP_CUST_FILTER_NAME
+# タグが設定されている場合、追加するカスタムフィルターの名前を指定します。詳細については、Qtヘルププロジェクト/カスタムフィルター (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters)を参照してください。
+# このタグはタグ GENERATE_QHP を YES に設定する必要があります。
+
+QHP_CUST_FILTER_NAME   =
+
+# QHP_CUST_FILTER_ATTRS
+# タグは、追加するカスタムフィルターの属性のリストを指定します。詳細については、Qtヘルププロジェクト/カスタムフィルター (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters)を参照してください。
+# このタグはタグ GENERATE_QHP を YES に設定する必要があります。
+
+QHP_CUST_FILTER_ATTRS  =
+
+# QHP_SECT_FILTER_ATTRS
+# タグは、このプロジェクトのフィルターセクションが一致する属性のリストを指定します。Qtヘルププロジェクト/フィルター属性 (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes)。
+# このタグはタグ GENERATE_QHP を YES に設定する必要があります。
+
+QHP_SECT_FILTER_ATTRS  =
+
+# QHG_LOCATION
+# タグを使用して、Qtのqhelpgeneratorの場所(ファイル名を含む絶対パス)を指定できます。空でない場合、Doxygenは生成された
+# .qhpファイルでqhelpgeneratorを実行しようとします。
+# このタグはタグ GENERATE_QHP を YES に設定する必要があります。
+
+QHG_LOCATION           =
+
+# GENERATE_ECLIPSEHELP タグが YES に設定されている場合、HTMLファイルと共に追加のインデックスファイルが生成され、それらはEcl
+# ipseヘルププラグインを形成します。このプラグインをインストールし、Eclipseのヘルプコンテンツメニューの下で使用できるようにするには、HTMLおよび
+# XMLファイルを含むディレクトリの内容をeclipseのプラグインディレクトリにコピーする必要があります。プラグインディレクトリ内のディレクトリの名前は、E
+# CLIPSE_DOC_ID値と同じである必要があります。コピー後、ヘルプが表示される前にEclipseを再起動する必要があります。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+GENERATE_ECLIPSEHELP   = NO
+
+# Eclipseヘルププラグインの一意の識別子です。プラグインをインストールする際、HTMLおよびXMLファイルを含むディレクトリ名もこの名前にする必要があり
+# ます。各ドキュメントセットには独自の識別子が必要です。
+# デフォルト値は org.doxygen.Project です。
+# このタグはタグ GENERATE_ECLIPSEHELP を YES に設定する必要があります。
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# 生成されたHTMLページのレイアウトを完全に制御したい場合は、インデックスを無効にして独自のものに置き換える必要がある場合があります。
+# DISABLE_INDEX タグを使用して、各HTMLページの上部にある圧縮インデックス(タブ)をオン/オフできます。 NO の値はインデックスを有効にし、
+# YES の値は無効にします。インデックスのタブにはナビゲーションツリーと同じ情報が含まれているため、GENERATE_TREEVIEWも YES
+# に設定している場合は、このオプションを YES に設定できます。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+DISABLE_INDEX          = NO
+
+# GENERATE_TREEVIEW タグは、階層情報を表示するためのツリー状インデックス構造を生成するかどうかを指定するために使用されます。タグ値が
+# YES に設定されている場合、ツリー状インデックス構造を含むサイドパネルが生成されます(HTMLヘルプ用に生成されるものと同様)。これが機能するには、Jav
+# aScript、DHTML、CSS、フレームをサポートするブラウザが必要です(つまり、最新のブラウザ)。WindowsユーザーはHTMLヘルプ機能を使用した
+# 方が良いでしょう。カスタムスタイルシート(HTML_EXTRA_STYLESHEETを参照)を使用すると、インデックスの外観をさらに微調整できます("Fin
+# e-tuning the output" を参照)。例として、Doxygenが生成するデフォルトのスタイルシートには、PROJECT_NAMEの代わりにツリ
+# ーのルートに画像を配置する方法を示す例があります。ツリーは基本的にタブインデックスよりも詳細な情報を持っているため、このオプションを有効にする際にDISAB
+# LE_INDEXを YES に設定することを検討できます。
+# デフォルト値は YES です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+GENERATE_TREEVIEW      = YES
+
+# GENERATE_TREEVIEWが YES に設定されている場合、 PAGE_OUTLINE_PANEL オプションは画面の右側に追加のナビゲーションパネ
+# ルを表示するかどうかを決定し、メインページの目次を表示します(例:https://developer.android.com/referenceと同様)。G
+# ENERATE_TREEVIEWが NO に設定されている場合、このオプションは効果がありません。
+# デフォルト値は YES です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+PAGE_OUTLINE_PANEL     = YES
+
+# GENERATE_TREEVIEWが YES に設定されている場合、 FULL_SIDEBAR
+# オプションは、サイドバーがツリービューエリアのみに制限されるか(値 NO )、ウィンドウの全高に拡張されるか(値 YES )を決定します。これを YES に
+# 設定すると、例えばhttps://docs.readthedocs.ioに似たレイアウトになり、コンテンツのためのスペースが増えますが、プロジェクトロゴ、タ
+# イトル、説明のためのスペースが減ります。GENERATE_TREEVIEWが NO に設定されている場合、このオプションは効果がありません。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+FULL_SIDEBAR           = NO
+
+# ENUM_VALUES_PER_LINE タグを使用して、生成されたHTMLドキュメントでDoxygenが1行にグループ化する列挙値の数を設定できます。
+#
+# 値が0の場合、概要セクションから列挙値が完全に抑制されることに注意してください。
+# 最小値: 0, 最大値: 20, デフォルト値: 4。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+ENUM_VALUES_PER_LINE   = 4
+
+# SHOW_ENUM_VALUES タグが設定されている場合、Doxygenは列挙ニーモニックの横に列挙値を表示します。
+# デフォルト値は NO です。
+
+SHOW_ENUM_VALUES       = NO
+
+# ツリービューが有効になっている場合(GENERATE_TREEVIEWを参照)、このタグを使用して、ツリーが表示されるフレームの初期幅(ピクセル単位)を設定
+# できます。
+# 最小値: 0, 最大値: 1500, デフォルト値: 250。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+TREEVIEW_WIDTH         = 250
+
+# EXT_LINKS_IN_WINDOW オプションが YES
+# に設定されている場合、Doxygenはタグファイルを介してインポートされた外部シンボルへのリンクを別のウィンドウで開きます。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# OBFUSCATE_EMAILS タグが YES に設定されている場合、Doxygenはメールアドレスを難読化します。
+# デフォルト値は YES です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+OBFUSCATE_EMAILS       = YES
+
+# HTML_FORMULA_FORMAT オプションが svg に設定されている場合、Doxygenはpdf2svgツール(https://github.c
+# om/dawbarton/pdf2svgを参照)またはinkscape(https://inkscape.orgを参照)を使用して、HTML出力でPNGの代
+# わりに数式をSVG画像として生成します。これらの画像は、拡大表示時により美しく見えます。
+# 可能な値は:png (デフォルト)とsvg (より美しく表示されますが、pdf2svgまたはinkscapeツールが必要).
+# デフォルト値は png です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+HTML_FORMULA_FORMAT    = png
+
+# このタグを使用して、HTMLドキュメントに画像として埋め込まれるLaTeX数式のフォントサイズを変更します。Doxygenの実行が成功した後にフォントサイズ
+# を変更する場合は、再生成を強制するためにHTML出力ディレクトリからすべてのform_*.png画像を手動で削除する必要があります。
+# 最小値: 8, 最大値: 50, デフォルト値: 10。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+FORMULA_FONTSIZE       = 10
+
+# FORMULA_MACROFILE には、数式の構成要素として使用する新しいLaTeXコマンドを作成するためのLaTeX
+# \newcommandおよび\renewcommandコマンドを記述できます。詳細については、セクション"Including formulas"
+# を参照してください。
+
+FORMULA_MACROFILE      =
+
+# USE_MATHJAX オプションを有効にすると、事前レンダリングされたビットマップの代わりに、クライアント側JavaScriptでレンダリングを行うMa
+# thJax(https://www.mathjax.orgを参照)を使用してLaTeX数式をレンダリングします。LaTeXがインストールされていない場合、ま
+# たはHTML出力で数式をより美しく表示したい場合に使用します。有効にした場合、MathJaxを別途インストールし、MATHJAX_RELPATHオプションで
+# パスを設定する必要がある場合もあります。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+USE_MATHJAX            = NO
+
+# MATHJAX_VERSION を使用すると、使用するMathJaxのバージョンを指定できます。なお、MathJaxのバージョンによって設定要件が異なるた
+# め、バージョンを切り替える際には他のMathJax設定も変更が必要になる場合があります。
+# 可能な値は:MathJax_2, MathJax_3とMathJax_4.
+# デフォルト値は MathJax_2 です。
+# このタグはタグ USE_MATHJAX を YES に設定する必要があります。
+
+MATHJAX_VERSION        = MathJax_2
+
+# MathJaxが有効になっている場合、MathJax出力に使用されるデフォルトの出力形式を設定できます。出力形式の詳細については、MathJaxバージョン2
+# (see:
+# https://docs.mathjax.org/en/v2.7/output.html)、MathJaxバージョン3 (see:
+# https://docs.mathjax.org/en/v3.2/output/index.html)、およびMathJaxバージョン4 (see:
+# https://docs.mathjax.org/en/v4.0/output/index.htm)を参照してください。
+# 可能な値は:HTML-CSS (より遅いですが、最高の互換性があります。これはMathJaxバージョン2の名称で、MathJaxバージョン3では chtml
+# に変換されます), NativeMML (MathML。MathJax 2のみサポート。MathJaxバージョン3では chtml
+# が代わりに使用されます。), chtml (これはMathJaxバージョン3の名称で、MathJaxバージョン2ではHTML-
+# CSSに変換されます)とSVG.
+# デフォルト値は HTML-CSS です。
+# このタグはタグ USE_MATHJAX を YES に設定する必要があります。
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# MathJaxが有効な場合、 MATHJAX_RELPATH オプションを使用してHTML出力ディレクトリからの
+# 相対パスを指定する必要があります。MathJaxバージョン2の場合、宛先ディレクトリには
+# MathJax.jsスクリプトが含まれている必要があります。例えば、 mathjax ディレクトリが HTML出力ディレクトリと同じレベルにある場合、
+# MATHJAX_RELPATH は../mathjax である必要があります。MathJaxバージョン3および4の場合、宛先ディレクトリには
+# tex-<format>.jsスクリプト(<format>はchtmlまたはsvg)が含まれている必要があります。
+# デフォルト値はMathJaxコンテンツ配信ネットワークを指しているため、MathJaxをインストール
+# せずに結果をすぐに確認できます。ただし、デプロイ前にhttps://www.mathjax.orgから
+# MathJaxのローカルコピーをインストールすることを強くお勧めします。 デフォルト値は:
+# - MathJaxバージョン2の場合: https://cdn.jsdelivr.net/npm/mathjax@2
+# - MathJaxバージョン3の場合: https://cdn.jsdelivr.net/npm/mathjax@3
+# - MathJaxバージョン4の場合: https://cdn.jsdelivr.net/npm/mathjax@4
+# このタグはタグ USE_MATHJAX を YES に設定する必要があります。
+
+MATHJAX_RELPATH        =
+
+# MATHJAX_EXTENSIONS タグを使用して、MathJaxレンダリング中に有効にする1つ以上のMathJax拡張機能名を指定できます。例:Mat
+# hJaxバージョン2(https://docs.mathjax.org/en/v2.7/tex.htmlを参照):
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# 例:MathJaxバージョン3(https://docs.mathjax.org/en/v3.2/input/tex/extensions/を参照):
+# MATHJAX_EXTENSIONS = ams
+# 例:MathJaxバージョン4(https://docs.mathjax.org/en/v4.0/input/tex/extensions/を参照):
+# MATHJAX_EXTENSIONS = units
+# Mathjaxバージョン4では、かなり多くの拡張機能がすでに自動的にロードされていることに注意してください。Mathjaxバージョン4でパッケージを無効に
+# するには、マイナス記号を前に付けたパッケージ名を使用できます(-、例:MATHJAX_EXTENSIONS += -textmacros)
+# このタグはタグ USE_MATHJAX を YES に設定する必要があります。
+
+MATHJAX_EXTENSIONS     =
+
+# MATHJAX_CODEFILE タグを使用して、MathJaxコードの起動時に使用されるJavaScriptコードを含むファイルを指定できます。詳細につ
+# いては、MathJaxサイトを参照してください
+# - MathJaxバージョン2 (see:
+# https://docs.mathjax.org/en/v2.7/)
+# - MathJaxバージョン3 (see:
+# https://docs.mathjax.org/en/v3.2/)
+# - MathJaxバージョン4 (see:
+# https://docs.mathjax.org/en/v4.0/)例についてはドキュメントを参照してください。
+# このタグはタグ USE_MATHJAX を YES に設定する必要があります。
+
+MATHJAX_CODEFILE       =
+
+# SEARCHENGINE タグが有効な場合、DoxygenはHTML出力の検索ボックスを生成します。基礎となる検索エンジンはJavaScriptとDHTM
+# Lを使用し、最新のブラウザで動作するはずです。HTMLヘルプ(GENERATE_HTMLHELP)、Qtヘルプ(GENERATE_QHP)、またはdocse
+# ts(GENERATE_DOCSET)を使用している場合、検索機能はすでに存在するため、これは通常無効にする必要があることに注意してください。大規模なプロジ
+# ェクトでは、JavaScriptベースの検索エンジンは遅くなる可能性があるため、SERVER_BASED_SEARCHを有効にすると、より良いソリューション
+# が提供される場合があります。キーボードを使用して検索できます。検索ボックスにジャンプするには、<アクセスキー> + Sを使用します(<アクセスキー>が何であ
+# るかはOSとブラウザに依存しますが、通常は<CTRL>、<ALT>/<option>、またはその両方です)。検索ボックス内で、<下カーソルキー>を使用して検
+# 索結果ウィンドウにジャンプし、<カーソルキー>を使用して結果をナビゲートできます。<Enter>を押して項目を選択するか、<Esc>を押して検索をキャンセル
+# します。カーソルが検索ボックス内にあるときに<Shift>+<下カーソル>を押すと、フィルターオプションを選択できます。ここでも、<カーソルキー>を使用して
+# フィルターを選択し、<Enter>または<Esc>を押してフィルターオプションをアクティブまたはキャンセルします。
+# デフォルト値は YES です。
+# このタグはタグ GENERATE_HTML を YES に設定する必要があります。
+
+SEARCHENGINE           = YES
+
+# SERVER_BASED_SEARCH タグが有効な場合、検索エンジンはJavaScriptを使用するWebクライアントではなくWebサーバーを使用して実
+# 装されます。EXTERNAL_SEARCH設定に応じて、Webサーバーベースの検索には2つの種類があります。無効の場合、Doxygenは検索用のPHPスクリ
+# プトとスクリプトが使用するインデックスファイルを生成します。EXTERNAL_SEARCHが有効な場合、インデックス作成と検索は外部ツールで提供する必要があ
+# ります。詳細については、セクション"External Indexing and Searching" を参照してください。
+# デフォルト値は NO です。
+# このタグはタグ SEARCHENGINE を YES に設定する必要があります。
+
+SERVER_BASED_SEARCH    = NO
+
+# EXTERNAL_SEARCH タグが有効な場合、Doxygenは検索用のPHPスクリプトを生成しなくなります。代わりに、検索結果はXMLファイルに書き込
+# まれ、外部インデクサーによって処理される必要があります。Doxygenは、SEARCHENGINE_URLオプションで指定された外部検索エンジンを呼び出して
+# 検索結果を取得します。
+#
+# Doxygenには、オープンソース検索エンジンライブラリXapian (see:
+# https://xapian.org/)に基づいたサンプルインデクサー( doxyindexer
+# )と検索エンジン(doxysearch.cgi)が付属しています。
+#
+# 詳細については、セクション"External Indexing and Searching" を参照してください。
+# デフォルト値は NO です。
+# このタグはタグ SEARCHENGINE を YES に設定する必要があります。
+
+EXTERNAL_SEARCH        = NO
+
+# SEARCHENGINE_URL
+# は、EXTERNAL_SEARCHが有効な場合に検索結果を返す、Webサーバーでホストされている検索エンジンのURLを指定します。
+#
+# Doxygenには、オープンソース検索エンジンライブラリXapian (see:
+# https://xapian.org/)に基づいたサンプルインデクサー( doxyindexer
+# )と検索エンジン(doxysearch.cgi)が付属しています。詳細については、セクション"External Indexing and
+# Searching" を参照してください。
+# このタグはタグ SEARCHENGINE を YES に設定する必要があります。
+
+SEARCHENGINE_URL       =
+
+# SERVER_BASED_SEARCHとEXTERNAL_SEARCHの両方が有効な場合、未インデックスの検索データが外部ツールでのインデックス作成用にファ
+# イルに書き込まれます。 SEARCHDATA_FILE タグでこのファイルの名前を指定できます。
+# デフォルトのファイルは searchdata.xml です。
+# このタグはタグ SEARCHENGINE を YES に設定する必要があります。
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# SERVER_BASED_SEARCHとEXTERNAL_SEARCHの両方が有効な場合、 EXTERNAL_SEARCH_ID タグをプロジェクトの識別子
+# として使用できます。これはEXTRA_SEARCH_MAPPINGSと組み合わせて、複数のプロジェクトを横断検索し、結果を適切なプロジェクトにリダイレクトす
+# るのに役立ちます。
+# このタグはタグ SEARCHENGINE を YES に設定する必要があります。
+
+EXTERNAL_SEARCH_ID     =
+
+# EXTRA_SEARCH_MAPPINGS タグを使用すると、この設定ファイルで定義されたプロジェクト以外のDoxygenプロジェクトも検索できるようにな
+# ります。ただし、それらはすべて同じ外部検索インデックスに追加されている必要があります。各プロジェクトには、EXTERNAL_SEARCH_IDで設定された一
+# 意のIDが必要です。検索マッピングは、IDをドキュメントが存在する相対パスにマッピングします。形式は:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# このタグはタグ SEARCHENGINE を YES に設定する必要があります。
+
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# LaTeX出力に関連する設定オプション
+#---------------------------------------------------------------------------
+
+# GENERATE_LATEX タグが YES に設定されている場合、DoxygenはLaTeX出力を生成します。
+# デフォルト値は YES です。
+
+GENERATE_LATEX         = YES
+
+# LATEX_OUTPUT タグは、LaTeXドキュメントが配置される場所を指定するために使用されます。相対パスが入力された場合、OUTPUT_DIRECT
+# ORYの値がその前に配置されます。
+# デフォルトのディレクトリは latex です。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+LATEX_OUTPUT           = latex
+
+# LATEX_CMD_NAME タグを使用して、呼び出すLaTeXコマンド名を指定できます。
+#
+# USE_PDFLATEXを有効にしない場合、デフォルトは latex です。USE_PDFLATEXを有効にする場合、デフォルトは pdflatex
+# です。後者の場合、 latex が選択されると、 pdflatex
+# によって上書きされます。特定の出力言語では、デフォルトが異なって設定されている可能性があり、これは出力言語の実装に依存します。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+LATEX_CMD_NAME         =
+
+# MAKEINDEX_CMD_NAME タグを使用して、LaTeXのインデックスを生成するコマンド名を指定できます。
+# 注: このタグはMakefile / make.batで使用されます。
+# 参照: 生成された出力ファイル( .tex)の部分については、LATEX_MAKEINDEX_CMD。
+# デフォルトのファイルは makeindex です。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# LATEX_MAKEINDEX_CMD タグを使用して、LaTeXのインデックスを生成するコマンド名を指定できます。最初の文字としてバックスラッシュ( \
+# )がない場合、LaTeXコードに自動的に追加されます。
+# 注: このタグは生成された出力ファイル( .tex)で使用されます。
+# 参照: Makefile / make.batの部分については、MAKEINDEX_CMD_NAME。
+# デフォルト値は makeindex です。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+LATEX_MAKEINDEX_CMD    = makeindex
+
+# COMPACT_LATEX タグが YES
+# に設定されている場合、DoxygenはよりコンパクトなLaTeXドキュメントを生成します。これは小さなプロジェクトに役立ち、一般的に紙の節約にもなります。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+COMPACT_LATEX          = NO
+
+# PAPER_TYPE タグを使用して、プリンターで使用される用紙タイプを設定できます。
+# 可能な値は:a4 (210 x 297 mm), letter (8.5 x 11 インチ), legal (8.5 x 14 インチ)とexecutive
+# (7.25 x 10.5 インチ).
+# デフォルト値は a4 です。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+PAPER_TYPE             = a4
+
+# EXTRA_PACKAGES
+# タグを使用して、LaTeX出力にインクルードされる1つ以上のLaTeXパッケージ名を指定できます。パッケージは名前のみで指定するか、LaTeX
+# \usepackageコマンドで使用する正しい構文で指定できます。例えばtimesフォントを取得するには、次のように指定できます:
+# EXTRA_PACKAGES=times または EXTRA_PACKAGES={times}
+# amsmathパッケージでintlimitsオプションを使用するには、次のように指定できます:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# 空白のままにすると、追加のパッケージはインクルードされません。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+EXTRA_PACKAGES         =
+
+# LATEX_HEADER タグを使用して、生成されたLaTeXドキュメントのユーザー定義LaTeXヘッダーを指定できます。ヘッダーは最初の章までのすべてを
+# 含む必要があります。空白のままにすると、Doxygenは標準ヘッダーを生成します。次を使用してデフォルトのヘッダーから始めることを強くお勧めします:
+# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty
+# 次にファイル new_header .texを変更します。Doxygenが通常使用するデフォルトヘッダーの生成方法については、セクション"Doxygen
+# usage" も参照してください。
+#
+# 注意:自分が何をしているかを理解している場合にのみ、ユーザー定義ヘッダーを使用してください!
+# 注: ヘッダーは変更される可能性があるため、通常はDoxygenの新しいバージョンにアップグレードする際にデフォルトヘッダーを再生成する必要があります。使用
+# 可能なマーカー名とブロック名の説明については、ドキュメントを参照してください。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+LATEX_HEADER           =
+
+# LATEX_FOOTER タグを使用して、生成されたLaTeXドキュメントのユーザー定義LaTeXフッターを指定できます。フッターは最後の章以降のすべてを
+# 含む必要があります。空白のままにすると、Doxygenは標準フッターを生成します。デフォルトのフッターの生成方法とフッター内で使用できる特別なコマンドの詳細
+# については、LATEX_HEADERを参照してください。Doxygenが通常使用するデフォルトフッターの生成方法については、セクション"Doxygen
+# usage" も参照してください。注意:自分が何をしているかを理解している場合にのみ、ユーザー定義フッターを使用してください!
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+LATEX_FOOTER           =
+
+# LATEX_EXTRA_STYLESHEET タグを使用して、Doxygenによって作成された標準スタイルシートの後にインクルードされる追加のユーザー定義
+# LaTeXスタイルシートを指定できます。このオプションを使用すると、特定のスタイルの側面をオーバーライドできます。Doxygenはスタイルシートファイルを出
+# 力ディレクトリにコピーします。
+# 注: 追加のスタイルシートファイルの順序は重要です(例:リストの最後のスタイルシートは、リスト内の前のものの設定をオーバーライドします)。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+LATEX_EXTRA_STYLESHEET =
+
+# LATEX_EXTRA_FILES タグを使用して、LATEX_OUTPUT出力ディレクトリにコピーされる1つ以上の追加画像または他のソースファイルを指定
+# できます。ファイルはそのままコピーされることに注意してください。利用可能なコマンドやマーカーはありません。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+LATEX_EXTRA_FILES      =
+
+# PDF_HYPERLINKS タグが YES に設定されている場合、生成されたLaTeXはPDFへの変換( ps 2pdfまたは pdflatex を使用
+# )のために準備されます。PDFファイルには、ページ参照の代わりにリンク(HTML出力と同様)が含まれます。これにより、PDFビューアを使用したオンラインブラ
+# ウジングに適した出力になります。
+# デフォルト値は YES です。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+PDF_HYPERLINKS         = YES
+
+# USE_PDFLATEX タグが YES に設定されている場合、DoxygenはLATEX_CMD_NAMEで指定されたエンジンを使用して、LaTeXファ
+# イルから直接PDFファイルを生成します。より高品質のPDFドキュメントを取得するには、このオプションを YES に設定します。
+#
+# エンジンの選択については、セクションLATEX_CMD_NAMEも参照してください。
+# デフォルト値は YES です。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+USE_PDFLATEX           = YES
+
+# LATEX_BATCHMODE タグは、エラーが発生した場合のLaTeXの動作を制御します。
+# 可能な値は:NO ERROR_STOPと同じ, YES BATCHと同じ, BATCH バッチモードでは端末に何も印刷されず、エラーは各エラーで<retur
+# n>が押されたかのようにスクロールされます。TeXが入力またはキーボード入力から要求しようとする欠落ファイル(開かれていない入力ストリームでの\read)は
+# 、ジョブを中止させます, NON_STOP 非停止モードでは診断メッセージが端末に表示されますが、バッチモードと同様にユーザーとの対話はできません,
+# SCROLL スクロールモードでは、TeXは入力するファイルが見つからない場合またはキーボード入力が必要な場合にのみ停止しますとERROR_STOP
+# エラー停止モードでは、TeXは各エラーで停止し、ユーザーの介入を求めます.
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+LATEX_BATCHMODE        = NO
+
+# LATEX_HIDE_INDICES タグが YES
+# に設定されている場合、Doxygenは出力にインデックスの章(ファイルインデックス、複合型インデックスなど)を含めません。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+LATEX_HIDE_INDICES     = NO
+
+# LATEX_BIB_STYLE タグを使用して、参考文献に使用するスタイルを指定できます。例: plainnat 、または ieeetr
+# 。詳細については、https://en.wikipedia.org/wiki/BibTeXおよび\citeを参照してください。
+# デフォルト値は plainnat です。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+LATEX_BIB_STYLE        = plainnat
+
+# LATEX_EMOJI_DIRECTORY タグは、絵文字画像が読み込まれる(相対または絶対)パスを指定するために使用されます。相対パスが入力された場合、
+# LATEX_OUTPUTディレクトリからの相対パスになります。空白のままにすると、LATEX_OUTPUTディレクトリが使用されます。
+# このタグはタグ GENERATE_LATEX を YES に設定する必要があります。
+
+LATEX_EMOJI_DIRECTORY  =
+
+#---------------------------------------------------------------------------
+# RTF出力に関連する設定オプション
+#---------------------------------------------------------------------------
+
+# GENERATE_RTF タグが YES に設定されている場合、DoxygenはRTF出力を生成します。RTF出力はWord
+# 97用に最適化されており、他のRTFリーダー/エディタではあまりきれいに見えない場合があります。
+# デフォルト値は NO です。
+
+GENERATE_RTF           = NO
+
+# RTF_OUTPUT タグは、RTFドキュメントが配置される場所を指定するために使用されます。相対パスが入力された場合、OUTPUT_DIRECTORYの
+# 値がその前に配置されます。
+# デフォルトのディレクトリは rtf です。
+# このタグはタグ GENERATE_RTF を YES に設定する必要があります。
+
+RTF_OUTPUT             = rtf
+
+# COMPACT_RTF タグが YES
+# に設定されている場合、DoxygenはよりコンパクトなRTFドキュメントを生成します。これは小さなプロジェクトに役立ち、一般的に紙の節約にもなります。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_RTF を YES に設定する必要があります。
+
+COMPACT_RTF            = NO
+
+# RTF_HYPERLINKS タグが YES に設定されている場合、生成されたRTFにはハイパーリンクフィールドが含まれます。RTFファイルには、ページ参
+# 照の代わりにリンク(HTML出力と同様)が含まれます。これにより、Wordまたはこれらのフィールドをサポートする他のWord互換リーダーを使用したオンライン
+# ブラウジングに適した出力になります。
+#
+# 注意:WordPad(write)およびその他はリンクをサポートしていません。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_RTF を YES に設定する必要があります。
+
+RTF_HYPERLINKS         = NO
+
+# ファイルからスタイルシート定義をロードします。構文はDoxygenの設定ファイルと同様で、一連の代入文です。置き換えたい定義のみを提供すればよく、省略された
+# 定義はデフォルト値に設定されます。
+#
+# Doxygenが通常使用するデフォルトのスタイルシートの生成方法については、セクション"Doxygen usage" も参照してください。
+# このタグはタグ GENERATE_RTF を YES に設定する必要があります。
+
+RTF_STYLESHEET_FILE    =
+
+# RTFドキュメントの生成で使用されるオプションの変数を設定します。構文はDoxygenの設定ファイルと同様です。テンプレート拡張ファイルは、doxygen
+# -e rtf extensionFileを使用して生成できます。
+# このタグはタグ GENERATE_RTF を YES に設定する必要があります。
+
+RTF_EXTENSIONS_FILE    =
+
+# RTF_EXTRA_FILES タグを使用して、RTF_OUTPUT出力ディレクトリにコピーされる1つ以上の追加画像または他のソースファイルを指定できます
+# 。ファイルはそのままコピーされることに注意してください。利用可能なコマンドやマーカーはありません。
+# このタグはタグ GENERATE_RTF を YES に設定する必要があります。
+
+RTF_EXTRA_FILES        =
+
+#---------------------------------------------------------------------------
+# manページ出力に関連する設定オプション
+#---------------------------------------------------------------------------
+
+# GENERATE_MAN タグが YES に設定されている場合、Doxygenはクラスとファイルのマニュアルページを生成します。
+# デフォルト値は NO です。
+
+GENERATE_MAN           = NO
+
+# MAN_OUTPUT
+# タグは、マニュアルページが配置される場所を指定するために使用されます。相対パスが入力された場合、OUTPUT_DIRECTORYの値がその前に配置されます。
+# man 3ディレクトリが MAN_OUTPUT で指定されたディレクトリ内に作成されます。
+# デフォルトのディレクトリは man です。
+# このタグはタグ GENERATE_MAN を YES に設定する必要があります。
+
+MAN_OUTPUT             = man
+
+# MAN_EXTENSION
+# タグは、生成されたマニュアルページに追加される拡張子を決定します。マニュアルセクションが数字で始まらない場合、数字3が先頭に追加されます。
+# MAN_EXTENSION タグの先頭のピリオド(.)はオプションです。
+# デフォルト値は .3 です。
+# このタグはタグ GENERATE_MAN を YES に設定する必要があります。
+
+MAN_EXTENSION          = .3
+
+# MAN_SUBDIR タグは、マニュアルページが配置される MAN_OUTPUT
+# 内に作成されるディレクトリの名前を決定します。デフォルトでは、manの後に MAN_EXTENSION の先頭の.を除いた文字列が続きます。
+# このタグはタグ GENERATE_MAN を YES に設定する必要があります。
+
+MAN_SUBDIR             =
+
+# MAN_LINKS タグが YES に設定され、Doxygenがman出力を生成する場合、実際のマニュアルページ内の文書化された各エンティティに対して追加
+# のmanファイルが生成されます。これらの追加ファイルは実際のマニュアルページを参照するだけですが、これらがないと man
+# コマンドは正しいページを見つけることができません。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_MAN を YES に設定する必要があります。
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# XML出力に関連する設定オプション
+#---------------------------------------------------------------------------
+
+# GENERATE_XML タグが YES
+# に設定されている場合、Doxygenはすべてのドキュメントを含むコードの構造を記録したXMLファイルを生成します。
+# デフォルト値は NO です。
+
+GENERATE_XML           = NO
+
+# XML_OUTPUT
+# タグは、XMLページが配置される場所を指定するために使用されます。相対パスが入力された場合、OUTPUT_DIRECTORYの値がその前に配置されます。
+# デフォルトのディレクトリは xml です。
+# このタグはタグ GENERATE_XML を YES に設定する必要があります。
+
+XML_OUTPUT             = xml
+
+# XML_PROGRAMLISTING タグが YES に設定されている場合、Doxygenはプログラムリスト(構文強調表示と相互参照情報を含む)をXML出
+# 力に出力します。これを有効にするとXML出力のサイズが大幅に増加することに注意してください。
+# デフォルト値は YES です。
+# このタグはタグ GENERATE_XML を YES に設定する必要があります。
+
+XML_PROGRAMLISTING     = YES
+
+# XML_NS_MEMB_FILE_SCOPE タグが YES
+# に設定されている場合、DoxygenはHTML出力と同様に、ファイルスコープ内の名前空間メンバーも含めます。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_XML を YES に設定する必要があります。
+
+XML_NS_MEMB_FILE_SCOPE = NO
+
+#---------------------------------------------------------------------------
+# DOCBOOK出力に関連する設定オプション
+#---------------------------------------------------------------------------
+
+# GENERATE_DOCBOOK タグが YES に設定されている場合、DoxygenはPDFの生成に使用できるDocbookファイルを生成します。
+# デフォルト値は NO です。
+
+GENERATE_DOCBOOK       = NO
+
+# DOCBOOK_OUTPUT タグは、Docbookページが配置される場所を指定するために使用されます。相対パスが入力された場合、OUTPUT_DIREC
+# TORYの値がその前に配置されます。
+# デフォルトのディレクトリは docbook です。
+# このタグはタグ GENERATE_DOCBOOK を YES に設定する必要があります。
+
+DOCBOOK_OUTPUT         = docbook
+
+#---------------------------------------------------------------------------
+# AutoGen Definitions出力のための設定オプション
+#---------------------------------------------------------------------------
+
+# GENERATE_AUTOGEN_DEF タグが YES に設定されている場合、Doxygenはすべてのドキュメントを含むコードの構造を記録したAutoG
+# en定義ファイル(https://autogen.sourceforge.net/を参照)を生成します。なお、この機能はまだ実験的であり、現時点では不完全で
+# す。
+# デフォルト値は NO です。
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Sqlite3出力に関連する設定オプション
+#---------------------------------------------------------------------------
+
+# GENERATE_SQLITE 3タグが YES に設定されている場合、DoxygenはDoxygenによって発見されたシンボルをテーブルに保存した
+# Sqlite 3データベースを生成します。
+# デフォルト値は NO です。
+
+GENERATE_SQLITE3       = NO
+
+# SQLITE 3_OUTPUTタグは、 Sqlite
+# 3データベースが配置される場所を指定するために使用されます。相対パスが入力された場合、OUTPUT_DIRECTORYの値がその前に配置されます。
+# デフォルトのディレクトリは sqlite3 です。
+# このタグはタグ GENERATE_SQLITE3 を YES に設定する必要があります。
+
+SQLITE3_OUTPUT         = sqlite3
+
+# SQLITE 3_RECREATE_DBタグが YES
+# に設定されている場合、既存のdoxygen_sqlite3.dbデータベースファイルはDoxygenを実行するたびに再作成されます。 NO
+# に設定されている場合、Doxygenはデータベースファイルがすでに存在する場合は警告を出し、変更しません。
+# デフォルト値は YES です。
+# このタグはタグ GENERATE_SQLITE3 を YES に設定する必要があります。
+
+SQLITE3_RECREATE_DB    = YES
+
+#---------------------------------------------------------------------------
+# Perlモジュール出力に関連する設定オプション
+#---------------------------------------------------------------------------
+
+# GENERATE_PERLMOD タグが YES
+# に設定されている場合、Doxygenはすべてのドキュメントを含むコードの構造を記録したPerlモジュールファイルを生成します。
+#
+# なお、この機能はまだ実験的であり、現時点では不完全です。
+# デフォルト値は NO です。
+
+GENERATE_PERLMOD       = NO
+
+# PERLMOD_LATEX タグが YES に設定されている場合、Doxygenは必要な Makefile ルール、 Perl
+# スクリプト、およびLaTeXコードを生成し、Perlモジュール出力からPDFおよびDVI出力を生成できるようにします。
+# デフォルト値は NO です。
+# このタグはタグ GENERATE_PERLMOD を YES に設定する必要があります。
+
+PERLMOD_LATEX          = NO
+
+# PERLMOD_PRETTY タグが YES に設定されている場合、Perlモジュール出力は人間が読みやすいようにきれいにフォーマットされます。これは内部
+# の動作を理解したい場合に便利です。一方、このタグが NO
+# に設定されている場合、Perlモジュール出力のサイズははるかに小さくなりますが、Perlは同様に解析できます。
+# デフォルト値は YES です。
+# このタグはタグ GENERATE_PERLMOD を YES に設定する必要があります。
+
+PERLMOD_PRETTY         = YES
+
+# 生成されたdoxyrules.makeファイルのmake変数名には、 PERLMOD_MAKEVAR_PREFIX に含まれる文字列が先頭に付加されます。こ
+# れは、同じMakefileにインクルードされる異なるdoxyrules.makeファイルが互いの変数を上書きしないようにするのに役立ちます。
+# このタグはタグ GENERATE_PERLMOD を YES に設定する必要があります。
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# プリプロセッサに関連する設定オプション
+#---------------------------------------------------------------------------
+
+# ENABLE_PREPROCESSING タグが YES
+# に設定されている場合、Doxygenはソースおよびインクルードファイルで見つかったすべてのCプリプロセッサディレクティブを評価します。
+# デフォルト値は YES です。
+
+ENABLE_PREPROCESSING   = YES
+
+# MACRO_EXPANSION タグが YES に設定されている場合、Doxygenはソースコード内のすべてのマクロ名を展開します。 NO
+# に設定されている場合、条件付きコンパイルのみが実行されます。マクロ展開は、EXPAND_ONLY_PREDEFを YES
+# に設定することで制御された方法で行うことができます。
+# デフォルト値は NO です。
+# このタグはタグ ENABLE_PREPROCESSING を YES に設定する必要があります。
+
+MACRO_EXPANSION        = NO
+
+# EXPAND_ONLY_PREDEF およびMACRO_EXPANSIONタグの両方が YES
+# に設定されている場合、マクロ展開はPREDEFINEDおよびEXPAND_AS_DEFINEDタグで指定されたマクロに制限されます。
+# デフォルト値は NO です。
+# このタグはタグ ENABLE_PREPROCESSING を YES に設定する必要があります。
+
+EXPAND_ONLY_PREDEF     = NO
+
+# SEARCH_INCLUDES タグが YES に設定されている場合、 #include
+# が見つかった場合、INCLUDE_PATH内のインクルードファイルが検索されます。
+# デフォルト値は YES です。
+# このタグはタグ ENABLE_PREPROCESSING を YES に設定する必要があります。
+
+SEARCH_INCLUDES        = YES
+
+# INCLUDE_PATH
+# タグを使用して、入力ファイルではないがプリプロセッサによって処理する必要があるインクルードファイルを含む1つ以上のディレクトリを指定できます。
+# INCLUDE_PATH は再帰的ではないため、RECURSIVEの設定はここでは効果がないことに注意してください。
+# このタグはタグ SEARCH_INCLUDES を YES に設定する必要があります。
+
+INCLUDE_PATH           =
+
+# INCLUDE_FILE_PATTERNS タグを使用して、ディレクトリ内のヘッダーファイルをフィルタリングする1つ以上のワイルドカードパターン(*.hや
+# *.hppのように)を指定できます。空白のままにすると、FILE_PATTERNSで指定されたパターンが使用されます。
+# このタグはタグ ENABLE_PREPROCESSING を YES に設定する必要があります。
+
+INCLUDE_FILE_PATTERNS  =
+
+# PREDEFINED タグを使用して、プリプロセッサが起動する前に定義される1つ以上のマクロ名を指定できます(例: gcc
+# の-Dオプションと同様)。タグの引数は、nameまたはname=definitionの形式のマクロのリストです(スペースなし)。定義と =
+# が省略された場合、 =1 が仮定されます。マクロ定義が #undef を介して未定義にされたり、再帰的に展開されたりするのを防ぐには、 =
+# 演算子の代わりに:=演算子を使用します。
+# このタグはタグ ENABLE_PREPROCESSING を YES に設定する必要があります。
+
+PREDEFINED             =
+
+# MACRO_EXPANSIONおよびEXPAND_ONLY_PREDEFタグが YES に設定されている場合、このタグを使用して展開するマクロ名のリストを指
+# 定できます。ソースで見つかったマクロ定義が使用されます。ソースコードで見つかった定義をオーバーライドする異なるマクロ定義を使用する場合は、PREDEFINE
+# Dタグを使用します。
+# このタグはタグ ENABLE_PREPROCESSING を YES に設定する必要があります。
+
+EXPAND_AS_DEFINED      =
+
+# SKIP_FUNCTION_MACROS タグが YES に設定されている場合、Doxygenのプリプロセッサは、単独行にある、すべて大文字の名前を持ち、
+# セミコロンで終わらない関数マクロへのすべての参照を削除します。このような関数マクロは通常ボイラープレートコードに使用され、削除されないとパーサーを混乱させま
+# す。
+# デフォルト値は YES です。
+# このタグはタグ ENABLE_PREPROCESSING を YES に設定する必要があります。
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# 外部参照に関連する設定オプション
+#---------------------------------------------------------------------------
+
+# TAGFILES タグを使用して、1つ以上のタグファイルを指定できます。各タグファイルについて、外部ドキュメントの場所を追加する必要があります。場所なしの
+# タグファイルの形式は次のとおりです:
+# TAGFILES = file1 file2 ...
+# タグファイルの場所の追加は次のように行います:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# ここでloc1とloc2は相対パス、絶対パス、またはURLにすることができます。タグファイルの使用の詳細については、セクション"Linking to
+# external documentation" を参照してください。
+# 注: 各タグファイルは一意の名前を持つ必要があります(名前にはパスを含みません)。タグファイルがDoxygenを実行するディレクトリにない場合は、ここでタグ
+# ファイルへのパスも指定する必要があります。
+
+TAGFILES               =
+
+# GENERATE_TAGFILE の後にファイル名が指定されると、Doxygenは読み取った入力ファイルに基づいてタグファイルを作成します。タグファイルの
+# 使用の詳細については、セクション"Linking to external documentation" を参照してください。
+
+GENERATE_TAGFILE       =
+
+# ALLEXTERNALS タグが YES に設定されている場合、すべての外部クラスと名前空間がクラスおよび名前空間インデックスにリストされます。 NO
+# に設定されている場合、継承された外部クラスのみがリストされます。
+# デフォルト値は NO です。
+
+ALLEXTERNALS           = NO
+
+# EXTERNAL_GROUPS タグが YES に設定されている場合、すべての外部グループがトピックインデックスにリストされます。 NO
+# に設定されている場合、現在のプロジェクトのグループのみがリストされます。
+# デフォルト値は YES です。
+
+EXTERNAL_GROUPS        = YES
+
+# EXTERNAL_PAGES タグが YES に設定されている場合、すべての外部ページが関連ページインデックスにリストされます。 NO
+# に設定されている場合、現在のプロジェクトのページのみがリストされます。
+# デフォルト値は YES です。
+
+EXTERNAL_PAGES         = YES
+
+#---------------------------------------------------------------------------
+# ダイアグラム生成ツールに関連する設定オプション
+#---------------------------------------------------------------------------
+
+# HIDE_UNDOC_RELATIONS タグが YES
+# に設定されている場合、継承およびコラボレーショングラフは、ターゲットが未文書化であるかクラスでない場合、継承および使用関係を非表示にします。
+# デフォルト値は YES です。
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# HAVE_DOT タグを YES に設定すると、Doxygenは path から dot
+# ツールが利用可能であると仮定します。このツールはAT&TおよびLucent Bell LabsのGraphviz (see:
+# https://www.graphviz.org/)グラフ可視化ツールキットの一部です。このオプションが NO
+# に設定されている場合、このセクションの他のオプションは効果がありません。
+# デフォルト値は NO です。
+
+HAVE_DOT               = NO
+
+# DOT_NUM_THREADS は、Doxygenが並列で実行できる dot 呼び出しの数を指定します。 0 に設定すると、Doxygenはシステムで利用
+# 可能なプロセッサの数に基づいて決定します。CPU負荷と処理速度のバランスを制御するために、0より大きい値を明示的に設定できます。
+# 最小値: 0, 最大値: 512, デフォルト値: 0。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+DOT_NUM_THREADS        = 0
+
+# DOT_BATCH_SIZE は、Doxygen が1回の dot 呼び出しでコンパイルできる dot グラフの数を指定します。 1
+# に設定すると、Doxygen は各グラフに対して個別に dot を呼び出しますが、特に多くの CPU コアを
+# 持つシステムでは、プロセス作成のオーバーヘッドが大きくなる可能性があります。 DOT_NUM_THREADS と
+# 共にこの設定を使用することで、特定のシステムの dot 処理速度を最適化できます。Doxygen は各スレッドに
+# バランスの取れた作業量を割り当てようとします。処理するグラフの総数が DOT_NUM_THREADS * DOT_BATCH_SIZE を超える場合、
+# dot が処理するための追加バッチが作成されます。
+# 最小値: 1, 最大値: 1000, デフォルト値: 50。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+DOT_BATCH_SIZE         = 50
+
+# DOT_COMMON_ATTR は、ノード、エッジ、およびサブグラフラベルの共通属性です。Doxygenが生成するdotファイルで異なる外観のフォントを使
+# 用したい場合、fontname、fontcolor、およびfontsize属性を指定できます。詳細については、<a href=https://graphvi
+# z.org/doc/info/attrs.html>ノード、エッジ、およびグラフ属性の仕様</a>を参照してください。 dot
+# がフォントを見つけられることを確認する必要があります。これは、標準の場所に配置するか、 DOTFONTPATH
+# 環境変数を設定するか、フォントを含むディレクトリにDOT_FONTPATHを設定することで行います。デフォルトのgraphvizフォントサイズは14です。
+# デフォルト値は fontname=Helvetica,fontsize=10 です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+DOT_COMMON_ATTR        = "fontname=Helvetica,fontsize=10"
+
+# DOT_EDGE_ATTR はDOT_COMMON_ATTRと連結されます。エレガントなスタイルにするには、'arrowhead=open,
+# arrowtail=open, arrowsize=0.5'を追加できます。<a
+# href=https://graphviz.org/doc/info/arrows.html>矢印形状の完全なドキュメント</a>
+# デフォルト値は labelfontname=Helvetica,labelfontsize=10 です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+DOT_EDGE_ATTR          = "labelfontname=Helvetica,labelfontsize=10"
+
+# DOT_NODE_ATTR はDOT_COMMON_ATTRと連結されます。ノードの周りのボックスなしの表示には、'shape=plain'または'sha
+# pe=plaintext'を設定します。<a
+# href=https://www.graphviz.org/doc/info/shapes.html>形状の仕様</a>
+# デフォルト値は shape=box,height=0.2,width=0.4 です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+DOT_NODE_ATTR          = "shape=box,height=0.2,width=0.4"
+
+# DOT_COMMON_ATTRおよび他のdot属性でfontnameにより指定されたフォントを dot が見つけられるパスを設定できます。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+DOT_FONTPATH           =
+
+# CLASS_GRAPH タグが YES または GRAPH または BUILTIN
+# に設定されている場合、Doxygenは文書化された各クラスのグラフを生成し、直接および間接の継承関係を示します。 CLASS_GRAPH タグが YES
+# または GRAPH に設定され、HAVE_DOTも有効な場合、dotがグラフの描画に使用されます。 CLASS_GRAPH タグが YES
+# に設定され、HAVE_DOTが無効な場合、または CLASS_GRAPH タグが BUILTIN
+# に設定されている場合、組み込みジェネレーターが使用されます。 CLASS_GRAPH タグが TEXT に設定されている場合、直接および間接の継承関係がテキ
+# スト/リンクとして表示されます。特定のクラスの継承グラフを明示的に有効にするか、異なる表現を選択するには、\inheritancegraphコマンドを使用で
+# きます。継承グラフを無効にするには、\hideinheritancegraphコマンドを使用できます。
+# 可能な値は:NO, YES, TEXT, GRAPHとBUILTIN.
+# デフォルト値は YES です。
+
+CLASS_GRAPH            = YES
+
+# COLLABORATION_GRAPH タグが YES に設定されている場合、Doxygenは文書化された各クラスのグラフを生成し、クラスと他の文書化され
+# たクラスとの直接および間接の実装依存関係(継承、包含、およびクラス参照変数)を示します。 COLLABORATION_GRAPH が NO に設定されている
+# 場合、コラボレーショングラフを明示的に有効にするには、\collaborationgraphコマンドを使用できます。コラボレーショングラフを無効にするには、
+# \hidecollaborationgraphコマンドを使用できます。
+# デフォルト値は YES です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+COLLABORATION_GRAPH    = YES
+
+# GROUP_GRAPHS タグが YES に設定されている場合、Doxygenはグループのグラフを生成し、グループの直接の依存関係を示します。
+# GROUP_GRAPHS が NO に設定されている場合でも、グループ依存グラフを明示的に有効にするには、\groupgraphコマンドを使用できます。グル
+# ープグラフを無効にするには、\hidegroupgraphコマンドを使用できます。マニュアルのグループ化の章も参照してください。
+# デフォルト値は YES です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+GROUP_GRAPHS           = YES
+
+# UML_LOOK タグが YES
+# に設定されている場合、DoxygenはOMGの統一モデリング言語(UML)と同様のスタイルで継承およびコラボレーションダイアグラムを生成します。
+# デフォルト値は NO です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+UML_LOOK               = NO
+
+# UML_LOOKタグが有効な場合、フィールドとメソッドはクラスノード内に表示されます。多くのフィールドやメソッドと多くのノードがある場合、グラフは有用でない
+# ほど大きくなる可能性があります。 UML_LIMIT_NUM_FIELDS しきい値は、サイズをより管理しやすくするために各タイプのアイテム数を制限します。
+# 制限なしの場合は0に設定します。なお、しきい値は制限が適用される前に50%まで超過する可能性があります。したがって、しきい値を10に設定すると、最大15フィ
+# ールドが表示される可能性がありますが、数が15を超えると、表示されるフィールドの総数は10に制限されます。
+# 最小値: 0, 最大値: 100, デフォルト値: 10。
+# このタグはタグ UML_LOOK を YES に設定する必要があります。
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# UML_LOOKタグが有効な場合、フィールドラベルは2つのクラスノード間のエッジに沿って表示されます。多くのフィールドと多くのノードがある場合、グラフは雑然
+# としすぎる可能性があります。 UML_MAX_EDGE_LABELS
+# しきい値は、サイズをより管理しやすくするためにアイテム数を制限します。制限なしの場合は0に設定します。
+# 最小値: 0, 最大値: 100, デフォルト値: 10。
+# このタグはタグ UML_LOOK を YES に設定する必要があります。
+
+UML_MAX_EDGE_LABELS    = 10
+
+# DOT_UML_DETAILS タグが NO に設定されている場合、DoxygenはUMLグラフでタイプと引数なしで属性とメソッドを表示します。
+# DOT_UML_DETAILS タグが YES に設定されている場合、DoxygenはUMLグラフで属性とメソッドのタイプと引数を追加します。
+# DOT_UML_DETAILS タグが NONE に設定されている場合、DoxygenはUMLグラフでクラスメンバー情報を持つフィールドを生成しません。クラ
+# ス図はデフォルトのクラス図に似ていますが、関係にUML表記を使用します。
+# 可能な値は:NO, YESとNONE.
+# デフォルト値は NO です。
+# このタグはタグ UML_LOOK を YES に設定する必要があります。
+
+DOT_UML_DETAILS        = NO
+
+# DOT_WRAP_THRESHOLD タグを使用して、1行に表示される最大文字数を設定できます。実際の行の長さがこのしきい値を大幅に超える場合、複数行に分
+# 割されます。見苦しい改行を避けるためにいくつかのヒューリスティックが適用されます。
+# 最小値: 0, 最大値: 1000, デフォルト値: 17。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+DOT_WRAP_THRESHOLD     = 17
+
+# TEMPLATE_RELATIONS タグが YES
+# に設定されている場合、継承およびコラボレーショングラフはテンプレートとそのインスタンス間の関係を示します。
+# デフォルト値は NO です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+TEMPLATE_RELATIONS     = NO
+
+# INCLUDE_GRAPH 、ENABLE_PREPROCESSING、およびSEARCH_INCLUDESタグがすべて YES に設定されている場合、D
+# oxygenは文書化された各ファイルのグラフを生成し、ファイルと他の文書化されたファイルとの直接および間接のインクルード依存関係を示します。
+# INCLUDE_GRAPH が NO に設定されている場合、インクルードグラフを明示的に有効にするには、\includegraphコマンドを使用できます。イ
+# ンクルードグラフを無効にするには、\hideincludegraphコマンドを使用できます。
+# デフォルト値は YES です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+INCLUDE_GRAPH          = YES
+
+# INCLUDED_BY_GRAPH 、ENABLE_PREPROCESSING、およびSEARCH_INCLUDESタグがすべて YES に設定されている
+# 場合、Doxygenは文書化された各ファイルのグラフを生成し、ファイルと他の文書化されたファイルとの直接および間接のインクルード依存関係を示します。
+# INCLUDED_BY_GRAPH が NO に設定されている場合、インクルード元グラフを明示的に有効にするには、\includedbygraphコマンドを
+# 使用できます。インクルード元グラフを無効にするには、\hideincludedbygraphコマンドを使用できます。
+# デフォルト値は YES です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+INCLUDED_BY_GRAPH      = YES
+
+# CALL_GRAPH タグが YES に設定されている場合、Doxygenは各グローバル関数またはクラスメソッドの呼び出し依存グラフを生成します。
+#
+# このオプションを有効にすると実行時間が大幅に増加することに注意してください。したがって、ほとんどの場合、\callgraphコマンドを使用して選択した関数の
+# 呼び出しグラフのみを有効にする方が良いでしょう。呼び出しグラフを無効にするには、\hidecallgraphコマンドを使用できます。
+# デフォルト値は NO です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+CALL_GRAPH             = NO
+
+# CALLER_GRAPH タグが YES に設定されている場合、Doxygenは各グローバル関数またはクラスメソッドの呼び出し元依存グラフを生成します。
+#
+# このオプションを有効にすると実行時間が大幅に増加することに注意してください。したがって、ほとんどの場合、\callergraphコマンドを使用して選択した関
+# 数の呼び出し元グラフのみを有効にする方が良いでしょう。呼び出し元グラフを無効にするには、\hidecallergraphコマンドを使用できます。
+# デフォルト値は NO です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+CALLER_GRAPH           = NO
+
+# GRAPHICAL_HIERARCHY タグが YES
+# に設定されている場合、Doxygenはテキストの代わりにすべてのクラスのグラフィカルな階層図を生成します。
+# デフォルト値は YES です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+GRAPHICAL_HIERARCHY    = YES
+
+# DIRECTORY_GRAPH タグが YES
+# に設定されている場合、Doxygenはディレクトリの他のディレクトリへの依存関係をグラフィカルに示します。依存関係は、ディレクトリ内のファイル間の
+# #include 関係によって決定されます。 DIRECTORY_GRAPH が NO に設定されている場合、ディレクトリグラフを明示的に有効にするには、\
+# directorygraphコマンドを使用できます。ディレクトリグラフを無効にするには、\hidedirectorygraphコマンドを使用できます。
+# デフォルト値は YES です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+DIRECTORY_GRAPH        = YES
+
+# DIR_GRAPH_MAX_DEPTH タグを使用して、 dot によってディレクトリ依存グラフで生成される子ディレクトリレベルの最大数を制限できます。
+# 最小値: 1, 最大値: 25, デフォルト値: 1。
+# このタグはタグ DIRECTORY_GRAPH を YES に設定する必要があります。
+
+DIR_GRAPH_MAX_DEPTH    = 1
+
+# DOT_IMAGE_FORMAT タグを使用して、 dot によって生成される画像の形式を設定できます。画像形式の説明については、 dot
+# ツールのドキュメントの出力形式セクションを参照してください(Graphviz (see:
+# https://www.graphviz.org/))。
+#
+# なお、svg:cairoおよびsvg:cairo:cairo形式はINTERACTIVE_SVGと組み合わせて使用できません(INTERACTIVE_SVG
+# はNOに設定されます)。
+# 可能な値は:png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, png:cairo:gd,
+# png:cairo:cairo, png:cairo:gdiplus, png:gdiplus, png:gdiplus:gdiplus,
+# svg:cairo, svg:cairo:cairo, svg:svg, svg:svg:core, gif:cairo, gif:cairo:gd,
+# gif:cairo:gdiplus, gif:gdiplus, gif:gdiplus:gdiplus, gif:gd, gif:gd:gd,
+# jpg:cairo, jpg:cairo:gd, jpg:cairo:gdiplus, jpg:gd, jpg:gd:gd,
+# jpg:gdiplusとjpg:gdiplus:gdiplus.
+# デフォルト値は png です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+DOT_IMAGE_FORMAT       = png
+
+# DOT_IMAGE_FORMATがsvgまたはsvg:svgまたはsvg:svg:coreに設定されている場合、このオプションを YES
+# に設定して、ズームとパンを可能にするインタラクティブSVG画像の生成を有効にできます。
+#
+# なお、Internet Explorer以外の最新のブラウザが必要です。テスト済みで動作するもの:Firefox、Chrome、Safari、Opera。
+#
+# DOT_IMAGE_FORMATがsvg:cairoまたはsvg:cairo:cairoに設定されている場合、このオプションは自動的に無効になります。
+# デフォルト値は NO です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+INTERACTIVE_SVG        = NO
+
+# DOT_PATH タグを使用して、 dot ツールが見つかるパスを指定できます。空白のままにすると、 dot ツールが path
+# で見つかると仮定されます。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+DOT_PATH               =
+
+# DOTFILE_DIRS
+# タグを使用して、ドキュメントにインクルードされるdotファイルを含む1つ以上のディレクトリを指定できます(\dotfileコマンドを参照)。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+DOTFILE_DIRS           =
+
+# Doxygenドキュメントにdiaで作成したダイアグラムを含めることができます。Doxygenはdiaを実行してダイアグラムを生成し、ドキュメントに挿入しま
+# す。 DIA_PATH
+# タグを使用すると、diaバイナリが存在するディレクトリを指定できます。空白のままにすると、diaはデフォルトの検索パスで見つかると仮定されます。
+
+DIA_PATH               =
+
+# DIAFILE_DIRS
+# タグを使用して、ドキュメントにインクルードされるdiaファイルを含む1つ以上のディレクトリを指定できます(\diafileコマンドを参照)。
+
+DIAFILE_DIRS           =
+
+# PlantUMLを使用する場合、 PLANTUML_JAR_PATH タグを使用して、javaが plantuml
+# .jarファイルを見つけられるパス、または使用する jar ファイルのファイル名を指定する必要があります。空白のままにすると、PlantUMLは使用されない
+# か、前処理ステップで呼び出されると仮定されます。この場合、Doxygenは\startumlコマンドに遭遇すると警告を生成し、ダイアグラムの出力を生成しませ
+# ん。
+
+PLANTUML_JAR_PATH      =
+
+# PlantUMLを使用する場合、 PLANTUML_CFG_FILE タグを使用してPlantUMLの設定ファイルを指定できます。
+
+PLANTUML_CFG_FILE      =
+
+# PlantUMLを使用する場合、指定されたパスはPlantUMLブロック内の !include ステートメントで指定されたファイルに対して検索されます。
+
+PLANTUML_INCLUDE_PATH  =
+
+# PLANTUMLFILE_DIRS タグを使用して、ドキュメントにインクルードされるPlantUmlファイルを含む1つ以上のディレクトリを指定できます(\
+# plantumlfileコマンドを参照)。
+
+PLANTUMLFILE_DIRS      =
+
+# CLIレンダリングでMermaidダイアグラムを使用する場合、 MERMAID_PATH タグを使用して、 mmdc (Mermaid CLI)実行可能ファ
+# イルが見つかるディレクトリを指定する必要があります。空白のままにすると、CLIベースのレンダリングは無効になります。HTML出力の場合、JavaScript
+# によるクライアント側レンダリングがデフォルトで使用され、 mmdc は必要ありません。LaTeX/PDF出力の場合、画像を事前生成するために mmdc
+# が必要です。CLIレンダリングが必要だが mmdc が利用できない場合、Doxygenは警告を生成します。
+
+MERMAID_PATH           =
+
+# Mermaidダイアグラムを使用する場合、 MERMAID_CONFIG_FILE タグを使用して、Mermaid CLIツール( mmdc
+# )のJSON設定ファイルを指定できます。このファイルには、テーマ設定やその他のMermaid設定オプションを含めることができます。
+
+MERMAID_CONFIG_FILE    =
+
+# MERMAID_RENDER_MODE タグは、Mermaidダイアグラムのレンダリング方法を選択します。
+# 可能な値は:AUTO (HTMLにはクライアント側レンダリングを使用し、LaTeX/PDFおよびその他の形式には mmdc を使用。
+# MERMAID_PATH が設定されていない場合、非HTMLダイアグラムは警告を生成します), CLI (mmdc ツールを使用して画像を事前生成(Node
+# .jsとmermaid-js/mermaid-cliが必要)。すべての出力形式で動作)とCLIENT_SIDE (クライアント側レンダリングのために
+# mermaid.js をHTML出力に埋め込み。 mmdc は不要ですが、HTML出力でのみ動作).
+# デフォルト値は AUTO です。
+
+MERMAID_RENDER_MODE    = AUTO
+
+# MERMAID_JS_URL タグは、クライアント側レンダリングを使用する場合( MERMAID_RENDER_MODE が CLIENT_SIDE
+# または AUTO )に mermaid.js をロードするURLを指定します。デフォルトはjsDelivr CDNの最新のMermaid
+# v11を指しています。
+#
+# デフォルトのCDN URLは、生成されたドキュメントを表示する際にインターネットアクセスが必要です。オフライン使用の場合は、
+# mermaid.esm.min.mjs をダウンロードしてこれを相対パスに設定するか、代わりに MERMAID_RENDER_MODE
+# =CLIを使用して画像を事前生成します。
+# 例:
+# -
+# 最新のv11(デフォルト):https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs
+# - ピン留めされたバージョン:https://cdn.jsdelivr.net/npm/mermaid@11.3.0/dist/mermaid.esm.m
+# in.mjs
+# - ローカルコピー:./mermaid.esm.min.mjs(ユーザーはファイルをHTML出力ディレクトリに配置する必要があります)
+# デフォルト値は https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs です。
+
+MERMAID_JS_URL         = https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs
+
+# MERMAIDFILE_DIRS
+# タグを使用して、ドキュメントにインクルードされるMermaidファイルを含む1つ以上のディレクトリを指定できます(\mermaidfileコマンドを参照)。
+
+MERMAIDFILE_DIRS       =
+
+# DOT_GRAPH_MAX_NODES タグを使用して、グラフに表示されるノードの最大数を設定できます。グラフ内のノード数がこの値を超えると、Doxyge
+# nはグラフを切り詰め、ノードを赤いボックスとして表示することで視覚化します。なお、グラフのルートノードの直接の子の数がすでに
+# DOT_GRAPH_MAX_NODES
+# を超えている場合、グラフは表示されません。また、グラフのサイズはMAX_DOT_GRAPH_DEPTHによってさらに制限される可能性があります。
+# 最小値: 0, 最大値: 10000, デフォルト値: 50。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# MAX_DOT_GRAPH_DEPTH タグを使用して、 dot によって生成されるグラフの最大深度を設定できます。深度値3は、最大3エッジを経由するパス
+# でルートから到達可能なノードのみが表示されることを意味します。ルートノードからより遠いノードは省略されます。なお、このオプションを1または2に設定すると、大
+# 規模なコードベースの計算時間を大幅に削減できます。また、グラフのサイズはDOT_GRAPH_MAX_NODESによってさらに制限される可能性があります。深度
+# 0を使用すると、深度の制限はありません。
+# 最小値: 0, 最大値: 1000, デフォルト値: 0。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# GENERATE_LEGEND タグが YES
+# に設定されている場合、Doxygenはdotによって生成されたグラフの様々なボックスと矢印の意味を説明する凡例ページを生成します。
+# 注: このタグは、UML_LOOKが設定されていないことを前提としています。つまり、継承およびコラボレーションダイアグラムにDoxygenの内部グラフィカル
+# 表現が使用される場合に有効です。
+# デフォルト値は YES です。
+# このタグはタグ HAVE_DOT を YES に設定する必要があります。
+
+GENERATE_LEGEND        = YES
+
+# DOT_CLEANUP タグが YES に設定されている場合、Doxygenは各種グラフを生成するために使用された中間ファイルを削除します。
+#
+# なお、この設定はdotファイルだけでなく、一時的なmscファイルにも適用されます。
+# デフォルト値は YES です。
+
+DOT_CLEANUP            = YES
+
+# Doxygenコメント内で\mscコマンドを使用してメッセージシーケンスチャートを定義できます。 MSCGEN_TOOL
+# タグが空白のまま(デフォルト)の場合、Doxygenはチャートを生成するために組み込みバージョンのmscgenツールを使用します。または、
+# MSCGEN_TOOL タグで外部ツールの名前を指定することもできます。例えば、値としてprogを指定すると、Doxygenはツールをprog -T
+# <outfile_format> -o <outputfile> <inputfile>として呼び出します。外部ツールは、出力ファイル形式「png」、「ep
+# s」、「svg」、および「ismap」をサポートする必要があります。
+
+MSCGEN_TOOL            =
+
+# MSCFILE_DIRS
+# タグを使用して、ドキュメントにインクルードされるmscファイルを含む1つ以上のディレクトリを指定できます(\mscfileコマンドを参照)。
+
+MSCFILE_DIRS           =

+ 161 - 0
docs/html/actor_8hpp.html

@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/actor.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('actor_8hpp.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">actor.hpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="kernel_8hpp_source.html">kernel.hpp</a>&quot;</code><br />
+<code>#include &lt;cstdint&gt;</code><br />
+<code>#include &lt;cstddef&gt;</code><br />
+<code>#include &lt;type_traits&gt;</code><br />
+<code>#include &lt;utility&gt;</code><br />
+</div>
+<p><a href="actor_8hpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:tk_3A_3AMessage" id="r_tk_3A_3AMessage"><td class="memItemLeft">struct &#160;</td><td class="memItemRight"><a class="el" href="structtk_1_1_message.html">tk::Message</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">デフォルトの軽量メッセージ構造体  <a href="structtk_1_1_message.html#details">More...</a><br /></td></tr>
+<tr class="memitem:tk_3A_3AEventHub_3C_20MsgType_2C_20MaxSubscribers_20_3E" id="r_tk_3A_3AEventHub_3C_20MsgType_2C_20MaxSubscribers_20_3E"><td class="memItemLeft">class &#160;</td><td class="memItemRight"><a class="el" href="classtk_1_1_event_hub.html">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">メッセージ型ごとの超軽量 Pub/Sub ディスパッチャ  <a href="classtk_1_1_event_hub.html#details">More...</a><br /></td></tr>
+<tr class="memitem:tk_3A_3AActor_3C_20MsgType_2C_20QueueSize_20_3E" id="r_tk_3A_3AActor_3C_20MsgType_2C_20QueueSize_20_3E"><td class="memItemLeft">class &#160;</td><td class="memItemRight"><a class="el" href="classtk_1_1_actor.html">tk::Actor&lt; MsgType, QueueSize &gt;</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">メッセージ駆動型タスク (アクター) の基底クラス  <a href="classtk_1_1_actor.html#details">More...</a><br /></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-namespaces" class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:tk" id="r_tk"><td class="memItemLeft">namespace &#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html">tk</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a083495c9bf857a63f6c20a20aac0ca52" id="r_a083495c9bf857a63f6c20a20aac0ca52"><td class="memTemplParams" colspan="2">template&lt;typename MsgType&gt; </td></tr>
+<tr class="memitem:a083495c9bf857a63f6c20a20aac0ca52 template"><td class="memItemLeft">size_t&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#a083495c9bf857a63f6c20a20aac0ca52">tk::publish</a> (const MsgType &amp;msg)</td></tr>
+<tr class="memdesc:a083495c9bf857a63f6c20a20aac0ca52"><td class="mdescLeft">&#160;</td><td class="mdescRight">メッセージの型を指定して、購読しているすべての <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> へ同報配信します  <br /></td></tr>
+<tr class="memitem:a5549bec310750722a1964de1145b9fed" id="r_a5549bec310750722a1964de1145b9fed"><td class="memItemLeft">size_t&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#a5549bec310750722a1964de1145b9fed">tk::publish</a> (uint32_t id, uintptr_t arg=0)</td></tr>
+<tr class="memdesc:a5549bec310750722a1964de1145b9fed"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structtk_1_1_message.html" title="デフォルトの軽量メッセージ構造体">tk::Message</a> 型の同報配信ショートカット  <br /></td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li><li class="navelem"><a href="dir_34ae86e414c9a960c5c39d1d6b15c7a8.html">include</a></li><li class="navelem"><a href="dir_91e9b2eecded889eb8782a5ba7843b6a.html">tinykernel</a></li><li class="navelem"><a href="actor_8hpp.html">actor.hpp</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 8 - 0
docs/html/actor_8hpp.js

@@ -0,0 +1,8 @@
+var actor_8hpp =
+[
+    [ "tk::Message", "structtk_1_1_message.html", "structtk_1_1_message" ],
+    [ "tk::EventHub&lt; MsgType, MaxSubscribers &gt;", "classtk_1_1_event_hub.html", null ],
+    [ "tk::Actor&lt; MsgType, QueueSize &gt;", "classtk_1_1_actor.html", "classtk_1_1_actor" ],
+    [ "tk::publish", "namespacetk.html#a083495c9bf857a63f6c20a20aac0ca52", null ],
+    [ "tk::publish", "namespacetk.html#a5549bec310750722a1964de1145b9fed", null ]
+];

+ 382 - 0
docs/html/actor_8hpp_source.html

@@ -0,0 +1,382 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/actor.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('actor_8hpp_source.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">actor.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="actor_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="preprocessor">#pragma once</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="preprocessor">#include &quot;<a class="code" href="kernel_8hpp.html">kernel.hpp</a>&quot;</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="preprocessor">#include &lt;cstdint&gt;</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="preprocessor">#include &lt;cstddef&gt;</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="preprocessor">#include &lt;type_traits&gt;</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span> </div>
+<div class="foldopen" id="foldopen00009" data-start="{" data-end="}">
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"><a class="line" href="namespacetk.html">    9</a></span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacetk.html">tk</a> {</div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span></div>
+<div class="foldopen" id="foldopen00014" data-start="{" data-end="};">
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="structtk_1_1_message.html">   14</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structtk_1_1_message.html">Message</a> {</div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"><a class="line" href="structtk_1_1_message.html#a9a7de43cbf3da1821cf18ae924f94c52">   15</a></span>    uint32_t <a class="code hl_variable" href="structtk_1_1_message.html#a9a7de43cbf3da1821cf18ae924f94c52">id</a>;    </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"><a class="line" href="structtk_1_1_message.html#a570c5c394d2786708ce4830e4087aa9e">   16</a></span>    uintptr_t <a class="code hl_variable" href="structtk_1_1_message.html#a570c5c394d2786708ce4830e4087aa9e">arg</a>;  </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span>};</div>
+</div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> MsgType, <span class="keywordtype">size_t</span> MaxSubscribers = 4&gt;</div>
+<div class="foldopen" id="foldopen00029" data-start="{" data-end="};">
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="classtk_1_1_event_hub.html">   29</a></span><span class="keyword">class </span><a class="code hl_class" href="classtk_1_1_event_hub.html">EventHub</a> {</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span>    <span class="keyword">struct </span>Subscriber {</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span>        <span class="keywordtype">void</span>* actor{<span class="keyword">nullptr</span>};</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span>        bool (*post_fn)(<span class="keywordtype">void</span>*, <span class="keyword">const</span> MsgType&amp;){<span class="keyword">nullptr</span>};</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span>    };</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>    <span class="keyword">static</span> <span class="keyword">inline</span> Subscriber subs_[MaxSubscribers]{};</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">size_t</span> count_{0};</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span><span class="keyword">public</span>:</div>
+<div class="foldopen" id="foldopen00045" data-start="{" data-end="}">
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="classtk_1_1_event_hub.html#a50ebe29eaa2657604a1c85bf5125d490">   45</a></span>    <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classtk_1_1_event_hub.html#a50ebe29eaa2657604a1c85bf5125d490">subscribe</a>(<span class="keywordtype">void</span>* actor, <span class="keywordtype">bool</span> (*post_fn)(<span class="keywordtype">void</span>*, <span class="keyword">const</span> MsgType&amp;)) {</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>        uint32_t save = <a class="code hl_function" href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">detail::sched_lock</a>();</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span>        <span class="keywordflow">if</span> (count_ &gt;= MaxSubscribers) {</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span>            <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">detail::sched_unlock</a>(save);</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span>            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>        }</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>        <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; count_; ++i) {</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>            <span class="keywordflow">if</span> (subs_[i].actor == actor) {</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>                <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">detail::sched_unlock</a>(save);</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>                <span class="keywordflow">return</span> <span class="keyword">true</span>;  <span class="comment">// 登録済み</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>            }</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>        }</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>        subs_[count_++] = {actor, post_fn};</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>        <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">detail::sched_unlock</a>(save);</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>    }</div>
+</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span></div>
+<div class="foldopen" id="foldopen00067" data-start="{" data-end="}">
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="classtk_1_1_event_hub.html#a09c779ce8c594ea44c831adfd7e287f8">   67</a></span>    <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classtk_1_1_event_hub.html#a09c779ce8c594ea44c831adfd7e287f8">unsubscribe</a>(<span class="keywordtype">void</span>* actor) {</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>        uint32_t save = <a class="code hl_function" href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">detail::sched_lock</a>();</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>        <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; count_; ++i) {</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span>            <span class="keywordflow">if</span> (subs_[i].actor == actor) {</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>                <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = i; j + 1 &lt; count_; ++j) {</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span>                    subs_[j] = subs_[j + 1];</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>                }</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>                count_--;</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>                <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">detail::sched_unlock</a>(save);</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>            }</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>        }</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>        <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">detail::sched_unlock</a>(save);</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span>    }</div>
+</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span></div>
+<div class="foldopen" id="foldopen00089" data-start="{" data-end="}">
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="classtk_1_1_event_hub.html#a3a59a641ad3fe121c0da7e1c81dc300b">   89</a></span>    <span class="keyword">static</span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classtk_1_1_event_hub.html#a3a59a641ad3fe121c0da7e1c81dc300b">publish</a>(<span class="keyword">const</span> MsgType&amp; msg) {</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>        Subscriber local_subs[MaxSubscribers];</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>        <span class="keywordtype">size_t</span> n = 0;</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span>        {</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span>            uint32_t save = <a class="code hl_function" href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">detail::sched_lock</a>();</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span>            n = count_;</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span>            <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; n; ++i) {</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span>                local_subs[i] = subs_[i];</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span>            }</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span>            <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">detail::sched_unlock</a>(save);</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>        }</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span>        <span class="keywordtype">size_t</span> delivered = 0;</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>        <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; n; ++i) {</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span>            <span class="keywordflow">if</span> (local_subs[i].post_fn &amp;&amp; local_subs[i].post_fn(local_subs[i].actor, msg)) {</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>                delivered++;</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>            }</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>        }</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span>        <span class="keywordflow">return</span> delivered;</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span>    }</div>
+</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span></div>
+<div class="foldopen" id="foldopen00111" data-start="{" data-end="}">
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="classtk_1_1_event_hub.html#ac4cd6ce4e37b74385c7f4352a5516930">  111</a></span>    <span class="keyword">static</span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classtk_1_1_event_hub.html#ac4cd6ce4e37b74385c7f4352a5516930">subscriber_count</a>() {</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span>        uint32_t save = <a class="code hl_function" href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">detail::sched_lock</a>();</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span>        <span class="keywordtype">size_t</span> n = count_;</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span>        <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">detail::sched_unlock</a>(save);</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span>        <span class="keywordflow">return</span> n;</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span>    }</div>
+</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span>};</div>
+</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span></div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> MsgType&gt;</div>
+<div class="foldopen" id="foldopen00135" data-start="{" data-end="}">
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"><a class="line" href="namespacetk.html#a083495c9bf857a63f6c20a20aac0ca52">  135</a></span><span class="keyword">inline</span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="namespacetk.html#a083495c9bf857a63f6c20a20aac0ca52">publish</a>(<span class="keyword">const</span> MsgType&amp; msg) {</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span>    <span class="keywordflow">return</span> <a class="code hl_function" href="classtk_1_1_event_hub.html#a3a59a641ad3fe121c0da7e1c81dc300b">EventHub&lt;MsgType&gt;::publish</a>(msg);</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span>}</div>
+</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span></div>
+<div class="foldopen" id="foldopen00146" data-start="{" data-end="}">
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"><a class="line" href="namespacetk.html#a5549bec310750722a1964de1145b9fed">  146</a></span><span class="keyword">inline</span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="namespacetk.html#a083495c9bf857a63f6c20a20aac0ca52">publish</a>(uint32_t <span class="keywordtype">id</span>, uintptr_t arg = 0) {</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span>    <span class="keywordflow">return</span> <a class="code hl_function" href="namespacetk.html#a083495c9bf857a63f6c20a20aac0ca52">publish</a>(<a class="code hl_struct" href="structtk_1_1_message.html">Message</a>{id, arg});</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span>}</div>
+</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span></div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> MsgType = Message, <span class="keywordtype">size_t</span> QueueSize = 8&gt;</div>
+<div class="foldopen" id="foldopen00174" data-start="{" data-end="};">
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"><a class="line" href="classtk_1_1_actor.html">  174</a></span><span class="keyword">class </span><a class="code hl_function" href="classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5">Actor</a> {</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span>    <span class="keyword">static_assert</span>(QueueSize &gt; 0, <span class="stringliteral">&quot;QueueSize must be greater than 0&quot;</span>);</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"><a class="line" href="classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5">  178</a></span>    <a class="code hl_function" href="classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5">Actor</a>() = <span class="keywordflow">default</span>;</div>
+<div class="foldopen" id="foldopen00179" data-start="{" data-end="}">
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"><a class="line" href="classtk_1_1_actor.html#abfc63a514a3ae7cdbdf9ceee81c3b0fc">  179</a></span>    <span class="keyword">virtual</span> <a class="code hl_function" href="classtk_1_1_actor.html#abfc63a514a3ae7cdbdf9ceee81c3b0fc">~Actor</a>() {</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span>        <a class="code hl_function" href="classtk_1_1_event_hub.html#a09c779ce8c594ea44c831adfd7e287f8">EventHub&lt;MsgType&gt;::unsubscribe</a>(<span class="keyword">this</span>);</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span>    }</div>
+</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span></div>
+<div class="foldopen" id="foldopen00191" data-start="{" data-end="}">
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"><a class="line" href="classtk_1_1_actor.html#ac98ec3132f2ded910a6899b030c06f3f">  191</a></span>    <span class="keywordtype">bool</span> <a class="code hl_function" href="classtk_1_1_actor.html#ac98ec3132f2ded910a6899b030c06f3f">start</a>(uint32_t prio = <a class="code hl_enumvalue" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">PRIO_NORMAL</a>) {</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span>        <a class="code hl_function" href="classtk_1_1_event_hub.html#a50ebe29eaa2657604a1c85bf5125d490">EventHub&lt;MsgType&gt;::subscribe</a>(<span class="keyword">this</span>, [](<span class="keywordtype">void</span>* obj, <span class="keyword">const</span> MsgType&amp; m) {</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span>            <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code hl_function" href="classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5">Actor&lt;MsgType, QueueSize&gt;</a>*<span class="keyword">&gt;</span>(obj)-&gt;<a class="code hl_function" href="classtk_1_1_actor.html#a224e6be4dca0d1500f2121e97bd0f92d">post</a>(m);</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span>        });</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span>        handle_ = <a class="code hl_function" href="namespacetk.html#a6e721332f5a7d85998345ed218de7394">tk::create</a>(task_entry, <span class="keyword">this</span>, prio);</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span>        <span class="keywordflow">return</span> handle_.is_valid();</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span>    }</div>
+</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span></div>
+<div class="foldopen" id="foldopen00207" data-start="{" data-end="}">
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"><a class="line" href="classtk_1_1_actor.html#a224e6be4dca0d1500f2121e97bd0f92d">  207</a></span>    <span class="keywordtype">bool</span> <a class="code hl_function" href="classtk_1_1_actor.html#a224e6be4dca0d1500f2121e97bd0f92d">post</a>(<span class="keyword">const</span> MsgType&amp; msg) {</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>        uint32_t save = <a class="code hl_function" href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">detail::sched_lock</a>();</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno">  209</span>        <span class="keywordflow">if</span> (count_ &gt;= QueueSize) {</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span>            <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">detail::sched_unlock</a>(save);</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno">  211</span>            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span>        }</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno">  213</span>        queue_[tail_] = msg;</div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno">  214</span>        tail_ = (tail_ + 1) % QueueSize;</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno">  215</span>        count_++;</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno">  216</span>        <span class="keywordflow">if</span> (waiting_) {</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span>            waiting_ = <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span>            <a class="code hl_function" href="namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa">detail::wake_task_locked</a>(handle_);</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span>        }</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno">  220</span>        <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">detail::sched_unlock</a>(save);</div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span>        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno">  222</span>    }</div>
+</div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span></div>
+<div class="foldopen" id="foldopen00230" data-start="{" data-end="}">
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"><a class="line" href="classtk_1_1_actor.html#a863f28d824aaa78c75789166b1c2a010">  230</a></span>    <span class="keywordtype">bool</span> <a class="code hl_function" href="classtk_1_1_actor.html#a863f28d824aaa78c75789166b1c2a010">post</a>(MsgType&amp;&amp; msg) {</div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span>        uint32_t save = <a class="code hl_function" href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">detail::sched_lock</a>();</div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno">  232</span>        <span class="keywordflow">if</span> (count_ &gt;= QueueSize) {</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno">  233</span>            <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">detail::sched_unlock</a>(save);</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno">  234</span>            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno">  235</span>        }</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno">  236</span>        queue_[tail_] = std::move(msg);</div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno">  237</span>        tail_ = (tail_ + 1) % QueueSize;</div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno">  238</span>        count_++;</div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno">  239</span>        <span class="keywordflow">if</span> (waiting_) {</div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno">  240</span>            waiting_ = <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno">  241</span>            <a class="code hl_function" href="namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa">detail::wake_task_locked</a>(handle_);</div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno">  242</span>        }</div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno">  243</span>        <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">detail::sched_unlock</a>(save);</div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno">  244</span>        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno">  245</span>    }</div>
+</div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno">  246</span></div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno">  254</span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> U = MsgType&gt;</div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno">  255</span>    <span class="keyword">typename</span> std::enable_if&lt;std::is_same&lt;U, Message&gt;::value, <span class="keywordtype">bool</span>&gt;::type</div>
+<div class="foldopen" id="foldopen00256" data-start="{" data-end="}">
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"><a class="line" href="classtk_1_1_actor.html#a5c4f4f2f1b8011a37773617e34218c2d">  256</a></span>    <a class="code hl_function" href="classtk_1_1_actor.html#a5c4f4f2f1b8011a37773617e34218c2d">post</a>(uint32_t <span class="keywordtype">id</span>, uintptr_t arg = 0) {</div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno">  257</span>        <span class="keywordflow">return</span> <a class="code hl_function" href="classtk_1_1_actor.html#a224e6be4dca0d1500f2121e97bd0f92d">post</a>(<a class="code hl_struct" href="structtk_1_1_message.html">Message</a>{id, arg});</div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno">  258</span>    }</div>
+</div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno">  259</span></div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"><a class="line" href="classtk_1_1_actor.html#a60a2752360fa7185ec7776f2a6ef766a">  261</a></span>    <a class="code hl_struct" href="structtk_1_1_task_handle.html">TaskHandle</a> <a class="code hl_function" href="classtk_1_1_actor.html#a60a2752360fa7185ec7776f2a6ef766a">handle</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> handle_; }</div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno">  263</span><span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"><a class="line" href="classtk_1_1_actor.html#afb31ec0d50d1ac97e6a4ce148a96f78d">  270</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classtk_1_1_actor.html#afb31ec0d50d1ac97e6a4ce148a96f78d">on_start</a>() {}</div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno">  271</span></div>
+<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"><a class="line" href="classtk_1_1_actor.html#a1147554d6ddb64d822285ca5a03506a4">  280</a></span>    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classtk_1_1_actor.html#a1147554d6ddb64d822285ca5a03506a4">on_message</a>(<span class="keyword">const</span> MsgType&amp; msg) = 0;</div>
+<div class="line"><a id="l00281" name="l00281"></a><span class="lineno">  281</span> </div>
+<div class="line"><a id="l00282" name="l00282"></a><span class="lineno">  282</span><span class="keyword">private</span>:</div>
+<div class="line"><a id="l00283" name="l00283"></a><span class="lineno">  283</span>    <span class="keyword">static</span> <span class="keywordtype">void</span> task_entry(<span class="keywordtype">void</span>* arg) {</div>
+<div class="line"><a id="l00284" name="l00284"></a><span class="lineno">  284</span>        <span class="keyword">static_cast&lt;</span><a class="code hl_function" href="classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5">Actor&lt;MsgType, QueueSize&gt;</a>*<span class="keyword">&gt;</span>(arg)-&gt;event_loop();</div>
+<div class="line"><a id="l00285" name="l00285"></a><span class="lineno">  285</span>    }</div>
+<div class="line"><a id="l00286" name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a id="l00287" name="l00287"></a><span class="lineno">  287</span>    <span class="keywordtype">void</span> event_loop() {</div>
+<div class="line"><a id="l00288" name="l00288"></a><span class="lineno">  288</span>        <a class="code hl_function" href="classtk_1_1_actor.html#afb31ec0d50d1ac97e6a4ce148a96f78d">on_start</a>();</div>
+<div class="line"><a id="l00289" name="l00289"></a><span class="lineno">  289</span>        <span class="keywordflow">for</span> (;;) {</div>
+<div class="line"><a id="l00290" name="l00290"></a><span class="lineno">  290</span>            MsgType msg{};</div>
+<div class="line"><a id="l00291" name="l00291"></a><span class="lineno">  291</span>            uint32_t save = <a class="code hl_function" href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">detail::sched_lock</a>();</div>
+<div class="line"><a id="l00292" name="l00292"></a><span class="lineno">  292</span>            <span class="keywordflow">while</span> (count_ == 0) {</div>
+<div class="line"><a id="l00293" name="l00293"></a><span class="lineno">  293</span>                waiting_ = <span class="keyword">true</span>;</div>
+<div class="line"><a id="l00294" name="l00294"></a><span class="lineno">  294</span>                <a class="code hl_function" href="namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d">detail::block_current_task_locked</a>();</div>
+<div class="line"><a id="l00295" name="l00295"></a><span class="lineno">  295</span>                <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">detail::sched_unlock</a>(save);</div>
+<div class="line"><a id="l00296" name="l00296"></a><span class="lineno">  296</span>                <span class="comment">// コンテキストスイッチされ、他のタスクが走る。</span></div>
+<div class="line"><a id="l00297" name="l00297"></a><span class="lineno">  297</span>                <span class="comment">// wake_task_locked で起こされたらここに戻る。</span></div>
+<div class="line"><a id="l00298" name="l00298"></a><span class="lineno">  298</span>                save = <a class="code hl_function" href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">detail::sched_lock</a>();</div>
+<div class="line"><a id="l00299" name="l00299"></a><span class="lineno">  299</span>            }</div>
+<div class="line"><a id="l00300" name="l00300"></a><span class="lineno">  300</span>            msg = std::move(queue_[head_]);</div>
+<div class="line"><a id="l00301" name="l00301"></a><span class="lineno">  301</span>            head_ = (head_ + 1) % QueueSize;</div>
+<div class="line"><a id="l00302" name="l00302"></a><span class="lineno">  302</span>            count_--;</div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno">  303</span>            waiting_ = <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno">  304</span>            <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">detail::sched_unlock</a>(save);</div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno">  306</span>            <span class="comment">// メッセージディスパッチ(ロック解除状態で実行)</span></div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno">  307</span>            <a class="code hl_function" href="classtk_1_1_actor.html#a1147554d6ddb64d822285ca5a03506a4">on_message</a>(msg);</div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno">  308</span>        }</div>
+<div class="line"><a id="l00309" name="l00309"></a><span class="lineno">  309</span>    }</div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno">  311</span>    MsgType queue_[QueueSize]{};</div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno">  312</span>    <span class="keywordtype">size_t</span> head_{0};</div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno">  313</span>    <span class="keywordtype">size_t</span> tail_{0};</div>
+<div class="line"><a id="l00314" name="l00314"></a><span class="lineno">  314</span>    <span class="keywordtype">size_t</span> count_{0};</div>
+<div class="line"><a id="l00315" name="l00315"></a><span class="lineno">  315</span>    <span class="keywordtype">bool</span> waiting_{<span class="keyword">false</span>};</div>
+<div class="line"><a id="l00316" name="l00316"></a><span class="lineno">  316</span>    TaskHandle handle_{};</div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno">  317</span>};</div>
+</div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno">  319</span>}  <span class="comment">// namespace tk</span></div>
+</div>
+<div class="ttc" id="aclasstk_1_1_actor_html_a1147554d6ddb64d822285ca5a03506a4"><div class="ttname"><a href="classtk_1_1_actor.html#a1147554d6ddb64d822285ca5a03506a4">tk::Actor::on_message</a></div><div class="ttdeci">virtual void on_message(const MsgType &amp;msg)=0</div><div class="ttdoc">メッセージ受信時に呼ばれるハンドラ関数</div></div>
+<div class="ttc" id="aclasstk_1_1_actor_html_a224e6be4dca0d1500f2121e97bd0f92d"><div class="ttname"><a href="classtk_1_1_actor.html#a224e6be4dca0d1500f2121e97bd0f92d">tk::Actor::post</a></div><div class="ttdeci">bool post(const MsgType &amp;msg)</div><div class="ttdoc">この Actor のメッセージキューへ直接メッセージを送信します (コピー渡し)</div><div class="ttdef"><b>Definition</b> actor.hpp:207</div></div>
+<div class="ttc" id="aclasstk_1_1_actor_html_a5c4f4f2f1b8011a37773617e34218c2d"><div class="ttname"><a href="classtk_1_1_actor.html#a5c4f4f2f1b8011a37773617e34218c2d">tk::Actor::post</a></div><div class="ttdeci">std::enable_if&lt; std::is_same&lt; U, Message &gt;::value, bool &gt;::type post(uint32_t id, uintptr_t arg=0)</div><div class="ttdoc">tk::Message 型の場合のコンビニエンス送信関数</div><div class="ttdef"><b>Definition</b> actor.hpp:256</div></div>
+<div class="ttc" id="aclasstk_1_1_actor_html_a60a2752360fa7185ec7776f2a6ef766a"><div class="ttname"><a href="classtk_1_1_actor.html#a60a2752360fa7185ec7776f2a6ef766a">tk::Actor::handle</a></div><div class="ttdeci">TaskHandle handle() const</div><div class="ttdef"><b>Definition</b> actor.hpp:261</div></div>
+<div class="ttc" id="aclasstk_1_1_actor_html_a776aef8cdcfb4416ef976697eb518ed5"><div class="ttname"><a href="classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5">tk::Actor::Actor</a></div><div class="ttdeci">Actor()=default</div></div>
+<div class="ttc" id="aclasstk_1_1_actor_html_a863f28d824aaa78c75789166b1c2a010"><div class="ttname"><a href="classtk_1_1_actor.html#a863f28d824aaa78c75789166b1c2a010">tk::Actor::post</a></div><div class="ttdeci">bool post(MsgType &amp;&amp;msg)</div><div class="ttdoc">この Actor のメッセージキューへ直接メッセージを送信します (ムーブ渡し)</div><div class="ttdef"><b>Definition</b> actor.hpp:230</div></div>
+<div class="ttc" id="aclasstk_1_1_actor_html_abfc63a514a3ae7cdbdf9ceee81c3b0fc"><div class="ttname"><a href="classtk_1_1_actor.html#abfc63a514a3ae7cdbdf9ceee81c3b0fc">tk::Actor::~Actor</a></div><div class="ttdeci">virtual ~Actor()</div><div class="ttdef"><b>Definition</b> actor.hpp:179</div></div>
+<div class="ttc" id="aclasstk_1_1_actor_html_ac98ec3132f2ded910a6899b030c06f3f"><div class="ttname"><a href="classtk_1_1_actor.html#ac98ec3132f2ded910a6899b030c06f3f">tk::Actor::start</a></div><div class="ttdeci">bool start(uint32_t prio=PRIO_NORMAL)</div><div class="ttdoc">Actor をタスクとして生成し、EventHub へ自動登録します</div><div class="ttdef"><b>Definition</b> actor.hpp:191</div></div>
+<div class="ttc" id="aclasstk_1_1_actor_html_afb31ec0d50d1ac97e6a4ce148a96f78d"><div class="ttname"><a href="classtk_1_1_actor.html#afb31ec0d50d1ac97e6a4ce148a96f78d">tk::Actor::on_start</a></div><div class="ttdeci">virtual void on_start()</div><div class="ttdoc">タスク起動時、イベントループ突入直前に1度だけ呼ばれる初期化関数</div><div class="ttdef"><b>Definition</b> actor.hpp:270</div></div>
+<div class="ttc" id="aclasstk_1_1_event_hub_html"><div class="ttname"><a href="classtk_1_1_event_hub.html">tk::EventHub</a></div><div class="ttdoc">メッセージ型ごとの超軽量 Pub/Sub ディスパッチャ</div><div class="ttdef"><b>Definition</b> actor.hpp:29</div></div>
+<div class="ttc" id="aclasstk_1_1_event_hub_html_a09c779ce8c594ea44c831adfd7e287f8"><div class="ttname"><a href="classtk_1_1_event_hub.html#a09c779ce8c594ea44c831adfd7e287f8">tk::EventHub::unsubscribe</a></div><div class="ttdeci">static bool unsubscribe(void *actor)</div><div class="ttdoc">Actor の購読登録を解除します</div><div class="ttdef"><b>Definition</b> actor.hpp:67</div></div>
+<div class="ttc" id="aclasstk_1_1_event_hub_html_a3a59a641ad3fe121c0da7e1c81dc300b"><div class="ttname"><a href="classtk_1_1_event_hub.html#a3a59a641ad3fe121c0da7e1c81dc300b">tk::EventHub::publish</a></div><div class="ttdeci">static size_t publish(const MsgType &amp;msg)</div><div class="ttdoc">このメッセージ型を購読しているすべての Actor へ同報配信します</div><div class="ttdef"><b>Definition</b> actor.hpp:89</div></div>
+<div class="ttc" id="aclasstk_1_1_event_hub_html_a50ebe29eaa2657604a1c85bf5125d490"><div class="ttname"><a href="classtk_1_1_event_hub.html#a50ebe29eaa2657604a1c85bf5125d490">tk::EventHub::subscribe</a></div><div class="ttdeci">static bool subscribe(void *actor, bool(*post_fn)(void *, const MsgType &amp;))</div><div class="ttdoc">Actor をこのメッセージ型の購読者として登録します</div><div class="ttdef"><b>Definition</b> actor.hpp:45</div></div>
+<div class="ttc" id="aclasstk_1_1_event_hub_html_ac4cd6ce4e37b74385c7f4352a5516930"><div class="ttname"><a href="classtk_1_1_event_hub.html#ac4cd6ce4e37b74385c7f4352a5516930">tk::EventHub::subscriber_count</a></div><div class="ttdeci">static size_t subscriber_count()</div><div class="ttdef"><b>Definition</b> actor.hpp:111</div></div>
+<div class="ttc" id="akernel_8hpp_html"><div class="ttname"><a href="kernel_8hpp.html">kernel.hpp</a></div></div>
+<div class="ttc" id="anamespacetk_1_1detail_html_a400363f36b5fb5dfc8aec11334471d0d"><div class="ttname"><a href="namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d">tk::detail::block_current_task_locked</a></div><div class="ttdeci">void block_current_task_locked()</div><div class="ttdef"><b>Definition</b> scheduler.cpp:333</div></div>
+<div class="ttc" id="anamespacetk_1_1detail_html_a5b8fa6406a867edf8c4410fcb03c6523"><div class="ttname"><a href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">tk::detail::sched_lock</a></div><div class="ttdeci">uint32_t sched_lock()</div><div class="ttdef"><b>Definition</b> scheduler.cpp:325</div></div>
+<div class="ttc" id="anamespacetk_1_1detail_html_a80be9b2429346faf161eab01f595684b"><div class="ttname"><a href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">tk::detail::sched_unlock</a></div><div class="ttdeci">void sched_unlock(uint32_t save)</div><div class="ttdef"><b>Definition</b> scheduler.cpp:329</div></div>
+<div class="ttc" id="anamespacetk_1_1detail_html_ab19385598f18560cb574cc86174ececa"><div class="ttname"><a href="namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa">tk::detail::wake_task_locked</a></div><div class="ttdeci">void wake_task_locked(TaskHandle handle)</div><div class="ttdef"><b>Definition</b> scheduler.cpp:340</div></div>
+<div class="ttc" id="anamespacetk_html"><div class="ttname"><a href="namespacetk.html">tk</a></div><div class="ttdef"><b>Definition</b> actor.hpp:9</div></div>
+<div class="ttc" id="anamespacetk_html_a083495c9bf857a63f6c20a20aac0ca52"><div class="ttname"><a href="namespacetk.html#a083495c9bf857a63f6c20a20aac0ca52">tk::publish</a></div><div class="ttdeci">size_t publish(const MsgType &amp;msg)</div><div class="ttdoc">メッセージの型を指定して、購読しているすべての Actor へ同報配信します</div><div class="ttdef"><b>Definition</b> actor.hpp:135</div></div>
+<div class="ttc" id="anamespacetk_html_a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca"><div class="ttname"><a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">tk::PRIO_NORMAL</a></div><div class="ttdeci">@ PRIO_NORMAL</div><div class="ttdoc">通常優先度 (デフォルト)</div><div class="ttdef"><b>Definition</b> kernel.hpp:42</div></div>
+<div class="ttc" id="anamespacetk_html_a6e721332f5a7d85998345ed218de7394"><div class="ttname"><a href="namespacetk.html#a6e721332f5a7d85998345ed218de7394">tk::create</a></div><div class="ttdeci">TaskHandle create(TaskFn fn, void *arg=nullptr, uint32_t prio=PRIO_NORMAL)</div><div class="ttdoc">タスクを生成・登録します</div><div class="ttdef"><b>Definition</b> scheduler.cpp:204</div></div>
+<div class="ttc" id="astructtk_1_1_message_html"><div class="ttname"><a href="structtk_1_1_message.html">tk::Message</a></div><div class="ttdoc">デフォルトの軽量メッセージ構造体</div><div class="ttdef"><b>Definition</b> actor.hpp:14</div></div>
+<div class="ttc" id="astructtk_1_1_message_html_a570c5c394d2786708ce4830e4087aa9e"><div class="ttname"><a href="structtk_1_1_message.html#a570c5c394d2786708ce4830e4087aa9e">tk::Message::arg</a></div><div class="ttdeci">uintptr_t arg</div><div class="ttdoc">引数 (ポインタまたは整数値)</div><div class="ttdef"><b>Definition</b> actor.hpp:16</div></div>
+<div class="ttc" id="astructtk_1_1_message_html_a9a7de43cbf3da1821cf18ae924f94c52"><div class="ttname"><a href="structtk_1_1_message.html#a9a7de43cbf3da1821cf18ae924f94c52">tk::Message::id</a></div><div class="ttdeci">uint32_t id</div><div class="ttdoc">メッセージ識別子 / コマンドID</div><div class="ttdef"><b>Definition</b> actor.hpp:15</div></div>
+<div class="ttc" id="astructtk_1_1_task_handle_html"><div class="ttname"><a href="structtk_1_1_task_handle.html">tk::TaskHandle</a></div><div class="ttdoc">タスクの識別ハンドル</div><div class="ttdef"><b>Definition</b> kernel.hpp:49</div></div>
+</div><!-- fragment --></div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li><li class="navelem"><a href="dir_34ae86e414c9a960c5c39d1d6b15c7a8.html">include</a></li><li class="navelem"><a href="dir_91e9b2eecded889eb8782a5ba7843b6a.html">tinykernel</a></li><li class="navelem"><a href="actor_8hpp.html">actor.hpp</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 138 - 0
docs/html/annotated.html

@@ -0,0 +1,138 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Class List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('annotated.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">Class List</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span class="spacer">&#160;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacetk.html" target="_self">tk</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_" class="odd"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtk_1_1_actor.html" target="_self">Actor</a></td><td class="desc">メッセージ駆動型タスク (アクター) の基底クラス </td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtk_1_1_event_hub.html" target="_self">EventHub</a></td><td class="desc">メッセージ型ごとの超軽量 Pub/Sub ディスパッチャ </td></tr>
+<tr id="row_0_2_" class="odd"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtk_1_1_lock_guard.html" target="_self">LockGuard</a></td><td class="desc">ミューテックスのロックをスコープ単位で安全に管理する RAII クラス (std::lock_guard 相当) </td></tr>
+<tr id="row_0_3_" class="even"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtk_1_1_message.html" target="_self">Message</a></td><td class="desc">デフォルトの軽量メッセージ構造体 </td></tr>
+<tr id="row_0_4_" class="odd"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtk_1_1_mutex.html" target="_self">Mutex</a></td><td class="desc">所有権・優先度順ウェイクアップ・RAII 対応のミューテックス (排他ロック) </td></tr>
+<tr id="row_0_5_" class="even"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtk_1_1_preempt_guard.html" target="_self">PreemptGuard</a></td><td class="desc">プリエンプション禁止をスコープ単位で安全に管理する RAII クラス </td></tr>
+<tr id="row_0_6_" class="odd"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtk_1_1_semaphore.html" target="_self">Semaphore</a></td><td class="desc">計数セマフォ (Counting <a class="el" href="classtk_1_1_semaphore.html" title="計数セマフォ (Counting Semaphore) / バイナリセマフォ">Semaphore</a>) / バイナリセマフォ </td></tr>
+<tr id="row_0_7_" class="even"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtk_1_1_task_handle.html" target="_self">TaskHandle</a></td><td class="desc">タスクの識別ハンドル </td></tr>
+<tr id="row_1_" class="odd"><td class="entry"><span class="spacer">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fpu_ctx.html" target="_self">FpuCtx</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 14 - 0
docs/html/annotated_dup.js

@@ -0,0 +1,14 @@
+var annotated_dup =
+[
+    [ "tk", "namespacetk.html", [
+      [ "Actor", "classtk_1_1_actor.html", "classtk_1_1_actor" ],
+      [ "EventHub", "classtk_1_1_event_hub.html", null ],
+      [ "LockGuard", "classtk_1_1_lock_guard.html", "classtk_1_1_lock_guard" ],
+      [ "Message", "structtk_1_1_message.html", "structtk_1_1_message" ],
+      [ "Mutex", "classtk_1_1_mutex.html", "classtk_1_1_mutex" ],
+      [ "PreemptGuard", "classtk_1_1_preempt_guard.html", "classtk_1_1_preempt_guard" ],
+      [ "Semaphore", "classtk_1_1_semaphore.html", "classtk_1_1_semaphore" ],
+      [ "TaskHandle", "structtk_1_1_task_handle.html", "structtk_1_1_task_handle" ]
+    ] ],
+    [ "FpuCtx", "struct_fpu_ctx.html", "struct_fpu_ctx" ]
+];

+ 151 - 0
docs/html/classes.html

@@ -0,0 +1,151 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Class Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('classes.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">Class Index</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_A">A</a><div class="alphasepar"></div><a class="qindex" href="#letter_E">E</a><div class="alphasepar"></div><a class="qindex" href="#letter_F">F</a><div class="alphasepar"></div><a class="qindex" href="#letter_L">L</a><div class="alphasepar"></div><a class="qindex" href="#letter_M">M</a><div class="alphasepar"></div><a class="qindex" href="#letter_P">P</a><div class="alphasepar"></div><a class="qindex" href="#letter_S">S</a><div class="alphasepar"></div><a class="qindex" href="#letter_T">T</a></div>
+<div class="classindex">
+<dl class="classindex even">
+<dt class="alphachar"><a id="letter_A" name="letter_A">A</a></dt>
+<dd><a class="el" href="classtk_1_1_actor.html">Actor</a> (<a class="el" href="namespacetk.html">tk</a>)</dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a id="letter_E" name="letter_E">E</a></dt>
+<dd><a class="el" href="classtk_1_1_event_hub.html">EventHub</a> (<a class="el" href="namespacetk.html">tk</a>)</dd></dl>
+<dl class="classindex even">
+<dt class="alphachar"><a id="letter_F" name="letter_F">F</a></dt>
+<dd><a class="el" href="struct_fpu_ctx.html">FpuCtx</a></dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a id="letter_L" name="letter_L">L</a></dt>
+<dd><a class="el" href="classtk_1_1_lock_guard.html">LockGuard</a> (<a class="el" href="namespacetk.html">tk</a>)</dd></dl>
+<dl class="classindex even">
+<dt class="alphachar"><a id="letter_M" name="letter_M">M</a></dt>
+<dd><a class="el" href="structtk_1_1_message.html">Message</a> (<a class="el" href="namespacetk.html">tk</a>)</dd><dd><a class="el" href="classtk_1_1_mutex.html">Mutex</a> (<a class="el" href="namespacetk.html">tk</a>)</dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a id="letter_P" name="letter_P">P</a></dt>
+<dd><a class="el" href="classtk_1_1_preempt_guard.html">PreemptGuard</a> (<a class="el" href="namespacetk.html">tk</a>)</dd></dl>
+<dl class="classindex even">
+<dt class="alphachar"><a id="letter_S" name="letter_S">S</a></dt>
+<dd><a class="el" href="classtk_1_1_semaphore.html">Semaphore</a> (<a class="el" href="namespacetk.html">tk</a>)</dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a id="letter_T" name="letter_T">T</a></dt>
+<dd><a class="el" href="structtk_1_1_task_handle.html">TaskHandle</a> (<a class="el" href="namespacetk.html">tk</a>)</dd></dl>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 136 - 0
docs/html/classtk_1_1_actor-members.html

@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('classtk_1_1_actor.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk::Actor&lt; MsgType, QueueSize &gt; Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classtk_1_1_actor.html">tk::Actor&lt; MsgType, QueueSize &gt;</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5">Actor</a>()=default</td><td class="entry"><a class="el" href="classtk_1_1_actor.html">tk::Actor&lt; MsgType, QueueSize &gt;</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_actor.html#a60a2752360fa7185ec7776f2a6ef766a">handle</a>() const</td><td class="entry"><a class="el" href="classtk_1_1_actor.html">tk::Actor&lt; MsgType, QueueSize &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_actor.html#a1147554d6ddb64d822285ca5a03506a4">on_message</a>(const MsgType &amp;msg)=0</td><td class="entry"><a class="el" href="classtk_1_1_actor.html">tk::Actor&lt; MsgType, QueueSize &gt;</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_actor.html#afb31ec0d50d1ac97e6a4ce148a96f78d">on_start</a>()</td><td class="entry"><a class="el" href="classtk_1_1_actor.html">tk::Actor&lt; MsgType, QueueSize &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_actor.html#a224e6be4dca0d1500f2121e97bd0f92d">post</a>(const MsgType &amp;msg)</td><td class="entry"><a class="el" href="classtk_1_1_actor.html">tk::Actor&lt; MsgType, QueueSize &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_actor.html#a863f28d824aaa78c75789166b1c2a010">post</a>(MsgType &amp;&amp;msg)</td><td class="entry"><a class="el" href="classtk_1_1_actor.html">tk::Actor&lt; MsgType, QueueSize &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_actor.html#a5c4f4f2f1b8011a37773617e34218c2d">post</a>(uint32_t id, uintptr_t arg=0)</td><td class="entry"><a class="el" href="classtk_1_1_actor.html">tk::Actor&lt; MsgType, QueueSize &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_actor.html#ac98ec3132f2ded910a6899b030c06f3f">start</a>(uint32_t prio=PRIO_NORMAL)</td><td class="entry"><a class="el" href="classtk_1_1_actor.html">tk::Actor&lt; MsgType, QueueSize &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_actor.html#abfc63a514a3ae7cdbdf9ceee81c3b0fc">~Actor</a>()</td><td class="entry"><a class="el" href="classtk_1_1_actor.html">tk::Actor&lt; MsgType, QueueSize &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 491 - 0
docs/html/classtk_1_1_actor.html

@@ -0,0 +1,491 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: tk::Actor&lt; MsgType, QueueSize &gt; Class Template Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('classtk_1_1_actor.html','','classtk_1_1_actor-members'); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk::Actor&lt; MsgType, QueueSize &gt; Class Template Reference<span class="mlabels"><span class="mlabel abstract">abstract</span></span></div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>メッセージ駆動型タスク (アクター) の基底クラス  
+ <a href="#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="actor_8hpp_source.html">actor.hpp</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-pub-methods" class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a776aef8cdcfb4416ef976697eb518ed5" id="r_a776aef8cdcfb4416ef976697eb518ed5"><td class="memItemLeft">&#160;</td><td class="memItemRight"><a class="el" href="#a776aef8cdcfb4416ef976697eb518ed5">Actor</a> ()=default</td></tr>
+<tr class="memitem:abfc63a514a3ae7cdbdf9ceee81c3b0fc" id="r_abfc63a514a3ae7cdbdf9ceee81c3b0fc"><td class="memItemLeft">virtual&#160;</td><td class="memItemRight"><a class="el" href="#abfc63a514a3ae7cdbdf9ceee81c3b0fc">~Actor</a> ()</td></tr>
+<tr class="memitem:ac98ec3132f2ded910a6899b030c06f3f" id="r_ac98ec3132f2ded910a6899b030c06f3f"><td class="memItemLeft">bool&#160;</td><td class="memItemRight"><a class="el" href="#ac98ec3132f2ded910a6899b030c06f3f">start</a> (uint32_t prio=<a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">PRIO_NORMAL</a>)</td></tr>
+<tr class="memdesc:ac98ec3132f2ded910a6899b030c06f3f"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> をタスクとして生成し、EventHub へ自動登録します  <br /></td></tr>
+<tr class="memitem:a224e6be4dca0d1500f2121e97bd0f92d" id="r_a224e6be4dca0d1500f2121e97bd0f92d"><td class="memItemLeft">bool&#160;</td><td class="memItemRight"><a class="el" href="#a224e6be4dca0d1500f2121e97bd0f92d">post</a> (const MsgType &amp;msg)</td></tr>
+<tr class="memdesc:a224e6be4dca0d1500f2121e97bd0f92d"><td class="mdescLeft">&#160;</td><td class="mdescRight">この <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> のメッセージキューへ直接メッセージを送信します (コピー渡し)  <br /></td></tr>
+<tr class="memitem:a863f28d824aaa78c75789166b1c2a010" id="r_a863f28d824aaa78c75789166b1c2a010"><td class="memItemLeft">bool&#160;</td><td class="memItemRight"><a class="el" href="#a863f28d824aaa78c75789166b1c2a010">post</a> (MsgType &amp;&amp;msg)</td></tr>
+<tr class="memdesc:a863f28d824aaa78c75789166b1c2a010"><td class="mdescLeft">&#160;</td><td class="mdescRight">この <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> のメッセージキューへ直接メッセージを送信します (ムーブ渡し)  <br /></td></tr>
+<tr class="memitem:a5c4f4f2f1b8011a37773617e34218c2d" id="r_a5c4f4f2f1b8011a37773617e34218c2d"><td class="memTemplParams" colspan="2">template&lt;typename U = MsgType&gt; </td></tr>
+<tr class="memitem:a5c4f4f2f1b8011a37773617e34218c2d template"><td class="memItemLeft">std::enable_if&lt; std::is_same&lt; U, <a class="el" href="structtk_1_1_message.html">Message</a> &gt;::value, bool &gt;::type&#160;</td><td class="memItemRight"><a class="el" href="#a5c4f4f2f1b8011a37773617e34218c2d">post</a> (uint32_t id, uintptr_t arg=0)</td></tr>
+<tr class="memdesc:a5c4f4f2f1b8011a37773617e34218c2d"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structtk_1_1_message.html" title="デフォルトの軽量メッセージ構造体">tk::Message</a> 型の場合のコンビニエンス送信関数  <br /></td></tr>
+<tr class="memitem:a60a2752360fa7185ec7776f2a6ef766a" id="r_a60a2752360fa7185ec7776f2a6ef766a"><td class="memItemLeft"><a class="el" href="structtk_1_1_task_handle.html">TaskHandle</a>&#160;</td><td class="memItemRight"><a class="el" href="#a60a2752360fa7185ec7776f2a6ef766a">handle</a> () const</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-pro-methods" class="groupheader"><a id="pro-methods" name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:afb31ec0d50d1ac97e6a4ce148a96f78d" id="r_afb31ec0d50d1ac97e6a4ce148a96f78d"><td class="memItemLeft">virtual void&#160;</td><td class="memItemRight"><a class="el" href="#afb31ec0d50d1ac97e6a4ce148a96f78d">on_start</a> ()</td></tr>
+<tr class="memdesc:afb31ec0d50d1ac97e6a4ce148a96f78d"><td class="mdescLeft">&#160;</td><td class="mdescRight">タスク起動時、イベントループ突入直前に1度だけ呼ばれる初期化関数  <br /></td></tr>
+<tr class="memitem:a1147554d6ddb64d822285ca5a03506a4" id="r_a1147554d6ddb64d822285ca5a03506a4"><td class="memItemLeft">virtual void&#160;</td><td class="memItemRight"><a class="el" href="#a1147554d6ddb64d822285ca5a03506a4">on_message</a> (const MsgType &amp;msg)=0</td></tr>
+<tr class="memdesc:a1147554d6ddb64d822285ca5a03506a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">メッセージ受信時に呼ばれるハンドラ関数  <br /></td></tr>
+</table>
+<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
+<div class="textblock"><div class="compoundTemplParams">template&lt;typename MsgType = Message, size_t QueueSize = 8&gt;<br />
+class tk::Actor&lt; MsgType, QueueSize &gt;</div><p>メッセージ駆動型タスク (アクター) の基底クラス </p>
+<p>固定長リングバッファ付きのメッセージキューを持ち、メッセージ到着時に自動起床して <span class="tt"><a class="el" href="#a1147554d6ddb64d822285ca5a03506a4" title="メッセージ受信時に呼ばれるハンドラ関数">on_message()</a></span> を実行します。メッセージが無い時は CPU を消費せずブロック待機します。</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+  <table class="tparams">
+    <tr><td class="paramname">MsgType</td><td>受信するメッセージの型 (デフォルト: <a class="el" href="structtk_1_1_message.html" title="デフォルトの軽量メッセージ構造体">tk::Message</a>) </td></tr>
+    <tr><td class="paramname">QueueSize</td><td>メッセージキューの最大保持件数 (デフォルト: 8)</td></tr>
+  </table>
+  </dd>
+</dl>
+<div class="fragment"><div class="line"><span class="keyword">struct </span>SensorMsg { <span class="keywordtype">float</span> temp; };</div>
+<div class="line"> </div>
+<div class="line"><span class="keyword">class </span>SensorActor : <span class="keyword">public</span> <a class="code hl_class" href="classtk_1_1_actor.html">tk::Actor</a>&lt;SensorMsg, 8&gt; {</div>
+<div class="line"><span class="keyword">protected</span>:</div>
+<div class="line">    <span class="keywordtype">void</span> <a class="code hl_function" href="#afb31ec0d50d1ac97e6a4ce148a96f78d">on_start</a>()<span class="keyword"> override </span>{</div>
+<div class="line">        <span class="comment">// デバイスの初期化</span></div>
+<div class="line">    }</div>
+<div class="line">    <span class="keywordtype">void</span> <a class="code hl_function" href="#a1147554d6ddb64d822285ca5a03506a4">on_message</a>(<span class="keyword">const</span> SensorMsg&amp; msg)<span class="keyword"> override </span>{</div>
+<div class="line">        printf(<span class="stringliteral">&quot;Temp: %.1f\n&quot;</span>, msg.temp);</div>
+<div class="line">    }</div>
+<div class="line">};</div>
+<div class="ttc" id="aclasstk_1_1_actor_html"><div class="ttname"><a href="classtk_1_1_actor.html">tk::Actor</a></div><div class="ttdoc">メッセージ駆動型タスク (アクター) の基底クラス</div><div class="ttdef"><b>Definition</b> actor.hpp:174</div></div>
+<div class="ttc" id="aclasstk_1_1_actor_html_a1147554d6ddb64d822285ca5a03506a4"><div class="ttname"><a href="#a1147554d6ddb64d822285ca5a03506a4">tk::Actor::on_message</a></div><div class="ttdeci">virtual void on_message(const MsgType &amp;msg)=0</div><div class="ttdoc">メッセージ受信時に呼ばれるハンドラ関数</div></div>
+<div class="ttc" id="aclasstk_1_1_actor_html_afb31ec0d50d1ac97e6a4ce148a96f78d"><div class="ttname"><a href="#afb31ec0d50d1ac97e6a4ce148a96f78d">tk::Actor::on_start</a></div><div class="ttdeci">virtual void on_start()</div><div class="ttdoc">タスク起動時、イベントループ突入直前に1度だけ呼ばれる初期化関数</div><div class="ttdef"><b>Definition</b> actor.hpp:270</div></div>
+</div><!-- fragment --> </div><a name="doc-constructors" id="doc-constructors"></a><h2 id="header-doc-constructors" class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a776aef8cdcfb4416ef976697eb518ed5" name="a776aef8cdcfb4416ef976697eb518ed5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a776aef8cdcfb4416ef976697eb518ed5">&#9670;&#160;</a></span>Actor()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType = Message, size_t QueueSize = 8&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtk_1_1_actor.html">tk::Actor</a>&lt; MsgType, QueueSize &gt;::Actor </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel default">default</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abfc63a514a3ae7cdbdf9ceee81c3b0fc" name="abfc63a514a3ae7cdbdf9ceee81c3b0fc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfc63a514a3ae7cdbdf9ceee81c3b0fc">&#9670;&#160;</a></span>~Actor()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType = Message, size_t QueueSize = 8&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual <a class="el" href="classtk_1_1_actor.html">tk::Actor</a>&lt; MsgType, QueueSize &gt;::~<a class="el" href="#a776aef8cdcfb4416ef976697eb518ed5">Actor</a> </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel virtual">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Member Function Documentation</h2>
+<a id="a60a2752360fa7185ec7776f2a6ef766a" name="a60a2752360fa7185ec7776f2a6ef766a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a60a2752360fa7185ec7776f2a6ef766a">&#9670;&#160;</a></span>handle()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType = Message, size_t QueueSize = 8&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structtk_1_1_task_handle.html">TaskHandle</a> <a class="el" href="classtk_1_1_actor.html">tk::Actor</a>&lt; MsgType, QueueSize &gt;::handle </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>この <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> のタスクハンドルを取得 </p>
+
+</div>
+</div>
+<a id="a1147554d6ddb64d822285ca5a03506a4" name="a1147554d6ddb64d822285ca5a03506a4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1147554d6ddb64d822285ca5a03506a4">&#9670;&#160;</a></span>on_message()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType = Message, size_t QueueSize = 8&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void <a class="el" href="classtk_1_1_actor.html">tk::Actor</a>&lt; MsgType, QueueSize &gt;::on_message </td>
+          <td>(</td>
+          <td class="paramtype">const MsgType &amp;</td>          <td class="paramname"><span class="paramname"><em>msg</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel protected">protected</span><span class="mlabel pure-virtual">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>メッセージ受信時に呼ばれるハンドラ関数 </p>
+<p>キューから取り出されたメッセージの実体への参照が渡されます。 派生クラスで必ず実装します。</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">msg</td><td>受信したメッセージ </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="afb31ec0d50d1ac97e6a4ce148a96f78d" name="afb31ec0d50d1ac97e6a4ce148a96f78d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afb31ec0d50d1ac97e6a4ce148a96f78d">&#9670;&#160;</a></span>on_start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType = Message, size_t QueueSize = 8&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void <a class="el" href="classtk_1_1_actor.html">tk::Actor</a>&lt; MsgType, QueueSize &gt;::on_start </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel protected">protected</span><span class="mlabel virtual">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>タスク起動時、イベントループ突入直前に1度だけ呼ばれる初期化関数 </p>
+<p>タスクコンテキスト内で実行されるため、<span class="tt"><a class="el" href="namespacetk.html#aae83f84121085578a7568437a8dc2447" title="現在のタスクを指定時間スリープさせます">tk::sleep_ms()</a></span> を使った初期化ウェイトも安全に行えます。 必要に応じて派生クラスでオーバーライドします。 </p>
+
+</div>
+</div>
+<a id="a224e6be4dca0d1500f2121e97bd0f92d" name="a224e6be4dca0d1500f2121e97bd0f92d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a224e6be4dca0d1500f2121e97bd0f92d">&#9670;&#160;</a></span>post() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType = Message, size_t QueueSize = 8&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="classtk_1_1_actor.html">tk::Actor</a>&lt; MsgType, QueueSize &gt;::post </td>
+          <td>(</td>
+          <td class="paramtype">const MsgType &amp;</td>          <td class="paramname"><span class="paramname"><em>msg</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>この <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> のメッセージキューへ直接メッセージを送信します (コピー渡し) </p>
+<p>スレッドセーフ・割り込みセーフ・マルチコアセーフです。</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">msg</td><td>送信するメッセージ </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>true 送信成功, false キューが満杯 </dd></dl>
+
+</div>
+</div>
+<a id="a863f28d824aaa78c75789166b1c2a010" name="a863f28d824aaa78c75789166b1c2a010"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a863f28d824aaa78c75789166b1c2a010">&#9670;&#160;</a></span>post() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType = Message, size_t QueueSize = 8&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="classtk_1_1_actor.html">tk::Actor</a>&lt; MsgType, QueueSize &gt;::post </td>
+          <td>(</td>
+          <td class="paramtype">MsgType &amp;&amp;</td>          <td class="paramname"><span class="paramname"><em>msg</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>この <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> のメッセージキューへ直接メッセージを送信します (ムーブ渡し) </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">msg</td><td>送信するメッセージ (ムーブ) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>true 送信成功, false キューが満杯 </dd></dl>
+
+</div>
+</div>
+<a id="a5c4f4f2f1b8011a37773617e34218c2d" name="a5c4f4f2f1b8011a37773617e34218c2d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5c4f4f2f1b8011a37773617e34218c2d">&#9670;&#160;</a></span>post() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType = Message, size_t QueueSize = 8&gt; </div>
+<div class="memtemplate">
+template&lt;typename U = MsgType&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">std::enable_if&lt; std::is_same&lt; U, <a class="el" href="structtk_1_1_message.html">Message</a> &gt;::value, bool &gt;::type <a class="el" href="classtk_1_1_actor.html">tk::Actor</a>&lt; MsgType, QueueSize &gt;::post </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t</td>          <td class="paramname"><span class="paramname"><em>id</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uintptr_t</td>          <td class="paramname"><span class="paramname"><em>arg</em></span><span class="paramdefsep"> = </span><span class="paramdefval">0</span>&#160;)</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p><a class="el" href="structtk_1_1_message.html" title="デフォルトの軽量メッセージ構造体">tk::Message</a> 型の場合のコンビニエンス送信関数 </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">id</td><td>メッセージID </td></tr>
+    <tr><td class="paramname">arg</td><td>引数 (省略時: 0) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>true 送信成功, false キューが満杯 </dd></dl>
+
+</div>
+</div>
+<a id="ac98ec3132f2ded910a6899b030c06f3f" name="ac98ec3132f2ded910a6899b030c06f3f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac98ec3132f2ded910a6899b030c06f3f">&#9670;&#160;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType = Message, size_t QueueSize = 8&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="classtk_1_1_actor.html">tk::Actor</a>&lt; MsgType, QueueSize &gt;::start </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t</td>          <td class="paramname"><span class="paramname"><em>prio</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">PRIO_NORMAL</a></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p><a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> をタスクとして生成し、EventHub へ自動登録します </p>
+<p><span class="tt"><a class="el" href="namespacetk.html#a675f1829b87e2a43239b6f80a526d0ed" title="tinykernel スケジューラを起動します">tk::start()</a></span> を呼び出す前に登録する必要があります。</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">prio</td><td>タスク優先度 (省略時: <a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca" title="通常優先度 (デフォルト)">tk::PRIO_NORMAL</a>) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>true 登録成功, false 登録失敗 (タスク枠上限など) </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/<a class="el" href="actor_8hpp_source.html">actor.hpp</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="namespacetk.html">tk</a></li><li class="navelem"><a href="classtk_1_1_actor.html">Actor</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 12 - 0
docs/html/classtk_1_1_actor.js

@@ -0,0 +1,12 @@
+var classtk_1_1_actor =
+[
+    [ "Actor", "classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5", null ],
+    [ "~Actor", "classtk_1_1_actor.html#abfc63a514a3ae7cdbdf9ceee81c3b0fc", null ],
+    [ "handle", "classtk_1_1_actor.html#a60a2752360fa7185ec7776f2a6ef766a", null ],
+    [ "on_message", "classtk_1_1_actor.html#a1147554d6ddb64d822285ca5a03506a4", null ],
+    [ "on_start", "classtk_1_1_actor.html#afb31ec0d50d1ac97e6a4ce148a96f78d", null ],
+    [ "post", "classtk_1_1_actor.html#a224e6be4dca0d1500f2121e97bd0f92d", null ],
+    [ "post", "classtk_1_1_actor.html#a863f28d824aaa78c75789166b1c2a010", null ],
+    [ "post", "classtk_1_1_actor.html#a5c4f4f2f1b8011a37773617e34218c2d", null ],
+    [ "start", "classtk_1_1_actor.html#ac98ec3132f2ded910a6899b030c06f3f", null ]
+];

+ 131 - 0
docs/html/classtk_1_1_event_hub-members.html

@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('classtk_1_1_event_hub.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk::EventHub&lt; MsgType, MaxSubscribers &gt; Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classtk_1_1_event_hub.html">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_event_hub.html#a3a59a641ad3fe121c0da7e1c81dc300b">publish</a>(const MsgType &amp;msg)</td><td class="entry"><a class="el" href="classtk_1_1_event_hub.html">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_event_hub.html#a50ebe29eaa2657604a1c85bf5125d490">subscribe</a>(void *actor, bool(*post_fn)(void *, const MsgType &amp;))</td><td class="entry"><a class="el" href="classtk_1_1_event_hub.html">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_event_hub.html#ac4cd6ce4e37b74385c7f4352a5516930">subscriber_count</a>()</td><td class="entry"><a class="el" href="classtk_1_1_event_hub.html">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_event_hub.html#a09c779ce8c594ea44c831adfd7e287f8">unsubscribe</a>(void *actor)</td><td class="entry"><a class="el" href="classtk_1_1_event_hub.html">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 304 - 0
docs/html/classtk_1_1_event_hub.html

@@ -0,0 +1,304 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: tk::EventHub&lt; MsgType, MaxSubscribers &gt; Class Template Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('classtk_1_1_event_hub.html','','classtk_1_1_event_hub-members'); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk::EventHub&lt; MsgType, MaxSubscribers &gt; Class Template Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>メッセージ型ごとの超軽量 Pub/Sub ディスパッチャ  
+ <a href="#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="actor_8hpp_source.html">actor.hpp</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-pub-static-methods" class="groupheader"><a id="pub-static-methods" name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a50ebe29eaa2657604a1c85bf5125d490" id="r_a50ebe29eaa2657604a1c85bf5125d490"><td class="memItemLeft">static bool&#160;</td><td class="memItemRight"><a class="el" href="#a50ebe29eaa2657604a1c85bf5125d490">subscribe</a> (void *actor, bool(*post_fn)(void *, const MsgType &amp;))</td></tr>
+<tr class="memdesc:a50ebe29eaa2657604a1c85bf5125d490"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> をこのメッセージ型の購読者として登録します  <br /></td></tr>
+<tr class="memitem:a09c779ce8c594ea44c831adfd7e287f8" id="r_a09c779ce8c594ea44c831adfd7e287f8"><td class="memItemLeft">static bool&#160;</td><td class="memItemRight"><a class="el" href="#a09c779ce8c594ea44c831adfd7e287f8">unsubscribe</a> (void *actor)</td></tr>
+<tr class="memdesc:a09c779ce8c594ea44c831adfd7e287f8"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> の購読登録を解除します  <br /></td></tr>
+<tr class="memitem:a3a59a641ad3fe121c0da7e1c81dc300b" id="r_a3a59a641ad3fe121c0da7e1c81dc300b"><td class="memItemLeft">static size_t&#160;</td><td class="memItemRight"><a class="el" href="#a3a59a641ad3fe121c0da7e1c81dc300b">publish</a> (const MsgType &amp;msg)</td></tr>
+<tr class="memdesc:a3a59a641ad3fe121c0da7e1c81dc300b"><td class="mdescLeft">&#160;</td><td class="mdescRight">このメッセージ型を購読しているすべての <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> へ同報配信します  <br /></td></tr>
+<tr class="memitem:ac4cd6ce4e37b74385c7f4352a5516930" id="r_ac4cd6ce4e37b74385c7f4352a5516930"><td class="memItemLeft">static size_t&#160;</td><td class="memItemRight"><a class="el" href="#ac4cd6ce4e37b74385c7f4352a5516930">subscriber_count</a> ()</td></tr>
+</table>
+<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
+<div class="textblock"><div class="compoundTemplParams">template&lt;typename MsgType, size_t MaxSubscribers = 4&gt;<br />
+class tk::EventHub&lt; MsgType, MaxSubscribers &gt;</div><p>メッセージ型ごとの超軽量 Pub/Sub ディスパッチャ </p>
+<p>テンプレート引数 <span class="tt">MsgType</span> ごとにコンパイル時解決される静的レジストリです。 実行時の型検索オーバーヘッドゼロ、動的メモリ確保ゼロで動作します。</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+  <table class="tparams">
+    <tr><td class="paramname">MsgType</td><td>配信するメッセージの型 </td></tr>
+    <tr><td class="paramname">MaxSubscribers</td><td>同一メッセージ型を購読できる最大 <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> 数 (デフォルト: 4) </td></tr>
+  </table>
+  </dd>
+</dl>
+</div><a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Member Function Documentation</h2>
+<a id="a3a59a641ad3fe121c0da7e1c81dc300b" name="a3a59a641ad3fe121c0da7e1c81dc300b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3a59a641ad3fe121c0da7e1c81dc300b">&#9670;&#160;</a></span>publish()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType, size_t MaxSubscribers = 4&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t <a class="el" href="classtk_1_1_event_hub.html">tk::EventHub</a>&lt; MsgType, MaxSubscribers &gt;::publish </td>
+          <td>(</td>
+          <td class="paramtype">const MsgType &amp;</td>          <td class="paramname"><span class="paramname"><em>msg</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel static">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>このメッセージ型を購読しているすべての <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> へ同報配信します </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">msg</td><td>配信するメッセージ実体 (各 <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> のキューへ値コピー) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>size_t 配信に成功した <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> の数 </dd></dl>
+
+</div>
+</div>
+<a id="a50ebe29eaa2657604a1c85bf5125d490" name="a50ebe29eaa2657604a1c85bf5125d490"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a50ebe29eaa2657604a1c85bf5125d490">&#9670;&#160;</a></span>subscribe()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType, size_t MaxSubscribers = 4&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="classtk_1_1_event_hub.html">tk::EventHub</a>&lt; MsgType, MaxSubscribers &gt;::subscribe </td>
+          <td>(</td>
+          <td class="paramtype">void *</td>          <td class="paramname"><span class="paramname"><em>actor</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool(*</td>          <td class="paramname"><span class="paramname"><em>post_fn&#160;</em></span>)(void *, const MsgType &amp;)&#160;)</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel static">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p><a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> をこのメッセージ型の購読者として登録します </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">actor</td><td><a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> インスタンスポインタ </td></tr>
+    <tr><td class="paramname">post_fn</td><td>メッセージ投入関数ポインタ </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>true 登録成功, false 購読者上限に達した </dd></dl>
+
+</div>
+</div>
+<a id="ac4cd6ce4e37b74385c7f4352a5516930" name="ac4cd6ce4e37b74385c7f4352a5516930"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac4cd6ce4e37b74385c7f4352a5516930">&#9670;&#160;</a></span>subscriber_count()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType, size_t MaxSubscribers = 4&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t <a class="el" href="classtk_1_1_event_hub.html">tk::EventHub</a>&lt; MsgType, MaxSubscribers &gt;::subscriber_count </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel static">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>現在の購読者数を取得 </p>
+
+</div>
+</div>
+<a id="a09c779ce8c594ea44c831adfd7e287f8" name="a09c779ce8c594ea44c831adfd7e287f8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a09c779ce8c594ea44c831adfd7e287f8">&#9670;&#160;</a></span>unsubscribe()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType, size_t MaxSubscribers = 4&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool <a class="el" href="classtk_1_1_event_hub.html">tk::EventHub</a>&lt; MsgType, MaxSubscribers &gt;::unsubscribe </td>
+          <td>(</td>
+          <td class="paramtype">void *</td>          <td class="paramname"><span class="paramname"><em>actor</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel static">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p><a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> の購読登録を解除します </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">actor</td><td>解除する <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> インスタンスポインタ </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>true 解除成功, false 未登録 </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/<a class="el" href="actor_8hpp_source.html">actor.hpp</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="namespacetk.html">tk</a></li><li class="navelem"><a href="classtk_1_1_event_hub.html">EventHub</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 131 - 0
docs/html/classtk_1_1_lock_guard-members.html

@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('classtk_1_1_lock_guard.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk::LockGuard&lt; Lockable &gt; Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classtk_1_1_lock_guard.html">tk::LockGuard&lt; Lockable &gt;</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_lock_guard.html#a3a922c7edf84ce25ef67151c322bb0eb">LockGuard</a>(Lockable &amp;m)</td><td class="entry"><a class="el" href="classtk_1_1_lock_guard.html">tk::LockGuard&lt; Lockable &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_lock_guard.html#af9bc86bc2036c4b8e54633ddee811604">LockGuard</a>(const LockGuard &amp;)=delete</td><td class="entry"><a class="el" href="classtk_1_1_lock_guard.html">tk::LockGuard&lt; Lockable &gt;</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_lock_guard.html#a3f121f8aa1307f0f6e6e608cf138340c">operator=</a>(const LockGuard &amp;)=delete</td><td class="entry"><a class="el" href="classtk_1_1_lock_guard.html">tk::LockGuard&lt; Lockable &gt;</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_lock_guard.html#a52eeb50abee00bd0ed16cfa6618ce40f">~LockGuard</a>()</td><td class="entry"><a class="el" href="classtk_1_1_lock_guard.html">tk::LockGuard&lt; Lockable &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 278 - 0
docs/html/classtk_1_1_lock_guard.html

@@ -0,0 +1,278 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: tk::LockGuard&lt; Lockable &gt; Class Template Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('classtk_1_1_lock_guard.html','','classtk_1_1_lock_guard-members'); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk::LockGuard&lt; Lockable &gt; Class Template Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>ミューテックスのロックをスコープ単位で安全に管理する RAII クラス (std::lock_guard 相当)  
+ <a href="#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sync_8hpp_source.html">sync.hpp</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-pub-methods" class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a3a922c7edf84ce25ef67151c322bb0eb" id="r_a3a922c7edf84ce25ef67151c322bb0eb"><td class="memItemLeft">&#160;</td><td class="memItemRight"><a class="el" href="#a3a922c7edf84ce25ef67151c322bb0eb">LockGuard</a> (Lockable &amp;m)</td></tr>
+<tr class="memdesc:a3a922c7edf84ce25ef67151c322bb0eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">ロック対象を受け取り、即座に <a class="el" href="namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8" title="ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります">lock()</a> します  <br /></td></tr>
+<tr class="memitem:a52eeb50abee00bd0ed16cfa6618ce40f" id="r_a52eeb50abee00bd0ed16cfa6618ce40f"><td class="memItemLeft">&#160;</td><td class="memItemRight"><a class="el" href="#a52eeb50abee00bd0ed16cfa6618ce40f">~LockGuard</a> ()</td></tr>
+<tr class="memitem:af9bc86bc2036c4b8e54633ddee811604" id="r_af9bc86bc2036c4b8e54633ddee811604"><td class="memItemLeft">&#160;</td><td class="memItemRight"><a class="el" href="#af9bc86bc2036c4b8e54633ddee811604">LockGuard</a> (const LockGuard &amp;)=delete</td></tr>
+<tr class="memitem:a3f121f8aa1307f0f6e6e608cf138340c" id="r_a3f121f8aa1307f0f6e6e608cf138340c"><td class="memItemLeft"><a class="el" href="#a3a922c7edf84ce25ef67151c322bb0eb">LockGuard</a> &amp;&#160;</td><td class="memItemRight"><a class="el" href="#a3f121f8aa1307f0f6e6e608cf138340c">operator=</a> (const <a class="el" href="#a3a922c7edf84ce25ef67151c322bb0eb">LockGuard</a> &amp;)=delete</td></tr>
+</table>
+<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
+<div class="textblock"><div class="compoundTemplParams">template&lt;typename Lockable&gt;<br />
+class tk::LockGuard&lt; Lockable &gt;</div><p>ミューテックスのロックをスコープ単位で安全に管理する RAII クラス (std::lock_guard 相当) </p>
+<p>構築時に <span class="tt"><a class="el" href="namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8" title="ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります">lock()</a></span> を呼び、デストラクタで自動的に <span class="tt"><a class="el" href="namespacetk.html#a752b12f6862815c94a52347af52578b7" title="tk::lock() で入ったクリティカルセクションを抜けます">unlock()</a></span> を呼び出します。 途中で return や例外が発生しても確実にロックが解放されます。</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+  <table class="tparams">
+    <tr><td class="paramname">Lockable</td><td><a class="el" href="namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8" title="ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります">lock()</a> と <a class="el" href="namespacetk.html#a752b12f6862815c94a52347af52578b7" title="tk::lock() で入ったクリティカルセクションを抜けます">unlock()</a> を持つ型 (例: <a class="el" href="classtk_1_1_mutex.html" title="所有権・優先度順ウェイクアップ・RAII 対応のミューテックス (排他ロック)">tk::Mutex</a>) </td></tr>
+  </table>
+  </dd>
+</dl>
+</div><a name="doc-constructors" id="doc-constructors"></a><h2 id="header-doc-constructors" class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a3a922c7edf84ce25ef67151c322bb0eb" name="a3a922c7edf84ce25ef67151c322bb0eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3a922c7edf84ce25ef67151c322bb0eb">&#9670;&#160;</a></span>LockGuard() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Lockable&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtk_1_1_lock_guard.html">tk::LockGuard</a>&lt; Lockable &gt;::LockGuard </td>
+          <td>(</td>
+          <td class="paramtype">Lockable &amp;</td>          <td class="paramname"><span class="paramname"><em>m</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel explicit">explicit</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>ロック対象を受け取り、即座に <a class="el" href="namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8" title="ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります">lock()</a> します </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">m</td><td>ロック対象のミューテックス参照 </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a52eeb50abee00bd0ed16cfa6618ce40f" name="a52eeb50abee00bd0ed16cfa6618ce40f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a52eeb50abee00bd0ed16cfa6618ce40f">&#9670;&#160;</a></span>~LockGuard()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Lockable&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtk_1_1_lock_guard.html">tk::LockGuard</a>&lt; Lockable &gt;::~<a class="el" href="#a3a922c7edf84ce25ef67151c322bb0eb">LockGuard</a> </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>スコープ終了時に自動的に <a class="el" href="namespacetk.html#a752b12f6862815c94a52347af52578b7" title="tk::lock() で入ったクリティカルセクションを抜けます">unlock()</a> します </p>
+
+</div>
+</div>
+<a id="af9bc86bc2036c4b8e54633ddee811604" name="af9bc86bc2036c4b8e54633ddee811604"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af9bc86bc2036c4b8e54633ddee811604">&#9670;&#160;</a></span>LockGuard() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Lockable&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtk_1_1_lock_guard.html">tk::LockGuard</a>&lt; Lockable &gt;::LockGuard </td>
+          <td>(</td>
+          <td class="paramtype">const LockGuard&lt; Lockable &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel delete">delete</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Member Function Documentation</h2>
+<a id="a3f121f8aa1307f0f6e6e608cf138340c" name="a3f121f8aa1307f0f6e6e608cf138340c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f121f8aa1307f0f6e6e608cf138340c">&#9670;&#160;</a></span>operator=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Lockable&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="#a3a922c7edf84ce25ef67151c322bb0eb">LockGuard</a> &amp; <a class="el" href="classtk_1_1_lock_guard.html">tk::LockGuard</a>&lt; Lockable &gt;::operator= </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="#a3a922c7edf84ce25ef67151c322bb0eb">LockGuard</a>&lt; Lockable &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel delete">delete</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/<a class="el" href="sync_8hpp_source.html">sync.hpp</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="namespacetk.html">tk</a></li><li class="navelem"><a href="classtk_1_1_lock_guard.html">LockGuard</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 7 - 0
docs/html/classtk_1_1_lock_guard.js

@@ -0,0 +1,7 @@
+var classtk_1_1_lock_guard =
+[
+    [ "LockGuard", "classtk_1_1_lock_guard.html#a3a922c7edf84ce25ef67151c322bb0eb", null ],
+    [ "~LockGuard", "classtk_1_1_lock_guard.html#a52eeb50abee00bd0ed16cfa6618ce40f", null ],
+    [ "LockGuard", "classtk_1_1_lock_guard.html#af9bc86bc2036c4b8e54633ddee811604", null ],
+    [ "operator=", "classtk_1_1_lock_guard.html#a3f121f8aa1307f0f6e6e608cf138340c", null ]
+];

+ 132 - 0
docs/html/classtk_1_1_mutex-members.html

@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('classtk_1_1_mutex.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk::Mutex Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classtk_1_1_mutex.html">tk::Mutex</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_mutex.html#acf574e35540879481f1f6e5452a504ab">is_locked</a>() const</td><td class="entry"><a class="el" href="classtk_1_1_mutex.html">tk::Mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_mutex.html#a7f5645bba55df2db263f92a954802c27">lock</a>()</td><td class="entry"><a class="el" href="classtk_1_1_mutex.html">tk::Mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_mutex.html#a8b17431db60f4ab48a3859b2ca722eb1">Mutex</a>()=default</td><td class="entry"><a class="el" href="classtk_1_1_mutex.html">tk::Mutex</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_mutex.html#a666dd03fb22c5cb855e3145f76a58b9c">try_lock</a>()</td><td class="entry"><a class="el" href="classtk_1_1_mutex.html">tk::Mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_mutex.html#ae8d5dfd5655b5aa54d63db6e0cf2f707">unlock</a>()</td><td class="entry"><a class="el" href="classtk_1_1_mutex.html">tk::Mutex</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 303 - 0
docs/html/classtk_1_1_mutex.html

@@ -0,0 +1,303 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: tk::Mutex Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('classtk_1_1_mutex.html','','classtk_1_1_mutex-members'); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk::Mutex Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>所有権・優先度順ウェイクアップ・RAII 対応のミューテックス (排他ロック)  
+ <a href="#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sync_8hpp_source.html">sync.hpp</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-pub-methods" class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a8b17431db60f4ab48a3859b2ca722eb1" id="r_a8b17431db60f4ab48a3859b2ca722eb1"><td class="memItemLeft">&#160;</td><td class="memItemRight"><a class="el" href="#a8b17431db60f4ab48a3859b2ca722eb1">Mutex</a> ()=default</td></tr>
+<tr class="memitem:a7f5645bba55df2db263f92a954802c27" id="r_a7f5645bba55df2db263f92a954802c27"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a7f5645bba55df2db263f92a954802c27">lock</a> ()</td></tr>
+<tr class="memdesc:a7f5645bba55df2db263f92a954802c27"><td class="mdescLeft">&#160;</td><td class="mdescRight">ミューテックスをロックします (空くまでブロック待機)  <br /></td></tr>
+<tr class="memitem:a666dd03fb22c5cb855e3145f76a58b9c" id="r_a666dd03fb22c5cb855e3145f76a58b9c"><td class="memItemLeft">bool&#160;</td><td class="memItemRight"><a class="el" href="#a666dd03fb22c5cb855e3145f76a58b9c">try_lock</a> ()</td></tr>
+<tr class="memdesc:a666dd03fb22c5cb855e3145f76a58b9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">ミューテックスのロックを試みます (ノンブロッキング)  <br /></td></tr>
+<tr class="memitem:ae8d5dfd5655b5aa54d63db6e0cf2f707" id="r_ae8d5dfd5655b5aa54d63db6e0cf2f707"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#ae8d5dfd5655b5aa54d63db6e0cf2f707">unlock</a> ()</td></tr>
+<tr class="memdesc:ae8d5dfd5655b5aa54d63db6e0cf2f707"><td class="mdescLeft">&#160;</td><td class="mdescRight">ミューテックスのロックを解除します  <br /></td></tr>
+<tr class="memitem:acf574e35540879481f1f6e5452a504ab" id="r_acf574e35540879481f1f6e5452a504ab"><td class="memItemLeft">bool&#160;</td><td class="memItemRight"><a class="el" href="#acf574e35540879481f1f6e5452a504ab">is_locked</a> () const</td></tr>
+</table>
+<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>所有権・優先度順ウェイクアップ・RAII 対応のミューテックス (排他ロック) </p>
+<p>共有リソースやペリフェラルへの同時アクセスを防止します。 ロックしたタスク本人以外の誤った <span class="tt"><a class="el" href="#ae8d5dfd5655b5aa54d63db6e0cf2f707" title="ミューテックスのロックを解除します">unlock()</a></span> は安全に無視されます。 C++ の <span class="tt">BasicLockable</span> を満たしており、<span class="tt">std::lock_guard</span> や <span class="tt"><a class="el" href="classtk_1_1_lock_guard.html" title="ミューテックスのロックをスコープ単位で安全に管理する RAII クラス (std::lock_guard 相当)">tk::LockGuard</a></span> が利用可能です。</p>
+<div class="fragment"><div class="line"><a class="code hl_class" href="classtk_1_1_mutex.html">tk::Mutex</a> mtx;</div>
+<div class="line"> </div>
+<div class="line">{</div>
+<div class="line">    <a class="code hl_class" href="classtk_1_1_lock_guard.html">tk::LockGuard&lt;tk::Mutex&gt;</a> <a class="code hl_function" href="#a7f5645bba55df2db263f92a954802c27">lock</a>(mtx);</div>
+<div class="line">    <span class="comment">// クリティカルセクション...</span></div>
+<div class="line">} <span class="comment">// 自動でアンロック</span></div>
+<div class="ttc" id="aclasstk_1_1_lock_guard_html"><div class="ttname"><a href="classtk_1_1_lock_guard.html">tk::LockGuard</a></div><div class="ttdoc">ミューテックスのロックをスコープ単位で安全に管理する RAII クラス (std::lock_guard 相当)</div><div class="ttdef"><b>Definition</b> sync.hpp:211</div></div>
+<div class="ttc" id="aclasstk_1_1_mutex_html"><div class="ttname"><a href="classtk_1_1_mutex.html">tk::Mutex</a></div><div class="ttdoc">所有権・優先度順ウェイクアップ・RAII 対応のミューテックス (排他ロック)</div><div class="ttdef"><b>Definition</b> sync.hpp:123</div></div>
+<div class="ttc" id="aclasstk_1_1_mutex_html_a7f5645bba55df2db263f92a954802c27"><div class="ttname"><a href="#a7f5645bba55df2db263f92a954802c27">tk::Mutex::lock</a></div><div class="ttdeci">void lock()</div><div class="ttdoc">ミューテックスをロックします (空くまでブロック待機)</div><div class="ttdef"><b>Definition</b> sync.hpp:132</div></div>
+</div><!-- fragment --> </div><a name="doc-constructors" id="doc-constructors"></a><h2 id="header-doc-constructors" class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a8b17431db60f4ab48a3859b2ca722eb1" name="a8b17431db60f4ab48a3859b2ca722eb1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8b17431db60f4ab48a3859b2ca722eb1">&#9670;&#160;</a></span>Mutex()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">tk::Mutex::Mutex </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel default">default</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Member Function Documentation</h2>
+<a id="acf574e35540879481f1f6e5452a504ab" name="acf574e35540879481f1f6e5452a504ab"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acf574e35540879481f1f6e5452a504ab">&#9670;&#160;</a></span>is_locked()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tk::Mutex::is_locked </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>現在ロックされているかどうかを判定 </p>
+
+</div>
+</div>
+<a id="a7f5645bba55df2db263f92a954802c27" name="a7f5645bba55df2db263f92a954802c27"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f5645bba55df2db263f92a954802c27">&#9670;&#160;</a></span>lock()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::Mutex::lock </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>ミューテックスをロックします (空くまでブロック待機) </p>
+<p>他のタスクが保持している場合は、解放されるまで自タスクを <span class="tt">State::Blocked</span> にして休止します。 </p>
+
+</div>
+</div>
+<a id="a666dd03fb22c5cb855e3145f76a58b9c" name="a666dd03fb22c5cb855e3145f76a58b9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a666dd03fb22c5cb855e3145f76a58b9c">&#9670;&#160;</a></span>try_lock()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tk::Mutex::try_lock </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>ミューテックスのロックを試みます (ノンブロッキング) </p>
+<dl class="section return"><dt>Returns</dt><dd>true ロック獲得成功 </dd>
+<dd>
+false 他のタスクが保持しているため獲得失敗 (ブロックせず即座に復帰) </dd></dl>
+
+</div>
+</div>
+<a id="ae8d5dfd5655b5aa54d63db6e0cf2f707" name="ae8d5dfd5655b5aa54d63db6e0cf2f707"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae8d5dfd5655b5aa54d63db6e0cf2f707">&#9670;&#160;</a></span>unlock()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::Mutex::unlock </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>ミューテックスのロックを解除します </p>
+<p>ロックを保持しているタスク本人だけが解除できます。 待機中のタスクが存在する場合、最も優先度が高いタスクを 1 つ起床させます。 </p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/<a class="el" href="sync_8hpp_source.html">sync.hpp</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="namespacetk.html">tk</a></li><li class="navelem"><a href="classtk_1_1_mutex.html">Mutex</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 8 - 0
docs/html/classtk_1_1_mutex.js

@@ -0,0 +1,8 @@
+var classtk_1_1_mutex =
+[
+    [ "Mutex", "classtk_1_1_mutex.html#a8b17431db60f4ab48a3859b2ca722eb1", null ],
+    [ "is_locked", "classtk_1_1_mutex.html#acf574e35540879481f1f6e5452a504ab", null ],
+    [ "lock", "classtk_1_1_mutex.html#a7f5645bba55df2db263f92a954802c27", null ],
+    [ "try_lock", "classtk_1_1_mutex.html#a666dd03fb22c5cb855e3145f76a58b9c", null ],
+    [ "unlock", "classtk_1_1_mutex.html#ae8d5dfd5655b5aa54d63db6e0cf2f707", null ]
+];

+ 131 - 0
docs/html/classtk_1_1_preempt_guard-members.html

@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('classtk_1_1_preempt_guard.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk::PreemptGuard Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classtk_1_1_preempt_guard.html">tk::PreemptGuard</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417">operator=</a>(const PreemptGuard &amp;)=delete</td><td class="entry"><a class="el" href="classtk_1_1_preempt_guard.html">tk::PreemptGuard</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a>()</td><td class="entry"><a class="el" href="classtk_1_1_preempt_guard.html">tk::PreemptGuard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_preempt_guard.html#a360ac2b073064abc0f21db3127e7f389">PreemptGuard</a>(const PreemptGuard &amp;)=delete</td><td class="entry"><a class="el" href="classtk_1_1_preempt_guard.html">tk::PreemptGuard</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86">~PreemptGuard</a>()</td><td class="entry"><a class="el" href="classtk_1_1_preempt_guard.html">tk::PreemptGuard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 259 - 0
docs/html/classtk_1_1_preempt_guard.html

@@ -0,0 +1,259 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: tk::PreemptGuard Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('classtk_1_1_preempt_guard.html','','classtk_1_1_preempt_guard-members'); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk::PreemptGuard Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>プリエンプション禁止をスコープ単位で安全に管理する RAII クラス  
+ <a href="#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="kernel_8hpp_source.html">kernel.hpp</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-pub-methods" class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a39e396ce51420c942e7d6549ec63f88e" id="r_a39e396ce51420c942e7d6549ec63f88e"><td class="memItemLeft">&#160;</td><td class="memItemRight"><a class="el" href="#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a> ()</td></tr>
+<tr class="memitem:a329ea4d806861d9455168aeb01f41f86" id="r_a329ea4d806861d9455168aeb01f41f86"><td class="memItemLeft">&#160;</td><td class="memItemRight"><a class="el" href="#a329ea4d806861d9455168aeb01f41f86">~PreemptGuard</a> ()</td></tr>
+<tr class="memitem:a360ac2b073064abc0f21db3127e7f389" id="r_a360ac2b073064abc0f21db3127e7f389"><td class="memItemLeft">&#160;</td><td class="memItemRight"><a class="el" href="#a360ac2b073064abc0f21db3127e7f389">PreemptGuard</a> (const PreemptGuard &amp;)=delete</td></tr>
+<tr class="memitem:ad651c301bd81f95866e1cd380c2a2417" id="r_ad651c301bd81f95866e1cd380c2a2417"><td class="memItemLeft"><a class="el" href="#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a> &amp;&#160;</td><td class="memItemRight"><a class="el" href="#ad651c301bd81f95866e1cd380c2a2417">operator=</a> (const <a class="el" href="#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a> &amp;)=delete</td></tr>
+</table>
+<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>プリエンプション禁止をスコープ単位で安全に管理する RAII クラス </p>
+<p>生成時に自動で <span class="tt"><a class="el" href="namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe" title="自コアのタスクスイッチ (プリエンプション) を一時的に禁止します">tk::preempt_disable()</a></span> を呼び、スコープを抜けた際に自動で <span class="tt"><a class="el" href="namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9" title="自コアのタスクスイッチ (プリエンプション) を再開します">tk::preempt_enable()</a></span> を呼びます。</p>
+<div class="fragment"><div class="line">{</div>
+<div class="line">    <a class="code hl_class" href="classtk_1_1_preempt_guard.html">tk::PreemptGuard</a> guard;</div>
+<div class="line">    <span class="comment">// この区間はタスクスイッチが発生しない (I2C/SPI通信などに最適)</span></div>
+<div class="line">    i2c_write_blocking(...);</div>
+<div class="line">} <span class="comment">// 自動でタスクスイッチが再開</span></div>
+<div class="ttc" id="aclasstk_1_1_preempt_guard_html"><div class="ttname"><a href="classtk_1_1_preempt_guard.html">tk::PreemptGuard</a></div><div class="ttdoc">プリエンプション禁止をスコープ単位で安全に管理する RAII クラス</div><div class="ttdef"><b>Definition</b> kernel.hpp:156</div></div>
+</div><!-- fragment --> </div><a name="doc-constructors" id="doc-constructors"></a><h2 id="header-doc-constructors" class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a39e396ce51420c942e7d6549ec63f88e" name="a39e396ce51420c942e7d6549ec63f88e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a39e396ce51420c942e7d6549ec63f88e">&#9670;&#160;</a></span>PreemptGuard() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">tk::PreemptGuard::PreemptGuard </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a329ea4d806861d9455168aeb01f41f86" name="a329ea4d806861d9455168aeb01f41f86"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a329ea4d806861d9455168aeb01f41f86">&#9670;&#160;</a></span>~PreemptGuard()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">tk::PreemptGuard::~PreemptGuard </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a360ac2b073064abc0f21db3127e7f389" name="a360ac2b073064abc0f21db3127e7f389"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a360ac2b073064abc0f21db3127e7f389">&#9670;&#160;</a></span>PreemptGuard() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">tk::PreemptGuard::PreemptGuard </td>
+          <td>(</td>
+          <td class="paramtype">const PreemptGuard &amp;</td>          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel delete">delete</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Member Function Documentation</h2>
+<a id="ad651c301bd81f95866e1cd380c2a2417" name="ad651c301bd81f95866e1cd380c2a2417"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad651c301bd81f95866e1cd380c2a2417">&#9670;&#160;</a></span>operator=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a> &amp; tk::PreemptGuard::operator= </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a> &amp;</td>          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel delete">delete</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/<a class="el" href="kernel_8hpp_source.html">kernel.hpp</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="namespacetk.html">tk</a></li><li class="navelem"><a href="classtk_1_1_preempt_guard.html">PreemptGuard</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 7 - 0
docs/html/classtk_1_1_preempt_guard.js

@@ -0,0 +1,7 @@
+var classtk_1_1_preempt_guard =
+[
+    [ "PreemptGuard", "classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e", null ],
+    [ "~PreemptGuard", "classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86", null ],
+    [ "PreemptGuard", "classtk_1_1_preempt_guard.html#a360ac2b073064abc0f21db3127e7f389", null ],
+    [ "operator=", "classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417", null ]
+];

+ 132 - 0
docs/html/classtk_1_1_semaphore-members.html

@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('classtk_1_1_semaphore.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk::Semaphore Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classtk_1_1_semaphore.html">tk::Semaphore</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_semaphore.html#a863ccee07bc701a78342c14503955d73">acquire</a>()</td><td class="entry"><a class="el" href="classtk_1_1_semaphore.html">tk::Semaphore</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_semaphore.html#ae53b9c57cc25fafb242a21776f112701">count</a>() const</td><td class="entry"><a class="el" href="classtk_1_1_semaphore.html">tk::Semaphore</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_semaphore.html#a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b">release</a>()</td><td class="entry"><a class="el" href="classtk_1_1_semaphore.html">tk::Semaphore</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="classtk_1_1_semaphore.html#a66c5ac90338a6fcc6a9c2f22f1586de8">Semaphore</a>(int32_t initial_count=1, int32_t max_count=1)</td><td class="entry"><a class="el" href="classtk_1_1_semaphore.html">tk::Semaphore</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtk_1_1_semaphore.html#a3a246c8afc866dc438186d0a53cad5c2">try_acquire</a>()</td><td class="entry"><a class="el" href="classtk_1_1_semaphore.html">tk::Semaphore</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 315 - 0
docs/html/classtk_1_1_semaphore.html

@@ -0,0 +1,315 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: tk::Semaphore Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('classtk_1_1_semaphore.html','','classtk_1_1_semaphore-members'); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk::Semaphore Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>計数セマフォ (Counting <a class="el" href="classtk_1_1_semaphore.html" title="計数セマフォ (Counting Semaphore) / バイナリセマフォ">Semaphore</a>) / バイナリセマフォ  
+ <a href="#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="sync_8hpp_source.html">sync.hpp</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-pub-methods" class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a66c5ac90338a6fcc6a9c2f22f1586de8" id="r_a66c5ac90338a6fcc6a9c2f22f1586de8"><td class="memItemLeft">&#160;</td><td class="memItemRight"><a class="el" href="#a66c5ac90338a6fcc6a9c2f22f1586de8">Semaphore</a> (int32_t initial_count=1, int32_t max_count=1)</td></tr>
+<tr class="memdesc:a66c5ac90338a6fcc6a9c2f22f1586de8"><td class="mdescLeft">&#160;</td><td class="mdescRight">セマフォを初期化します  <br /></td></tr>
+<tr class="memitem:a863ccee07bc701a78342c14503955d73" id="r_a863ccee07bc701a78342c14503955d73"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a863ccee07bc701a78342c14503955d73">acquire</a> ()</td></tr>
+<tr class="memdesc:a863ccee07bc701a78342c14503955d73"><td class="mdescLeft">&#160;</td><td class="mdescRight">資源を獲得するまで現在のタスクをブロックします  <br /></td></tr>
+<tr class="memitem:a3a246c8afc866dc438186d0a53cad5c2" id="r_a3a246c8afc866dc438186d0a53cad5c2"><td class="memItemLeft">bool&#160;</td><td class="memItemRight"><a class="el" href="#a3a246c8afc866dc438186d0a53cad5c2">try_acquire</a> ()</td></tr>
+<tr class="memdesc:a3a246c8afc866dc438186d0a53cad5c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">資源の獲得を試みます (ノンブロッキング)  <br /></td></tr>
+<tr class="memitem:a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b" id="r_a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b">release</a> ()</td></tr>
+<tr class="memdesc:a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b"><td class="mdescLeft">&#160;</td><td class="mdescRight">資源を返却し、待機中タスクがあれば最優先度のタスクを 1 つ起床させます  <br /></td></tr>
+<tr class="memitem:ae53b9c57cc25fafb242a21776f112701" id="r_ae53b9c57cc25fafb242a21776f112701"><td class="memItemLeft">int32_t&#160;</td><td class="memItemRight"><a class="el" href="#ae53b9c57cc25fafb242a21776f112701">count</a> () const</td></tr>
+</table>
+<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>計数セマフォ (Counting <a class="el" href="classtk_1_1_semaphore.html" title="計数セマフォ (Counting Semaphore) / バイナリセマフォ">Semaphore</a>) / バイナリセマフォ </p>
+<p>資源の獲得・返却によるタスク間同期を行います。資源がない場合はタスクが <span class="tt">State::Blocked</span> に遷移して休止し、返却時に優先度の高いタスクから順に起床します。</p>
+<div class="fragment"><div class="line"><a class="code hl_class" href="classtk_1_1_semaphore.html">tk::Semaphore</a> sem(0, 5); <span class="comment">// 初期値0、最大5</span></div>
+<div class="line"> </div>
+<div class="line"><span class="comment">// タスク側 (資源が空くまでブロック待機)</span></div>
+<div class="line">sem.acquire();</div>
+<div class="line"> </div>
+<div class="line"><span class="comment">// シグナル送信側 (割り込みや他タスクから返却・通知)</span></div>
+<div class="line">sem.release();</div>
+<div class="ttc" id="aclasstk_1_1_semaphore_html"><div class="ttname"><a href="classtk_1_1_semaphore.html">tk::Semaphore</a></div><div class="ttdoc">計数セマフォ (Counting Semaphore) / バイナリセマフォ</div><div class="ttdef"><b>Definition</b> sync.hpp:24</div></div>
+</div><!-- fragment --> </div><a name="doc-constructors" id="doc-constructors"></a><h2 id="header-doc-constructors" class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a66c5ac90338a6fcc6a9c2f22f1586de8" name="a66c5ac90338a6fcc6a9c2f22f1586de8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a66c5ac90338a6fcc6a9c2f22f1586de8">&#9670;&#160;</a></span>Semaphore()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">tk::Semaphore::Semaphore </td>
+          <td>(</td>
+          <td class="paramtype">int32_t</td>          <td class="paramname"><span class="paramname"><em>initial_count</em></span><span class="paramdefsep"> = </span><span class="paramdefval">1</span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t</td>          <td class="paramname"><span class="paramname"><em>max_count</em></span><span class="paramdefsep"> = </span><span class="paramdefval">1</span>&#160;)</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel explicit">explicit</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>セマフォを初期化します </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">initial_count</td><td>初期資源カウント (省略時: 1) </td></tr>
+    <tr><td class="paramname">max_count</td><td>最大資源カウント (省略時: 1) </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Member Function Documentation</h2>
+<a id="a863ccee07bc701a78342c14503955d73" name="a863ccee07bc701a78342c14503955d73"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a863ccee07bc701a78342c14503955d73">&#9670;&#160;</a></span>acquire()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::Semaphore::acquire </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>資源を獲得するまで現在のタスクをブロックします </p>
+<p>資源カウントが 0 以下の場合はタスクが休止状態になり、CPU は他タスクへ譲渡されます (CPU消費ゼロ)。 </p>
+
+</div>
+</div>
+<a id="ae53b9c57cc25fafb242a21776f112701" name="ae53b9c57cc25fafb242a21776f112701"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae53b9c57cc25fafb242a21776f112701">&#9670;&#160;</a></span>count()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t tk::Semaphore::count </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+<p>現在の資源カウントを取得 </p>
+
+</div>
+</div>
+<a id="a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b" name="a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b">&#9670;&#160;</a></span>release()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::Semaphore::release </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>資源を返却し、待機中タスクがあれば最優先度のタスクを 1 つ起床させます </p>
+
+</div>
+</div>
+<a id="a3a246c8afc866dc438186d0a53cad5c2" name="a3a246c8afc866dc438186d0a53cad5c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3a246c8afc866dc438186d0a53cad5c2">&#9670;&#160;</a></span>try_acquire()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tk::Semaphore::try_acquire </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>資源の獲得を試みます (ノンブロッキング) </p>
+<dl class="section return"><dt>Returns</dt><dd>true 獲得成功 (カウントが 1 減算された) </dd>
+<dd>
+false 資源がないため獲得失敗 (ブロックせず即座に復帰) </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/<a class="el" href="sync_8hpp_source.html">sync.hpp</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="namespacetk.html">tk</a></li><li class="navelem"><a href="classtk_1_1_semaphore.html">Semaphore</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 8 - 0
docs/html/classtk_1_1_semaphore.js

@@ -0,0 +1,8 @@
+var classtk_1_1_semaphore =
+[
+    [ "Semaphore", "classtk_1_1_semaphore.html#a66c5ac90338a6fcc6a9c2f22f1586de8", null ],
+    [ "acquire", "classtk_1_1_semaphore.html#a863ccee07bc701a78342c14503955d73", null ],
+    [ "count", "classtk_1_1_semaphore.html#ae53b9c57cc25fafb242a21776f112701", null ],
+    [ "release", "classtk_1_1_semaphore.html#a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b", null ],
+    [ "try_acquire", "classtk_1_1_semaphore.html#a3a246c8afc866dc438186d0a53cad5c2", null ]
+];

+ 61 - 0
docs/html/clipboard.js

@@ -0,0 +1,61 @@
+/**
+
+The code below is based on the Doxygen Awesome project, see
+https://github.com/jothepro/doxygen-awesome-css
+
+MIT License
+
+Copyright (c) 2021 - 2022 jothepro
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+*/
+
+let clipboard_title = "Copy to clipboard"
+let clipboard_icon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="#888" d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>`
+let clipboard_successIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z"/></svg>`
+let clipboard_successDuration = 1000
+
+document.addEventListener('DOMContentLoaded', function() {
+  if(navigator.clipboard) {
+    const fragments = document.getElementsByClassName("fragment")
+    for(const fragment of fragments) {
+      const clipboard_div = document.createElement("div")
+      clipboard_div.classList.add("clipboard")
+      clipboard_div.innerHTML = clipboard_icon
+      clipboard_div.title = clipboard_title
+      clipboard_div.addEventListener('click', function() {
+        const content = this.parentNode.cloneNode(true)
+        // filter out line number and folded fragments from file listings
+        content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() })
+        let text = content.textContent
+        // remove trailing newlines and trailing spaces from empty lines
+        text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'')
+        navigator.clipboard.writeText(text);
+        this.classList.add("success")
+        this.innerHTML = clipboard_successIcon
+        window.setTimeout(() => { // switch back to normal icon after timeout
+            this.classList.remove("success")
+            this.innerHTML = clipboard_icon
+        }, clipboard_successDuration);
+      })
+      fragment.insertBefore(clipboard_div, fragment.firstChild)
+    }
+  }
+})

+ 143 - 0
docs/html/codefolding.js

@@ -0,0 +1,143 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2026 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+ */
+
+let codefold = {
+  opened : true,
+
+  show_plus : function(el) {
+    if (el) {
+      el.classList.remove('minus');
+      el.classList.add('plus');
+    }
+  },
+
+  show_minus : function(el) {
+    if (el) {
+      el.classList.add('minus');
+      el.classList.remove('plus');
+    }
+  },
+
+  // toggle all folding blocks
+  toggle_all : function() {
+    if (this.opened) {
+      const foldAll = document.getElementById('fold_all');
+      this.show_plus(foldAll);
+      document.querySelectorAll('div[id^=foldopen]').forEach(el => el.style.display = 'none');
+      document.querySelectorAll('div[id^=foldclosed]').forEach(el => el.style.display = '');
+      document.querySelectorAll('div[id^=foldclosed] span.fold').forEach(el => this.show_plus(el));
+    } else {
+      const foldAll = document.getElementById('fold_all');
+      this.show_minus(foldAll);
+      document.querySelectorAll('div[id^=foldopen]').forEach(el => el.style.display = '');
+      document.querySelectorAll('div[id^=foldclosed]').forEach(el => el.style.display = 'none');
+    }
+    this.opened=!this.opened;
+  },
+
+  // toggle single folding block
+  toggle : function(id) {
+    const openEl = document.getElementById('foldopen'+id);
+    const closedEl = document.getElementById('foldclosed'+id);
+    if (openEl) {
+      openEl.style.display = openEl.style.display === 'none' ? '' : 'none';
+      const nextEl = openEl.nextElementSibling;
+      if (nextEl) {
+        nextEl.querySelectorAll('span.fold').forEach(el => this.show_plus(el));
+      }
+    }
+    if (closedEl) {
+      closedEl.style.display = closedEl.style.display === 'none' ? '' : 'none';
+    }
+  },
+
+  init : function() {
+    // add code folding line and global control
+    document.querySelectorAll('span.lineno').forEach((el, index) => {
+      el.style.paddingRight = '4px';
+      el.style.marginRight = '2px';
+      el.style.display = 'inline-block';
+      el.style.width = '54px';
+      el.style.background = 'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%';
+      const span = document.createElement('span');
+      if (index === 0) { // add global toggle to first line
+        span.className = 'fold minus';
+        span.id = 'fold_all';
+        span.onclick = () => codefold.toggle_all();
+      } else {  // add vertical lines to other rows
+        span.className = 'fold'
+      }
+      el.appendChild(span);
+    });
+    // add toggle controls to lines with fold divs
+    document.querySelectorAll('div.foldopen').forEach(el => {
+      // extract specific id to use
+      const id = el.getAttribute('id').replace('foldopen','');
+      // extract start and end foldable fragment attributes
+      const start = el.getAttribute('data-start');
+      const end = el.getAttribute('data-end');
+      // replace normal fold span with controls for the first line of a foldable fragment
+      const firstFold = el.querySelector('span.fold');
+      if (firstFold) {
+        const span = document.createElement('span');
+        span.className = 'fold minus';
+        span.onclick = () => codefold.toggle(id);
+        firstFold.replaceWith(span);
+      }
+      // append div for folded (closed) representation
+      const closedDiv = document.createElement('div');
+      closedDiv.id = 'foldclosed'+id;
+      closedDiv.className = 'foldclosed';
+      closedDiv.style.display = 'none';
+      el.after(closedDiv);
+      // extract the first line from the "open" section to represent closed content
+      const line = el.children[0] ? el.children[0].cloneNode(true) : null;
+      if (line) {
+        // remove any glow that might still be active on the original line
+        line.classList.remove('glow');
+        if (start) {
+          // if line already ends with a start marker (e.g. trailing {), remove it
+          line.innerHTML = line.innerHTML.replace(new RegExp('\\s*'+start+'\\s*$','g'),'');
+        }
+        // replace minus with plus symbol
+        line.querySelectorAll('span.fold').forEach(span => {
+          codefold.show_plus(span);
+          // re-apply click handler as it is not copied with cloneNode
+          span.onclick = () => codefold.toggle(id);
+        });
+        // append ellipsis
+        const ellipsisLink = document.createElement('a');
+        ellipsisLink.href = "javascript:codefold.toggle('"+id+"')";
+        ellipsisLink.innerHTML = '&#8230;';
+        line.appendChild(document.createTextNode(' '+start));
+        line.appendChild(ellipsisLink);
+        line.appendChild(document.createTextNode(end));
+        // insert constructed line into closed div
+        closedDiv.appendChild(line);
+      }
+    });
+  },
+};
+/* @license-end */

+ 58 - 0
docs/html/cookie.js

@@ -0,0 +1,58 @@
+/*!
+ Cookie helper functions
+ Copyright (c) 2023 Dimitri van Heesch
+ Released under MIT license.
+*/
+let Cookie = {
+  cookie_namespace: 'doxygen_',
+
+  readSetting(cookie,defVal) {
+    if (window.chrome) {
+      const val = localStorage.getItem(this.cookie_namespace+cookie) ||
+                  sessionStorage.getItem(this.cookie_namespace+cookie);
+      if (val) return val;
+    } else {
+      let myCookie = this.cookie_namespace+cookie+"=";
+      if (document.cookie) {
+        const index = document.cookie.indexOf(myCookie);
+        if (index != -1) {
+          const valStart = index + myCookie.length;
+          let valEnd = document.cookie.indexOf(";", valStart);
+          if (valEnd == -1) {
+            valEnd = document.cookie.length;
+          }
+          return document.cookie.substring(valStart, valEnd);
+        }
+      }
+    }
+    return defVal;
+  },
+
+  writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete
+    if (window.chrome) {
+      if (days==0) {
+        sessionStorage.setItem(this.cookie_namespace+cookie,val);
+      } else {
+        localStorage.setItem(this.cookie_namespace+cookie,val);
+      }
+    } else {
+      let date = new Date();
+      date.setTime(date.getTime()+(days*24*60*60*1000));
+      const expiration = days!=0 ? "expires="+date.toGMTString()+";" : "";
+      document.cookie = this.cookie_namespace + cookie + "=" +
+                        val + "; SameSite=Lax;" + expiration + "path=/";
+    }
+  },
+
+  eraseSetting(cookie) {
+    if (window.chrome) {
+      if (localStorage.getItem(this.cookie_namespace+cookie)) {
+        localStorage.removeItem(this.cookie_namespace+cookie);
+      } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) {
+        sessionStorage.removeItem(this.cookie_namespace+cookie);
+      }
+    } else {
+      this.writeSetting(cookie,'',-1);
+    }
+  },
+}

+ 137 - 0
docs/html/dir_01f710e8c634e538c6d9f00c5eaf4f2e.html

@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('dir_01f710e8c634e538c6d9f00c5eaf4f2e.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tinykernel Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:tinykernel" id="r_tinykernel"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 4 - 0
docs/html/dir_01f710e8c634e538c6d9f00c5eaf4f2e.js

@@ -0,0 +1,4 @@
+var dir_01f710e8c634e538c6d9f00c5eaf4f2e =
+[
+    [ "tinykernel", "dir_065670814960ad9cf60e14e38242ec92.html", "dir_065670814960ad9cf60e14e38242ec92" ]
+];

+ 138 - 0
docs/html/dir_065670814960ad9cf60e14e38242ec92.html

@@ -0,0 +1,138 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('dir_065670814960ad9cf60e14e38242ec92.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tinykernel Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:include" id="r_include"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_34ae86e414c9a960c5c39d1d6b15c7a8.html">include</a></td></tr>
+<tr class="memitem:src" id="r_src"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_57f08cdb50348f663244f527066db34a.html">src</a></td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 5 - 0
docs/html/dir_065670814960ad9cf60e14e38242ec92.js

@@ -0,0 +1,5 @@
+var dir_065670814960ad9cf60e14e38242ec92 =
+[
+    [ "include", "dir_34ae86e414c9a960c5c39d1d6b15c7a8.html", "dir_34ae86e414c9a960c5c39d1d6b15c7a8" ],
+    [ "src", "dir_57f08cdb50348f663244f527066db34a.html", "dir_57f08cdb50348f663244f527066db34a" ]
+];

+ 137 - 0
docs/html/dir_34ae86e414c9a960c5c39d1d6b15c7a8.html

@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('dir_34ae86e414c9a960c5c39d1d6b15c7a8.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">include Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:tinykernel" id="r_tinykernel"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_91e9b2eecded889eb8782a5ba7843b6a.html">tinykernel</a></td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li><li class="navelem"><a href="dir_34ae86e414c9a960c5c39d1d6b15c7a8.html">include</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 4 - 0
docs/html/dir_34ae86e414c9a960c5c39d1d6b15c7a8.js

@@ -0,0 +1,4 @@
+var dir_34ae86e414c9a960c5c39d1d6b15c7a8 =
+[
+    [ "tinykernel", "dir_91e9b2eecded889eb8782a5ba7843b6a.html", "dir_91e9b2eecded889eb8782a5ba7843b6a" ]
+];

+ 141 - 0
docs/html/dir_57f08cdb50348f663244f527066db34a.html

@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('dir_57f08cdb50348f663244f527066db34a.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">src Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:port" id="r_port"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_5c27857cec97849c25650021b743744e.html">port</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-files" class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:scheduler_2Ecpp" id="r_scheduler_2Ecpp"><td class="memItemLeft"><span class="icondoc"><div class="doc-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="scheduler_8cpp.html">scheduler.cpp</a></td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li><li class="navelem"><a href="dir_57f08cdb50348f663244f527066db34a.html">src</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 5 - 0
docs/html/dir_57f08cdb50348f663244f527066db34a.js

@@ -0,0 +1,5 @@
+var dir_57f08cdb50348f663244f527066db34a =
+[
+    [ "port", "dir_5c27857cec97849c25650021b743744e.html", "dir_5c27857cec97849c25650021b743744e" ],
+    [ "scheduler.cpp", "scheduler_8cpp.html", "scheduler_8cpp" ]
+];

+ 137 - 0
docs/html/dir_5c27857cec97849c25650021b743744e.html

@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('dir_5c27857cec97849c25650021b743744e.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">port Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:m33" id="r_m33"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_6d4b68ea9176da934383ead6eaf0491a.html">m33</a></td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li><li class="navelem"><a href="dir_57f08cdb50348f663244f527066db34a.html">src</a></li><li class="navelem"><a href="dir_5c27857cec97849c25650021b743744e.html">port</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 4 - 0
docs/html/dir_5c27857cec97849c25650021b743744e.js

@@ -0,0 +1,4 @@
+var dir_5c27857cec97849c25650021b743744e =
+[
+    [ "m33", "dir_6d4b68ea9176da934383ead6eaf0491a.html", "dir_6d4b68ea9176da934383ead6eaf0491a" ]
+];

+ 138 - 0
docs/html/dir_6d4b68ea9176da934383ead6eaf0491a.html

@@ -0,0 +1,138 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port/m33 Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('dir_6d4b68ea9176da934383ead6eaf0491a.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">m33 Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-files" class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:port_5Fm33_2Ec" id="r_port_5Fm33_2Ec"><td class="memItemLeft"><span class="icondoc"><div class="doc-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="port__m33_8c.html">port_m33.c</a></td></tr>
+<tr class="memitem:port_5Fm33_2Eh" id="r_port_5Fm33_2Eh"><td class="memItemLeft"><a href="port__m33_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight"><a class="el" href="port__m33_8h.html">port_m33.h</a></td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li><li class="navelem"><a href="dir_57f08cdb50348f663244f527066db34a.html">src</a></li><li class="navelem"><a href="dir_5c27857cec97849c25650021b743744e.html">port</a></li><li class="navelem"><a href="dir_6d4b68ea9176da934383ead6eaf0491a.html">m33</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 5 - 0
docs/html/dir_6d4b68ea9176da934383ead6eaf0491a.js

@@ -0,0 +1,5 @@
+var dir_6d4b68ea9176da934383ead6eaf0491a =
+[
+    [ "port_m33.c", "port__m33_8c.html", "port__m33_8c" ],
+    [ "port_m33.h", "port__m33_8h.html", "port__m33_8h" ]
+];

+ 139 - 0
docs/html/dir_91e9b2eecded889eb8782a5ba7843b6a.html

@@ -0,0 +1,139 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('dir_91e9b2eecded889eb8782a5ba7843b6a.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tinykernel Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-files" class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:actor_2Ehpp" id="r_actor_2Ehpp"><td class="memItemLeft"><a href="actor_8hpp_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight"><a class="el" href="actor_8hpp.html">actor.hpp</a></td></tr>
+<tr class="memitem:kernel_2Ehpp" id="r_kernel_2Ehpp"><td class="memItemLeft"><a href="kernel_8hpp_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight"><a class="el" href="kernel_8hpp.html">kernel.hpp</a></td></tr>
+<tr class="memitem:sync_2Ehpp" id="r_sync_2Ehpp"><td class="memItemLeft"><a href="sync_8hpp_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a>&#160;</td><td class="memItemRight"><a class="el" href="sync_8hpp.html">sync.hpp</a></td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li><li class="navelem"><a href="dir_34ae86e414c9a960c5c39d1d6b15c7a8.html">include</a></li><li class="navelem"><a href="dir_91e9b2eecded889eb8782a5ba7843b6a.html">tinykernel</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 6 - 0
docs/html/dir_91e9b2eecded889eb8782a5ba7843b6a.js

@@ -0,0 +1,6 @@
+var dir_91e9b2eecded889eb8782a5ba7843b6a =
+[
+    [ "actor.hpp", "actor_8hpp.html", "actor_8hpp" ],
+    [ "kernel.hpp", "kernel_8hpp.html", "kernel_8hpp" ],
+    [ "sync.hpp", "sync_8hpp.html", "sync_8hpp" ]
+];

+ 137 - 0
docs/html/dir_9b10c2ff4e034627dc7271865b055c64.html

@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('dir_9b10c2ff4e034627dc7271865b055c64.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">Pico_Projects Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:tinykernel" id="r_tinykernel"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 4 - 0
docs/html/dir_9b10c2ff4e034627dc7271865b055c64.js

@@ -0,0 +1,4 @@
+var dir_9b10c2ff4e034627dc7271865b055c64 =
+[
+    [ "tinykernel", "dir_01f710e8c634e538c6d9f00c5eaf4f2e.html", "dir_01f710e8c634e538c6d9f00c5eaf4f2e" ]
+];

+ 2607 - 0
docs/html/doxygen.css

@@ -0,0 +1,2607 @@
+/* The standard CSS for doxygen 1.18.0*/
+
+html {
+/* page base colors */
+--page-background-color: white;
+--page-foreground-color: black;
+--page-link-color: #3D578C;
+--page-visited-link-color: #3D578C;
+--page-external-link-color: #334975;
+
+/* index */
+--index-odd-item-bg-color: #F8F9FC;
+--index-even-item-bg-color: white;
+--index-header-color: black;
+--index-separator-color: #A0A0A0;
+
+/* header */
+--header-background-color: #F9FAFC;
+--header-separator-color: #C4CFE5;
+--group-header-separator-color: #D9E0EE;
+--group-header-color: #354C7B;
+
+--footer-foreground-color: #2A3D61;
+--footer-logo-width: 75px;
+--citation-label-color: #334975;
+--glow-color: cyan;
+
+--title-background-color: white;
+--title-separator-color: #C4CFE5;
+
+--blockquote-background-color: #F7F8FB;
+--blockquote-border-color: #9CAFD4;
+
+--scrollbar-thumb-color: #C4CFE5;
+--scrollbar-background-color: #F9FAFC;
+
+--icon-background-color: #728DC1;
+--icon-foreground-color: white;
+--icon-folder-open-fill-color: #C4CFE5;
+--icon-folder-fill-color: #D8DFEE;
+--icon-folder-border-color: #4665A2;
+--icon-doc-fill-color: #D8DFEE;
+--icon-doc-border-color: #4665A2;
+
+/* brief member declaration list */
+--memdecl-background-color: #F9FAFC;
+--memdecl-foreground-color: #555;
+--memdecl-template-color: #4665A2;
+--memdecl-border-color: #D5DDEC;
+
+/* detailed member list */
+--memdef-border-color: #A8B8D9;
+--memdef-title-background-color: #E2E8F2;
+--memdef-proto-background-color: #EEF1F7;
+--memdef-proto-text-color: #253555;
+--memdef-param-name-color: #602020;
+--memdef-template-color: #4665A2;
+
+/* tables */
+--table-cell-border-color: #2D4068;
+--table-header-background-color: #374F7F;
+--table-header-foreground-color: #FFFFFF;
+
+/* labels */
+--label-background-color: #728DC1;
+--label-left-top-border-color: #5373B4;
+--label-right-bottom-border-color: #C4CFE5;
+--label-foreground-color: white;
+
+/** navigation bar/tree/menu */
+--nav-background-color: #F9FAFC;
+--nav-foreground-color: #364D7C;
+--nav-border-color: #C4CFE5;
+--nav-breadcrumb-separator-color: #C4CFE5;
+--nav-breadcrumb-active-bg: #EEF1F7;
+--nav-breadcrumb-color: #354C7B;
+--nav-splitbar-bg-color: #DCE2EF;
+--nav-splitbar-handle-color: #9CAFD4;
+--nav-font-size-level1: 13px;
+--nav-font-size-level2: 10px;
+--nav-font-size-level3: 9px;
+--nav-text-normal-color: #283A5D;
+--nav-menu-button-color: #364D7C;
+--nav-menu-background-color: white;
+--nav-menu-foreground-color: #555555;
+--nav-menu-active-bg: #DCE2EF;
+--nav-menu-active-color: #9CAFD4;
+--nav-arrow-color: #B6C4DF;
+--nav-arrow-selected-color: #90A5CE;
+
+/* sync icon */
+--sync-icon-border-color: #C4CFE5;
+--sync-icon-background-color: #F9FAFC;
+--sync-icon-selected-background-color: #EEF1F7;
+--sync-icon-color: #C4CFE5;
+--sync-icon-selected-color: #6884BD;
+
+/* table of contents */
+--toc-background-color: #F4F6FA;
+--toc-border-color: #D8DFEE;
+--toc-header-color: #4665A2;
+--toc-down-arrow-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='10px' width='5px' fill='grey'><text x='0' y='5' font-size='10'>&%238595;</text></svg>");
+
+/** search field */
+--search-background-color: white;
+--search-foreground-color: #909090;
+--search-active-color: black;
+--search-filter-background-color: rgba(255,255,255,.7);
+--search-filter-backdrop-filter: blur(4px);
+--search-filter-foreground-color: black;
+--search-filter-border-color: rgba(150,150,150,.4);
+--search-filter-highlight-text-color: white;
+--search-filter-highlight-bg-color: #3D578C;
+--search-results-foreground-color: #425E97;
+--search-results-background-color: rgba(255,255,255,.8);
+--search-results-backdrop-filter: blur(4px);
+--search-results-border-color: rgba(150,150,150,.4);
+--search-box-border-color: #B6C4DF;
+--search-close-icon-bg-color: #A0A0A0;
+--search-close-icon-fg-color: white;
+
+/** code fragments */
+--code-keyword-color: #008000;
+--code-type-keyword-color: #604020;
+--code-flow-keyword-color: #E08000;
+--code-comment-color: #800000;
+--code-preprocessor-color: #806020;
+--code-string-literal-color: #002080;
+--code-char-literal-color: #008080;
+--code-xml-cdata-color: black;
+--code-vhdl-digit-color: #FF00FF;
+--code-vhdl-char-color: #000000;
+--code-vhdl-keyword-color: #700070;
+--code-vhdl-logic-color: #FF0000;
+--fragment-foreground-color: black;
+--fragment-background-color: #FBFCFD;
+--fragment-border-color: #C4CFE5;
+--fragment-lineno-border-color: #00FF00;
+--fragment-lineno-background-color: #E8E8E8;
+--fragment-lineno-foreground-color: black;
+--fragment-lineno-link-fg-color: #4665A2;
+--fragment-lineno-link-bg-color: #D8D8D8;
+--fragment-lineno-link-hover-fg-color: #4665A2;
+--fragment-lineno-link-hover-bg-color: #C8C8C8;
+--fragment-copy-ok-color: #2EC82E;
+--fragment-highlight-filter: -3;
+--tooltip-foreground-color: black;
+--tooltip-background-color: rgba(255,255,255,0.8);
+--tooltip-arrow-background-color: white;
+--tooltip-border-color: rgba(150,150,150,0.7);
+--tooltip-backdrop-filter: blur(3px);
+--tooltip-doc-color: grey;
+--tooltip-declaration-color: #006318;
+--tooltip-link-color: #4665A2;
+--tooltip-shadow: 0 4px 8px 0 rgba(0,0,0,.25);
+--fold-line-color: #808080;
+
+/** font-family */
+--font-family-normal: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
+--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed;
+--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+--font-family-title: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
+--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif;
+--font-family-search: Arial,Verdana,sans-serif;
+--font-family-icon: Arial,Helvetica;
+--font-family-tooltip: Roboto,sans-serif;
+
+/** special sections */
+--warning-color-bg: #f8d1cc;
+--warning-color-hl: #b61825;
+--warning-color-text: #75070f;
+--note-color-bg: #faf3d8;
+--note-color-hl: #f3a600;
+--note-color-text: #5f4204;
+--todo-color-bg: #e4f3ff;
+--todo-color-hl: #1879C4;
+--todo-color-text: #274a5c;
+--test-color-bg: #e8e8ff;
+--test-color-hl: #3939C4;
+--test-color-text: #1a1a5c;
+--deprecated-color-bg: #ecf0f3;
+--deprecated-color-hl: #5b6269;
+--deprecated-color-text: #43454a;
+--bug-color-bg: #e4dafd;
+--bug-color-hl: #5b2bdd;
+--bug-color-text: #2a0d72;
+--invariant-color-bg: #d8f1e3;
+--invariant-color-hl: #44b86f;
+--invariant-color-text: #265532;
+--satisfies-color-hl: #b61825;
+--satisfies-color-bg: #f8d1cc;
+--verifies-color-hl: #b61825;
+--verifies-color-bg: #f8d1cc;
+
+}
+
+@media (prefers-color-scheme: dark) {
+  html:not(.dark-mode) {
+    color-scheme: dark;
+
+/* page base colors */
+--page-background-color: black;
+--page-foreground-color: #C9D1D9;
+--page-link-color: #90A5CE;
+--page-visited-link-color: #90A5CE;
+--page-external-link-color: #A3B4D7;
+
+/* index */
+--index-odd-item-bg-color: #0B101A;
+--index-even-item-bg-color: black;
+--index-header-color: #C4CFE5;
+--index-separator-color: #334975;
+
+/* header */
+--header-background-color: #070B11;
+--header-separator-color: #141C2E;
+--group-header-separator-color: #1D2A43;
+--group-header-color: #90A5CE;
+
+--footer-foreground-color: #5B7AB7;
+--footer-logo-width: 60px;
+--citation-label-color: #90A5CE;
+--glow-color: cyan;
+
+--title-background-color: #090D16;
+--title-separator-color: #212F4B;
+
+--blockquote-background-color: #101826;
+--blockquote-border-color: #283A5D;
+
+--scrollbar-thumb-color: #2C3F65;
+--scrollbar-background-color: #070B11;
+
+--icon-background-color: #334975;
+--icon-foreground-color: #C4CFE5;
+--icon-folder-open-fill-color: #4665A2;
+--icon-folder-fill-color: #5373B4;
+--icon-folder-border-color: #C4CFE5;
+--icon-doc-fill-color: #6884BD;
+--icon-doc-border-color: #C4CFE5;
+
+/* brief member declaration list */
+--memdecl-background-color: #0B101A;
+--memdecl-foreground-color: #BBB;
+--memdecl-template-color: #7C95C6;
+--memdecl-border-color: #233250;
+
+/* detailed member list */
+--memdef-border-color: #233250;
+--memdef-title-background-color: #1B2840;
+--memdef-proto-background-color: #19243A;
+--memdef-proto-text-color: #9DB0D4;
+--memdef-param-name-color: #D28757;
+--memdef-template-color: #7C95C6;
+
+/* tables */
+--table-cell-border-color: #283A5D;
+--table-header-background-color: #283A5D;
+--table-header-foreground-color: #C4CFE5;
+
+/* labels */
+--label-background-color: #354C7B;
+--label-left-top-border-color: #4665A2;
+--label-right-bottom-border-color: #283A5D;
+--label-foreground-color: #CCCCCC;
+
+/** navigation bar/tree/menu */
+--nav-background-color: #101826;
+--nav-foreground-color: #364D7C;
+--nav-border-color: #212F4B;
+--nav-breadcrumb-separator-color: #212F4B;
+--nav-breadcrumb-active-bg: #1D2A43;
+--nav-breadcrumb-color: #90A5CE;
+--nav-splitbar-bg-color: #283A5D;
+--nav-splitbar-handle-color: #4665A2;
+--nav-font-size-level1: 13px;
+--nav-font-size-level2: 10px;
+--nav-font-size-level3: 9px;
+--nav-text-normal-color: #B6C4DF;
+--nav-menu-button-color: #B6C4DF;
+--nav-menu-background-color: #05070C;
+--nav-menu-foreground-color: #BBBBBB;
+--nav-menu-active-bg: #1D2A43;
+--nav-menu-active-color: #C9D3E7;
+--nav-arrow-color: #4665A2;
+--nav-arrow-selected-color: #6884BD;
+
+/* sync icon */
+--sync-icon-border-color: #212F4B;
+--sync-icon-background-color: #101826;
+--sync-icon-selected-background-color: #1D2A43;
+--sync-icon-color: #4665A2;
+--sync-icon-selected-color: #5373B4;
+
+/* table of contents */
+--toc-background-color: #151E30;
+--toc-border-color: #202E4A;
+--toc-header-color: #A3B4D7;
+--toc-down-arrow-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='10px' width='5px'><text x='0' y='5' font-size='10' fill='grey'>&%238595;</text></svg>");
+
+/** search field */
+--search-background-color: black;
+--search-foreground-color: #C5C5C5;
+--search-active-color: #F5F5F5;
+--search-filter-background-color: #101826;
+--search-filter-foreground-color: #90A5CE;
+--search-filter-backdrop-filter: none;
+--search-filter-border-color: #7C95C6;
+--search-filter-highlight-text-color: #BCC9E2;
+--search-filter-highlight-bg-color: #283A5D;
+--search-results-background-color: black;
+--search-results-foreground-color: #90A5CE;
+--search-results-backdrop-filter: none;
+--search-results-border-color: #334975;
+--search-box-border-color: #334975;
+--search-close-icon-bg-color: #909090;
+--search-close-icon-fg-color: black;
+
+/** code fragments */
+--code-keyword-color: #CC99CD;
+--code-type-keyword-color: #AB99CD;
+--code-flow-keyword-color: #E08000;
+--code-comment-color: #717790;
+--code-preprocessor-color: #65CABE;
+--code-string-literal-color: #7EC699;
+--code-char-literal-color: #00E0F0;
+--code-xml-cdata-color: #C9D1D9;
+--code-vhdl-digit-color: #FF00FF;
+--code-vhdl-char-color: #C0C0C0;
+--code-vhdl-keyword-color: #CF53C9;
+--code-vhdl-logic-color: #FF0000;
+--fragment-foreground-color: #C9D1D9;
+--fragment-background-color: #090D16;
+--fragment-border-color: #30363D;
+--fragment-lineno-border-color: #30363D;
+--fragment-lineno-background-color: black;
+--fragment-lineno-foreground-color: #6E7681;
+--fragment-lineno-link-fg-color: #6E7681;
+--fragment-lineno-link-bg-color: #303030;
+--fragment-lineno-link-hover-fg-color: #8E96A1;
+--fragment-lineno-link-hover-bg-color: #505050;
+--fragment-copy-ok-color: #0EA80E;
+--fragment-highlight-filter: 5;
+--tooltip-foreground-color: #C9D1D9;
+--tooltip-background-color: #202020;
+--tooltip-arrow-background-color: #202020;
+--tooltip-backdrop-filter: none;
+--tooltip-border-color: #C9D1D9;
+--tooltip-doc-color: #D9E1E9;
+--tooltip-declaration-color: #20C348;
+--tooltip-link-color: #79C0FF;
+--tooltip-shadow: none;
+--fold-line-color: #808080;
+
+/** font-family */
+--font-family-normal: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
+--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed;
+--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+--font-family-title: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
+--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif;
+--font-family-search: Arial,Verdana,sans-serif;
+--font-family-icon: Arial,Helvetica;
+--font-family-tooltip: Roboto,sans-serif;
+
+/** special sections */
+--warning-color-bg: #2e1917;
+--warning-color-hl: #ad2617;
+--warning-color-text: #f5b1aa;
+--note-color-bg: #3b2e04;
+--note-color-hl: #f1b602;
+--note-color-text: #ceb670;
+--todo-color-bg: #163750;
+--todo-color-hl: #1982D2;
+--todo-color-text: #dcf0fa;
+--test-color-bg: #121258;
+--test-color-hl: #4242cf;
+--test-color-text: #c0c0da;
+--deprecated-color-bg: #2e323b;
+--deprecated-color-hl: #738396;
+--deprecated-color-text: #abb0bd;
+--bug-color-bg: #2a2536;
+--bug-color-hl: #7661b3;
+--bug-color-text: #ae9ed6;
+--invariant-color-bg: #303a35;
+--invariant-color-hl: #76ce96;
+--invariant-color-text: #cceed5;
+--satisfies-color-hl: #ad2617;
+--satisfies-color-bg: #2e1917;
+--verifies-color-hl: #ad2617;
+--verifies-color-bg: #2e1917;
+
+}}
+body {
+	background-color: var(--page-background-color);
+	color: var(--page-foreground-color);
+}
+
+body, table, div, p, dl {
+	font-weight: 400;
+	font-size: 14px;
+	font-family: var(--font-family-normal);
+	line-height: 22px;
+}
+
+body.resizing {
+	user-select: none;
+	-webkit-user-select: none;
+}
+
+#doc-content {
+	scrollbar-width: thin;
+}
+
+/* @group Heading Levels */
+
+.title {
+	font-family: var(--font-family-normal);
+	line-height: 28px;
+	font-size: 160%;
+	font-weight: 400;
+	margin: 10px 2px;
+}
+
+h1.groupheader {
+	font-size: 150%;
+}
+
+h2.groupheader {
+	box-shadow: 12px 0 var(--page-background-color),
+		   -12px 0 var(--page-background-color),
+		    12px 1px var(--group-header-separator-color),
+		   -12px 1px var(--group-header-separator-color);
+	color: var(--group-header-color);
+	font-size: 150%;
+	font-weight: normal;
+	margin-top: 1.75em;
+	padding-top: 8px;
+	padding-bottom: 4px;
+	width: 100%;
+}
+
+td h2.groupheader {
+	box-shadow: 13px 0 var(--page-background-color),
+		   -13px 0 var(--page-background-color),
+		    13px 1px var(--group-header-separator-color),
+		   -13px 1px var(--group-header-separator-color);
+}
+
+h3.groupheader {
+	font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	-webkit-transition: text-shadow 0.5s linear;
+	-moz-transition: text-shadow 0.5s linear;
+	-ms-transition: text-shadow 0.5s linear;
+	-o-transition: text-shadow 0.5s linear;
+	transition: text-shadow 0.5s linear;
+	margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+	text-shadow: 0 0 15px var(--glow-color);
+}
+
+dt {
+	font-weight: bold;
+}
+
+p.startli, p.startdd {
+	margin-top: 2px;
+	margin-bottom: 0px;
+}
+
+th p.starttd, th p.intertd, th p.endtd {
+	font-size: 100%;
+	font-weight: 700;
+}
+
+p.starttd {
+	margin-top: 0px;
+}
+
+p.endli {
+	margin-bottom: 0px;
+}
+
+p.enddd {
+	margin-bottom: 4px;
+}
+
+p.endtd {
+	margin-bottom: 2px;
+}
+
+p.interli {
+}
+
+p.interdd {
+}
+
+p.intertd {
+}
+
+/* @end */
+
+caption {
+	font-weight: bold;
+}
+
+span.legend {
+	font-size: 70%;
+	text-align: center;
+}
+
+h3.version {
+	font-size: 90%;
+	text-align: center;
+}
+
+div.navtab {
+	margin-right: 6px;
+	padding-right: 6px;
+	text-align: right;
+	line-height: 110%;
+	background-color: var(--nav-background-color);
+}
+
+div.navtab table {
+	border-spacing: 0;
+}
+
+td.navtab {
+	padding-right: 6px;
+	padding-left: 6px;
+}
+
+td.navtabHL {
+	padding-right: 6px;
+	padding-left: 6px;
+	border-radius: 0 6px 6px 0;
+	background-color: var(--nav-menu-active-bg);
+}
+
+div.alphasepar:before{
+  content: " | " ;
+  width: 14px;
+  display: inline-block;
+  text-align: center;
+  line-height: 140%;
+  font-size: 130%;
+}
+
+div.alphasepar{
+  display: inline-block;
+}
+
+div.qindex{
+	text-align: center;
+	width: 100%;
+	line-height: 140%;
+	font-size: 130%;
+	color: var(--index-separator-color);
+}
+
+#main-menu a:focus {
+	outline: auto;
+	z-index: 10;
+	position: relative;
+}
+
+dt.alphachar{
+	font-size: 180%;
+	font-weight: bold;
+}
+
+.alphachar a{
+	color: var(--index-header-color);
+}
+
+.alphachar a:hover, .alphachar a:visited{
+	text-decoration: none;
+}
+
+.classindex dl {
+	padding: 25px;
+	column-count:1
+}
+
+.classindex dd {
+	display:inline-block;
+	margin-left: 50px;
+	width: 90%;
+	line-height: 1.15em;
+}
+
+.classindex dl.even {
+	background-color: var(--index-even-item-bg-color);
+}
+
+.classindex dl.odd {
+	background-color: var(--index-odd-item-bg-color);
+}
+
+@media(min-width: 1120px) {
+	.classindex dl {
+		column-count:2
+	}
+}
+
+@media(min-width: 1320px) {
+	.classindex dl {
+		column-count:3
+	}
+}
+
+
+/* @group Link Styling */
+
+a {
+	color: var(--page-link-color);
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: var(--page-visited-link-color);
+}
+
+span.label a:hover {
+	text-decoration: none;
+	background:   linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%);
+}
+
+a.el {
+	font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.el, a.el:visited, a.code, a.code:visited, a.line, a.line:visited {
+	color: var(--page-link-color);
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+	color: var(--page-external-link-color);
+}
+
+a.code.hl_class { /* style for links to class names in code snippets */ }
+a.code.hl_struct { /* style for links to struct names in code snippets */ }
+a.code.hl_union { /* style for links to union names in code snippets */ }
+a.code.hl_interface { /* style for links to interface names in code snippets */ }
+a.code.hl_protocol { /* style for links to protocol names in code snippets */ }
+a.code.hl_category { /* style for links to category names in code snippets */ }
+a.code.hl_exception { /* style for links to exception names in code snippets */ }
+a.code.hl_service { /* style for links to service names in code snippets */ }
+a.code.hl_singleton { /* style for links to singleton names in code snippets */ }
+a.code.hl_concept { /* style for links to concept names in code snippets */ }
+a.code.hl_namespace { /* style for links to namespace names in code snippets */ }
+a.code.hl_package { /* style for links to package names in code snippets */ }
+a.code.hl_define { /* style for links to macro names in code snippets */ }
+a.code.hl_function { /* style for links to function names in code snippets */ }
+a.code.hl_variable { /* style for links to variable names in code snippets */ }
+a.code.hl_typedef { /* style for links to typedef names in code snippets */ }
+a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ }
+a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ }
+a.code.hl_signal { /* style for links to Qt signal names in code snippets */ }
+a.code.hl_slot { /* style for links to Qt slot names in code snippets */ }
+a.code.hl_friend { /* style for links to friend names in code snippets */ }
+a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ }
+a.code.hl_property { /* style for links to property names in code snippets */ }
+a.code.hl_event { /* style for links to event names in code snippets */ }
+a.code.hl_sequence { /* style for links to sequence names in code snippets */ }
+a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ }
+
+div.embeddoc {
+	font-family: var(--font-family-monospace);
+	padding-left: 10px;
+}
+
+/* @end */
+
+dl.el {
+	margin-left: -1cm;
+}
+
+ul.check {
+	list-style: none;
+	padding-left: 40px;
+	margin: 0;
+}
+
+ul.check li {
+	position: relative;
+}
+
+li.unchecked::before, li.checked::before {
+	position: absolute;
+	left: -18px;
+	top: 0;
+}
+
+li.unchecked::before {
+	content: "☐";
+}
+
+li.checked::before {
+	content: "☑";
+}
+
+ul.check li > p {
+	display: inline;
+}
+
+ul.check li > p:not(:first-child) {
+	display: block;
+}
+
+ol {
+	text-indent: 0px;
+}
+
+ul {
+	text-indent: 0px;
+	overflow: visible;
+}
+
+ul.multicol {
+	-moz-column-gap: 1em;
+	-webkit-column-gap: 1em;
+	column-gap: 1em;
+	-moz-column-count: 3;
+	-webkit-column-count: 3;
+	column-count: 3;
+	list-style-type: none;
+}
+
+#side-nav ul {
+	overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
+}
+
+#main-nav ul {
+	overflow: visible; /* reset ul rule for the navigation bar drop down lists */
+}
+
+.fragment {
+	text-align: left;
+	direction: ltr;
+	overflow-x: auto;
+	overflow-y: hidden;
+	position: relative;
+	min-height: 12px;
+	margin: 10px 0px;
+	padding: 10px 10px;
+	border: 1px solid var(--fragment-border-color);
+	border-radius: 4px;
+	background-color: var(--fragment-background-color);
+	color: var(--fragment-foreground-color);
+}
+
+pre.fragment {
+	word-wrap: break-word;
+	font-size:  10pt;
+	line-height: 125%;
+	font-family: var(--font-family-monospace);
+}
+
+span.tt {
+        white-space: pre;
+	font-family: var(--font-family-monospace);
+	background-color: var(--fragment-background-color);
+}
+
+.label span.tt {
+	background: none;
+}
+
+.clipboard {
+	width: 24px;
+	height: 24px;
+	right: 5px;
+	top: 5px;
+	opacity: 0;
+	position: absolute;
+	display: inline;
+	overflow: hidden;
+	justify-content: center;
+	align-items: center;
+	cursor: pointer;
+}
+
+.clipboard.success {
+	border: 1px solid var(--fragment-foreground-color);
+	border-radius: 4px;
+}
+
+.fragment:hover .clipboard, .clipboard.success {
+	opacity: .4;
+}
+
+.clipboard:hover, .clipboard.success {
+	opacity: 1 !important;
+}
+
+.clipboard:active:not([class~=success]) svg {
+	transform: scale(.91);
+}
+
+.clipboard.success svg {
+	fill: var(--fragment-copy-ok-color);
+}
+
+.clipboard.success {
+	border-color: var(--fragment-copy-ok-color);
+}
+
+div.line {
+	font-family: var(--font-family-monospace);
+	font-size: 13px;
+	min-height: 13px;
+	line-height: 1.2;
+	text-wrap: wrap; 
+	word-break: break-all;
+	white-space: -moz-pre-wrap; /* Moz */
+	white-space: -pre-wrap;     /* Opera 4-6 */
+	white-space: -o-pre-wrap;   /* Opera 7 */
+	white-space: pre-wrap;      /* CSS3  */
+	word-wrap: break-word;      /* IE 5.5+ */
+	text-indent: -62px;
+	padding-left: 62px;
+	padding-bottom: 0px;
+	margin: 0px;
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+div.line:after {
+	content:"\000A";
+	white-space: pre;
+}
+
+div.line.glow {
+	background-color: var(--glow-color);
+	box-shadow: 0 0 10px var(--glow-color);
+}
+
+span.fold {
+	display: inline-block;
+	width: 12px;
+	height: 12px;
+	margin-left: 4px;
+	margin-right: 1px;
+}
+
+span.foldnone {
+	display: inline-block;
+	position: relative;
+	cursor: pointer;
+	user-select: none;
+}
+
+span.fold.plus, span.fold.minus {
+	width: 10px;
+	height: 10px;
+	background-color: var(--fragment-background-color);
+	position: relative;
+	border: 1px solid var(--fold-line-color);
+	margin-right: 1px;
+}
+
+span.fold.plus::before, span.fold.minus::before {
+	content: '';
+	position: absolute;
+	background-color: var(--fold-line-color);
+}
+
+span.fold.plus::before {
+	width: 2px;
+	height: 6px;
+	top: 2px;
+	left: 4px;
+}
+
+span.fold.plus::after {
+	content: '';
+	position: absolute;
+	width: 6px;
+	height: 2px;
+	top: 4px;
+	left: 2px;
+	background-color: var(--fold-line-color);
+}
+
+span.fold.minus::before {
+	width: 6px;
+	height: 2px;
+	top: 4px;
+	left: 2px;
+}
+
+span.lineno {
+	padding-right: 4px;
+	margin-right: 9px;
+	text-align: right;
+	border-right: 2px solid var(--fragment-lineno-border-color);
+	color: var(--fragment-lineno-foreground-color);
+	background-color: var(--fragment-lineno-background-color);
+	white-space: pre;
+}
+span.lineno a, span.lineno a:visited {
+	color: var(--fragment-lineno-link-fg-color);
+	background-color: var(--fragment-lineno-link-bg-color);
+}
+
+span.lineno a:hover {
+	color: var(--fragment-lineno-link-hover-fg-color);
+	background-color: var(--fragment-lineno-link-hover-bg-color);
+}
+
+.lineno {
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+div.classindex ul {
+	list-style: none;
+	padding-left: 0;
+}
+
+div.classindex span.ai {
+	display: inline-block;
+}
+
+div.groupHeader {
+	box-shadow: 13px 0 var(--page-background-color),
+	           -13px 0 var(--page-background-color),
+	            13px 1px var(--group-header-separator-color),
+	           -13px 1px var(--group-header-separator-color);
+	color: var(--group-header-color);
+	font-size: 110%;
+	font-weight: 500;
+	margin-left: 0px;
+	margin-top: 0em;
+	margin-bottom: 6px;
+	padding-top: 8px;
+	padding-bottom: 4px;
+}
+
+div.groupText {
+	margin-left: 16px;
+	font-style: italic;
+}
+
+body {
+	color: var(--page-foreground-color);
+	margin: 0;
+}
+
+div.contents {
+	margin-top: 10px;
+	margin-left: 12px;
+	margin-right: 12px;
+}
+
+p.formulaDsp {
+	text-align: center;
+}
+
+img.dark-mode-visible {
+	display: none;
+}
+img.light-mode-visible {
+	display: none;
+}
+
+img.formulaInl, img.inline {
+	vertical-align: middle;
+}
+
+div.toc img.inline {
+	float: none;
+	vertical-align: top;
+	max-height: 14px;
+}
+div.center {
+	text-align: center;
+	margin-top: 0px;
+	margin-bottom: 0px;
+	padding: 0px;
+}
+
+div.center img {
+	border: 0px;
+}
+
+address.footer {
+	text-align: right;
+	padding-right: 12px;
+}
+
+img.footer {
+	border: 0px;
+	vertical-align: middle;
+	width: var(--footer-logo-width);
+}
+
+.compoundTemplParams {
+	color: var(--memdecl-template-color);
+	font-size: 80%;
+	line-height: 120%;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+	color: var(--code-keyword-color);
+}
+
+span.keywordtype {
+	color: var(--code-type-keyword-color);
+}
+
+span.keywordflow {
+	color: var(--code-flow-keyword-color);
+}
+
+span.comment {
+	color: var(--code-comment-color);
+}
+
+span.preprocessor {
+	color: var(--code-preprocessor-color);
+}
+
+span.stringliteral {
+	color: var(--code-string-literal-color);
+}
+
+span.charliteral {
+	color: var(--code-char-literal-color);
+}
+
+span.xmlcdata {
+	color: var(--code-xml-cdata-color);
+}
+
+span.vhdldigit { 
+	color: var(--code-vhdl-digit-color);
+}
+
+span.vhdlchar { 
+	color: var(--code-vhdl-char-color);
+}
+
+span.vhdlkeyword { 
+	color: var(--code-vhdl-keyword-color);
+}
+
+span.vhdllogic { 
+	color: var(--code-vhdl-logic-color);
+}
+
+blockquote {
+	background-color: var(--blockquote-background-color);
+	border-left: 2px solid var(--blockquote-border-color);
+	margin: 0 24px 0 4px;
+	padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+td.tiny {
+	font-size: 75%;
+}
+
+.dirtab {
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid var(--table-cell-border-color);
+}
+
+th.dirtab {
+	background-color: var(--table-header-background-color);
+	color: var(--table-header-foreground-color);
+	font-weight: bold;
+}
+
+hr {
+	border: none;
+	margin-top: 16px;
+	margin-bottom: 16px;
+	height: 1px;
+	box-shadow: 13px 0 var(--page-background-color),
+		   -13px 0 var(--page-background-color),
+		    13px 1px var(--group-header-separator-color),
+		   -13px 1px var(--group-header-separator-color);
+}
+
+hr.footer {
+	height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+	border-spacing: 0px;
+	padding: 0px;
+}
+
+table.memberdecls-inline {
+	border: 1px solid var(--memdef-border-color);
+	border-radius: 4px;
+}
+
+.memberdecls td, .fieldtable tr {
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+	background-color: var(--glow-color);
+	box-shadow: 0 0 15px var(--glow-color);
+}
+
+.memberdecls tr[class^='memitem'] {
+	font-family: var(--font-family-monospace);
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight {
+	padding-top: 2px;
+	padding-bottom: 2px;
+}
+
+.memTemplParams {
+	padding-left: 10px;
+	padding-top: 5px;
+}
+
+.memItemLeft, .memItemRight, .memTemplParams {
+	background-color: var(--memdecl-background-color);
+}
+
+.mdescLeft, .mdescRight {
+	padding: 0px 8px 4px 8px;
+	color: var(--memdecl-foreground-color);
+}
+
+tr[class^='memdesc'] {
+	box-shadow: inset 0px 1px 3px 0px rgba(0,0,0,.075);
+}
+
+.mdescLeft {
+	border-left: 1px solid var(--memdecl-border-color);
+	border-bottom: 1px solid var(--memdecl-border-color);
+}
+
+.mdescRight {
+	border-right: 1px solid var(--memdecl-border-color);
+	border-bottom: 1px solid var(--memdecl-border-color);
+}
+
+.memTemplParams {
+	color: var(--memdecl-template-color);
+	white-space: nowrap;
+	font-size: 80%;
+	border-left: 1px solid var(--memdecl-border-color);
+	border-right: 1px solid var(--memdecl-border-color);
+}
+
+td.ititle {
+	border: 1px solid var(--memdecl-border-color);
+	border-top-left-radius: 4px;
+	border-top-right-radius: 4px;
+	padding-left: 10px;
+}
+
+tr:not(:first-child) > td.ititle {
+	border-top: 0;
+	border-radius: 0;
+}
+
+.memItemLeft {
+	white-space: nowrap;
+	border-left: 1px solid var(--memdecl-border-color);
+	border-bottom: 1px solid var(--memdecl-border-color);
+	padding-left: 10px;
+	transition: none;
+	vertical-align: top;
+	text-align: right;
+}
+
+.memItemRight {
+	width: 100%;
+	border-right: 1px solid var(--memdecl-border-color);
+	border-bottom: 1px solid var(--memdecl-border-color);
+	padding-right: 10px;
+	transition: none;
+	vertical-align: bottom;
+}
+
+tr.heading        + tr[class^='memitem'] td.memItemLeft,
+tr.groupHeader    + tr[class^='memitem'] td.memItemLeft,
+tr.inherit_header + tr[class^='memitem'] td.memItemLeft {
+        border-top: 1px solid var(--memdecl-border-color);
+	border-top-left-radius: 4px;
+}
+
+tr.heading        + tr[class^='memitem'] td.memItemRight,
+tr.groupHeader    + tr[class^='memitem'] td.memItemRight,
+tr.inherit_header + tr[class^='memitem'] td.memItemRight {
+        border-top: 1px solid var(--memdecl-border-color);
+	border-top-right-radius: 4px;
+}
+
+tr.heading        + tr[class^='memitem'] td.memTemplParams,
+tr.heading        + tr td.ititle,
+tr.groupHeader    + tr[class^='memitem'] td.memTemplParams,
+tr.groupHeader    + tr td.ititle,
+tr.inherit_header + tr[class^='memitem'] td.memTemplParams {
+        border-top: 1px solid var(--memdecl-border-color);
+	border-top-left-radius: 4px;
+	border-top-right-radius: 4px;
+}
+
+table.memberdecls tr:last-child td.memItemLeft,
+table.memberdecls tr:last-child td.mdescLeft,
+table.memberdecls tr[class^='memitem']:has(+ tr.groupHeader)    td.memItemLeft,
+table.memberdecls tr[class^='memitem']:has(+ tr.inherit_header) td.memItemLeft,
+table.memberdecls tr[class^='memdesc']:has(+ tr.groupHeader)    td.mdescLeft,
+table.memberdecls tr[class^='memdesc']:has(+ tr.inherit_header) td.mdescLeft {
+	border-bottom-left-radius: 4px;
+}
+
+table.memberdecls tr:last-child td.memItemRight,
+table.memberdecls tr:last-child td.mdescRight,
+table.memberdecls tr[class^='memitem']:has(+ tr.groupHeader)    td.memItemRight,
+table.memberdecls tr[class^='memitem']:has(+ tr.inherit_header) td.memItemRight,
+table.memberdecls tr[class^='memdesc']:has(+ tr.groupHeader)    td.mdescRight,
+table.memberdecls tr[class^='memdesc']:has(+ tr.inherit_header) td.mdescRight {
+	border-bottom-right-radius: 4px;
+}
+
+tr.template .memItemLeft, tr.template .memItemRight {
+	border-top: none;
+	padding-top: 0;
+}
+
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtitle {
+	padding: 8px;
+	border-top: 1px solid var(--memdef-border-color);
+	border-left: 1px solid var(--memdef-border-color);
+	border-right: 1px solid var(--memdef-border-color);
+	border-top-right-radius: 4px;
+	border-top-left-radius: 4px;
+	margin-bottom: -1px;
+	background-color: var(--memdef-proto-background-color);
+	line-height: 1.25;
+	font-family: var(--font-family-monospace);
+	font-weight: 500;
+	font-size: 16px;
+	float:left;
+	box-shadow: 0 10px 0 -1px var(--memdef-proto-background-color),
+	            0 2px 8px 0 rgba(0,0,0,.075);
+	position: relative;
+}
+
+.memtitle:after {
+	content: '';
+	display: block;
+	background: var(--memdef-proto-background-color);
+	height: 10px;
+	bottom: -10px;
+	left: 0px;
+	right: -14px;
+	position: absolute;
+	border-top-right-radius: 6px;
+}
+
+.permalink
+{
+	font-family: var(--font-family-monospace);
+	font-weight: 500;
+	line-height: 1.25;
+	font-size: 16px;
+	display: inline-block;
+	vertical-align: middle;
+}
+
+.memtemplate {
+	font-size: 80%;
+	color: var(--memdef-template-color);
+	font-family: var(--font-family-monospace);
+	font-weight: normal;
+	margin-left: 9px;
+}
+
+.mempage {
+	width: 100%;
+}
+
+.memitem {
+	padding: 0;
+	margin-bottom: 10px;
+	margin-right: 5px;
+	display: table !important;
+	width: 100%;
+	box-shadow: 0 2px 8px 0 rgba(0,0,0,.075);
+	border-radius: 4px;
+}
+
+.memitem.glow {
+	box-shadow: 0 0 15px var(--glow-color);
+}
+
+.memname {
+	font-family: var(--font-family-monospace);
+	font-size: 13px;
+	font-weight: 400;
+	margin-left: 6px;
+}
+
+.memname td {
+	vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+	border-top: 1px solid var(--memdef-border-color);
+	border-left: 1px solid var(--memdef-border-color);
+	border-right: 1px solid var(--memdef-border-color);
+	padding: 6px 0px 6px 0px;
+	color: var(--memdef-proto-text-color);
+	font-weight: bold;
+	background-color: var(--memdef-proto-background-color);
+	border-top-right-radius: 4px;
+	border-bottom: 1px solid var(--memdef-border-color);
+}
+
+.overload {
+	font-family: var(--font-family-monospace);
+	font-size: 65%;
+}
+
+.memdoc, dl.reflist dd {
+	border-bottom: 1px solid var(--memdef-border-color);
+	border-left: 1px solid var(--memdef-border-color);
+	border-right: 1px solid var(--memdef-border-color);
+	padding: 6px 10px 2px 10px;
+	border-top-width: 0;
+	border-bottom-left-radius: 4px;
+	border-bottom-right-radius: 4px;
+}
+
+dl.reflist dt {
+	padding: 5px;
+}
+
+dl.reflist dd {
+	margin: 0px 0px 10px 0px;
+	padding: 5px;
+}
+
+.paramkey {
+	text-align: right;
+}
+
+.paramtype {
+	white-space: nowrap;
+	padding: 0px;
+	padding-bottom: 1px;
+}
+
+.paramname {
+	white-space: nowrap;
+	padding: 0px;
+	padding-bottom: 1px;
+	margin-left: 2px;
+}
+
+.paramname em {
+	color: var(--memdef-param-name-color);
+	font-style: normal;
+	margin-right: 1px;
+}
+
+.paramname .paramdefval {
+	font-family: var(--font-family-monospace);
+}
+
+.params, .retval, .exception, .tparams {
+	margin-left: 0px;
+	padding-left: 0px;
+}
+
+.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
+	font-weight: bold;
+	vertical-align: top;
+}
+
+.params .paramtype, .tparams .paramtype {
+	font-style: italic;
+	vertical-align: top;
+}
+
+.params .paramdir, .tparams .paramdir {
+	font-family: var(--font-family-monospace);
+	vertical-align: top;
+}
+
+table.mlabels {
+	border-spacing: 0px;
+}
+
+td.mlabels-left {
+	width: 100%;
+	padding: 0px;
+}
+
+td.mlabels-right {
+	vertical-align: bottom;
+	padding: 0px;
+	white-space: nowrap;
+}
+
+span.mlabels {
+	margin-left: 8px;
+}
+
+span.mlabel {
+	background-color: var(--label-background-color);
+	border-top:1px solid var(--label-left-top-border-color);
+	border-left:1px solid var(--label-left-top-border-color);
+	border-right:1px solid var(--label-right-bottom-border-color);
+	border-bottom:1px solid var(--label-right-bottom-border-color);
+	text-shadow: none;
+	color: var(--label-foreground-color);
+	margin-right: 4px;
+	padding: 2px 3px;
+	border-radius: 3px;
+	font-size: 7pt;
+	white-space: nowrap;
+	vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+	margin: 10px 0px;
+	width: 100%;
+}
+
+.directory table {
+	border-collapse:collapse;
+}
+
+.directory td {
+	margin: 0px;
+	padding: 0px;
+	vertical-align: top;
+}
+
+.directory td.entry {
+	white-space: nowrap;
+	padding-right: 6px;
+	padding-top: 3px;
+}
+
+.directory td.entry a {
+	outline:none;
+}
+
+.directory td.entry a img {
+	border: none;
+}
+
+.directory td.desc {
+	width: 100%;
+	padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 3px;
+	border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.odd {
+	padding-left: 6px;
+	background-color: var(--index-odd-item-bg-color);
+}
+
+.directory tr.even {
+	padding-left: 6px;
+	background-color: var(--index-even-item-bg-color);
+}
+
+.directory img {
+	vertical-align: -30%;
+}
+
+.directory .levels {
+	white-space: nowrap;
+	width: 100%;
+	text-align: right;
+	font-size: 9pt;
+}
+
+.directory .levels span {
+	cursor: pointer;
+	padding-left: 2px;
+	padding-right: 2px;
+	color: var(--page-link-color);
+}
+
+.arrow {
+	color: var(--nav-background-color);
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+	cursor: pointer;
+	font-size: 80%;
+	display: inline-block;
+	width: 16px;
+	height: 14px;
+	transition: opacity 0.3s ease;
+}
+
+span.arrowhead {
+	position: relative;
+	padding: 0;
+	margin: 0 0 0 2px;
+	display: inline-block;
+	width: 5px;
+	height: 5px;
+	border-right: 2px solid var(--nav-arrow-color);
+	border-bottom: 2px solid var(--nav-arrow-color);
+	transform: rotate(-45deg);
+	transition: transform 0.3s ease;
+}
+
+span.arrowhead.opened {
+	transform: rotate(45deg);
+}
+
+.selected span.arrowhead {
+	border-right: 2px solid var(--nav-arrow-selected-color);
+	border-bottom: 2px solid var(--nav-arrow-selected-color);
+}
+
+.icon {
+	font-family: var(--font-family-icon);
+	line-height: normal;
+	font-weight: bold;
+	font-size: 12px;
+	height: 14px;
+	width: 16px;
+	display: inline-block;
+	background-color: var(--icon-background-color);
+	color: var(--icon-foreground-color);
+	text-align: center;
+	border-radius: 4px;
+	margin-left: 2px;
+	margin-right: 2px;
+}
+
+.icona {
+	width: 24px;
+	height: 22px;
+	display: inline-block;
+}
+
+.iconfolder {
+	width: 24px;
+	height: 18px;
+	margin-top: 6px;
+	vertical-align:top;
+	display: inline-block;
+	position: relative;
+}
+
+.icondoc {
+	width: 24px;
+	height: 18px;
+	margin-top: 3px;
+	vertical-align:top;
+	display: inline-block;
+	position: relative;
+}
+
+.folder-icon {
+	width: 16px;
+	height: 11px;
+	background-color: var(--icon-folder-fill-color);
+	border: 1px solid var(--icon-folder-border-color);
+	border-radius: 0 2px 2px 2px;
+	position: relative;
+	box-sizing: content-box;
+}
+
+.folder-icon::after {
+	content: '';
+	position: absolute;
+	top: 2px;
+	left: -1px;
+	width: 16px;
+	height: 7px;
+	background-color: var(--icon-folder-open-fill-color);
+	border: 1px solid var(--icon-folder-border-color);
+	border-radius: 7px 7px 2px 2px;
+	transform-origin: top left;
+	opacity: 0;
+	transition: all 0.3s linear;
+}
+
+.folder-icon::before {
+	content: '';
+	position: absolute;
+	top: -3px;
+	left: -1px;
+	width: 6px;
+	height: 2px;
+	background-color: var(--icon-folder-fill-color);
+	border-top: 1px solid var(--icon-folder-border-color);
+	border-left: 1px solid var(--icon-folder-border-color);
+	border-right: 1px solid var(--icon-folder-border-color);
+	border-radius: 2px 2px 0 0;
+}
+
+.folder-icon.open::after {
+	top: 3px;
+	opacity: 1;
+}
+
+.doc-icon {
+	left: 6px;
+	width: 12px;
+	height: 16px;
+	background-color: var(--icon-doc-border-color);
+	clip-path: polygon(0 0, 66% 0, 100% 25%, 100% 100%, 0 100%);
+	position: relative;
+	display: inline-block;
+}
+.doc-icon::before {
+	content: "";
+	left: 1px;
+	top: 1px;
+	width: 10px;
+	height: 14px;
+	background-color: var(--icon-doc-fill-color);
+	clip-path: polygon(0 0, 66% 0, 100% 25%, 100% 100%, 0 100%);
+	position: absolute;
+	box-sizing: border-box;
+}
+.doc-icon::after {
+	content: "";
+	left: 7px;
+	top: 0px;
+	width: 3px;
+	height: 3px;
+	background-color: transparent;
+	position: absolute;
+	border: 1px solid var(--icon-doc-border-color);
+}
+
+
+
+
+/* @end */
+
+div.dynheader {
+	margin-top: 8px;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+span.dynarrow {
+	position: relative;
+	display: inline-block;
+	width: 12px;
+	bottom: 1px;
+}
+
+address {
+	font-style: normal;
+	color: var(--footer-foreground-color);
+}
+
+table.doxtable caption {
+	caption-side: top;
+}
+
+table.doxtable {
+	border-collapse:collapse;
+	margin-top: 4px;
+	margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+	border: 1px solid var(--table-cell-border-color);
+	padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+	background-color: var(--table-header-background-color);
+	color: var(--table-header-foreground-color);
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+table.fieldtable {
+	margin-bottom: 10px;
+	border: 1px solid var(--memdef-border-color);
+	border-spacing: 0px;
+	border-radius: 4px;
+	box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+	padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit {
+	white-space: nowrap;
+	border-right: 1px solid var(--memdef-border-color);
+	border-bottom: 1px solid var(--memdef-border-color);
+	vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+	padding-top: 3px;
+}
+
+.fieldtable td.fieldinit {
+	padding-top: 3px;
+	text-align: right;
+}
+
+.fieldtable td.fielddoc {
+	border-bottom: 1px solid var(--memdef-border-color);
+}
+
+.fieldtable td.fielddoc p:first-child {
+	margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+	margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+	border-bottom: none;
+}
+
+.memberdecls-inline th h3 {
+  margin-left: 15px;
+}
+
+.memberdecls-inline th, .fieldtable th {
+	background-color: var(--memdef-title-background-color);
+	font-size: 90%;
+	color: var(--memdef-proto-text-color);
+	padding-bottom: 4px;
+	padding-top: 5px;
+	text-align:left;
+	font-weight: 400;
+	border-top-left-radius: 4px;
+	border-top-right-radius: 4px;
+	border-bottom: 1px solid var(--memdef-border-color);
+}
+
+/* style requirements page */
+
+div.req_title {
+        text-decoration-line: underline;
+        text-decoration-style: solid;
+        text-decoration-color: var(--table-cell-border-color);
+        text-decoration-thickness: 1px;
+        font-weight: bold;
+}
+
+table.reqlist tr > td:first-child {
+        text-align: right;
+        font-weight: bold;
+}
+
+div.missing_satisfies {
+        border-left: 8px solid var(--satisfies-color-hl);
+	border-radius: 4px;
+	background: var(--satisfies-color-bg);
+        padding: 10px;
+        margin: 10px 0px;
+        overflow: hidden;
+        margin-left: 0;
+}
+
+div.missing_verifies {
+        border-left: 8px solid var(--verifies-color-hl);
+	border-radius: 4px;
+	background: var(--verifies-color-bg);
+        padding: 10px;
+        margin: 10px 0px;
+        overflow: hidden;
+        margin-left: 0;
+}
+
+/* ----------- navigation breadcrumb styling ----------- */
+
+#nav-path ul {
+	height: 30px;
+	line-height: 30px;
+	color: var(--nav-text-normal-color);
+	overflow: hidden;
+	margin: 0px;
+	padding-left: 4px;
+	background-image: none;
+	background: var(--page-background-color);
+	border-bottom: 1px solid var(--nav-breadcrumb-separator-color);
+	font-size: var(--nav-font-size-level1);
+	font-family: var(--font-family-nav);
+	position: relative;
+	z-index: 100;
+}
+
+#main-nav {
+	border-bottom: 1px solid var(--nav-border-color);
+}
+
+.navpath li {
+	list-style-type:none;
+	float:left;
+	color: var(--nav-foreground-color);
+}
+
+.navpath li.footer {
+	list-style-type:none;
+	float:right;
+	padding-left:10px;
+	padding-right:15px;
+	background-image:none;
+	background-repeat:no-repeat;
+	background-position:right;
+	font-size: 8pt;
+	color: var(--footer-foreground-color);
+}
+
+#nav-path li.navelem {
+	background-image: none;
+	display: flex;
+	align-items: center;
+	padding-left: 15px;
+}
+
+.navpath li.navelem a {
+	text-shadow: none;
+	display: inline-block;
+	color: var(--nav-breadcrumb-color);
+	position: relative;
+	top: 0px;
+	height: 30px;
+	margin-right: -20px;
+}
+
+#nav-path li.navelem:after {
+	content: '';
+	display: inline-block;
+	position: relative;
+	top: 0;
+	right: -15px;
+	width: 30px;
+	height: 30px;
+	transform: scaleX(0.5) scale(0.707) rotate(45deg);
+	z-index: 10;
+	background: var(--page-background-color);
+	box-shadow: 2px -2px 0 2px var(--nav-breadcrumb-separator-color);
+	border-radius: 0 5px 0 50px;
+}
+
+#nav-path li.navelem:first-child {
+	margin-left: -6px;
+}
+
+#nav-path li.navelem:hover,
+#nav-path li.navelem:hover:after {
+	background-color: var(--nav-breadcrumb-active-bg);
+}
+
+/* ---------------------- */
+
+div.summary
+{
+	float: right;
+	font-size: 8pt;
+	padding-right: 5px;
+	width: 50%;
+	text-align: right;
+}
+
+div.summary a
+{
+	white-space: nowrap;
+}
+
+table.classindex
+{
+	margin: 10px;
+	white-space: nowrap;
+	margin-left: 3%;
+	margin-right: 3%;
+	width: 94%;
+	border: 0;
+	border-spacing: 0;
+	padding: 0;
+}
+
+div.ingroups
+{
+	font-size: 8pt;
+	width: 50%;
+	text-align: left;
+}
+
+div.ingroups a
+{
+	white-space: nowrap;
+}
+
+div.header
+{
+	margin:  0px;
+	background-color: var(--header-background-color);
+	border-bottom: 1px solid var(--header-separator-color);
+}
+
+div.headertitle
+{
+	padding: 5px 5px 5px 10px;
+}
+
+dl {
+	padding: 0 0 0 0;
+}
+
+dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a {
+	font-weight: bold !important;
+}
+
+dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug,
+dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark {
+	padding: 10px;
+	margin: 10px 0px;
+	overflow: hidden;
+	margin-left: 0;
+	border-radius: 4px;
+}
+
+dl.section dd {
+	margin-bottom: 2px;
+}
+
+dl.warning, dl.attention, dl.important {
+	background: var(--warning-color-bg);
+	border-left: 8px solid var(--warning-color-hl);
+	color: var(--warning-color-text);
+}
+
+dl.warning dt, dl.attention dt, dl.important dt {
+	color: var(--warning-color-hl);
+}
+
+dl.warning .tt, dl.attention .tt, dl.important .tt {
+	background-color: hsl(from var(--warning-color-bg) h s calc(l + var(--fragment-highlight-filter)));
+}
+
+dl.note, dl.remark {
+	background: var(--note-color-bg);
+	border-left: 8px solid var(--note-color-hl);
+	color: var(--note-color-text);
+}
+
+dl.note dt, dl.remark dt {
+	color: var(--note-color-hl);
+}
+
+dl.note .tt, dl.remark .tt {
+	background-color: hsl(from var(--note-color-bg) h s calc(l + var(--fragment-highlight-filter)));
+}
+
+dl.todo {
+	background: var(--todo-color-bg);
+	border-left: 8px solid var(--todo-color-hl);
+	color: var(--todo-color-text);
+}
+
+dl.todo dt {
+	color: var(--todo-color-hl);
+}
+
+dl.todo .tt {
+	background-color: hsl(from var(--todo-color-bg) h s calc(l + var(--fragment-highlight-filter)));
+}
+
+dl.test {
+	background: var(--test-color-bg);
+	border-left: 8px solid var(--test-color-hl);
+	color: var(--test-color-text);
+}
+
+dl.test dt {
+	color: var(--test-color-hl);
+}
+
+dl.test .tt {
+	background-color: hsl(from var(--test-color-bg) h s calc(l + var(--fragment-highlight-filter)));
+}
+
+dl.bug dt a {
+	color: var(--bug-color-hl) !important;
+}
+
+dl.bug {
+	background: var(--bug-color-bg);
+	border-left: 8px solid var(--bug-color-hl);
+	color: var(--bug-color-text);
+}
+
+dl.bug dt a {
+	color: var(--bug-color-hl) !important;
+}
+
+dl.bug .tt {
+	background-color: hsl(from var(--bug-color-bg) h s calc(l + var(--fragment-highlight-filter)));
+}
+
+dl.deprecated {
+	background: var(--deprecated-color-bg);
+	border-left: 8px solid var(--deprecated-color-hl);
+	color: var(--deprecated-color-text);
+}
+
+dl.deprecated dt a {
+	color: var(--deprecated-color-hl) !important;
+}
+
+dl.deprecated .tt {
+	background-color: hsl(from var(--deprecated-color-bg) h s calc(l + var(--fragment-highlight-filter)));
+}
+
+
+dl.invariant, dl.pre, dl.post {
+	background: var(--invariant-color-bg);
+	border-left: 8px solid var(--invariant-color-hl);
+	color: var(--invariant-color-text);
+}
+
+dl.invariant dt, dl.pre dt, dl.post dt {
+	color: var(--invariant-color-hl);
+}
+
+dl.invariant .tt, dl.pre .tt, dl.post .tt {
+	background-color: hsl(from var(--invariant-color-bg) h s calc(l + var(--fragment-highlight-filter)));
+}
+
+dl.note dd, dl.warning dd, dl.pre dd, dl.post dd,
+dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd,
+dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd {
+	margin-inline-start: 0px;
+}
+
+
+#projectrow
+{
+	height: 56px;
+}
+
+#projectlogo
+{
+	text-align: center;
+	vertical-align: bottom;
+	border-collapse: separate;
+}
+
+#projectlogo img
+{
+	border: 0px none;
+}
+
+#projectalign
+{
+	vertical-align: middle;
+	padding-left: 0.5em;
+}
+
+#projectname
+{
+	font-size: 200%;
+	font-family: var(--font-family-title);
+	margin: 0;
+	padding: 0;
+}
+
+#side-nav #projectname
+{
+	font-size: 130%;
+}
+
+#projectbrief
+{
+	font-size: 90%;
+	font-family: var(--font-family-title);
+	margin: 0px;
+	padding: 0px;
+}
+
+#projectnumber
+{
+	font-size: 50%;
+	font-family: var(--font-family-title);
+	margin: 0px;
+	padding: 0px;
+}
+
+#titlearea
+{
+	padding: 0 0 0 5px;
+	margin: 0px;
+	border-bottom: 1px solid var(--title-separator-color);
+	background-color: var(--title-background-color);
+}
+
+.image
+{
+	text-align: center;
+}
+
+.dotgraph
+{
+	text-align: center;
+}
+
+.mscgraph
+{
+	text-align: center;
+}
+
+.plantumlgraph
+{
+	text-align: center;
+}
+
+.diagraph
+{
+	text-align: center;
+}
+
+.caption
+{
+	font-weight: bold;
+}
+
+dl.citelist {
+	margin-bottom:50px;
+}
+
+dl.citelist dt {
+	color:var(--citation-label-color);
+	float:left;
+	font-weight:bold;
+	margin-right:10px;
+	padding:5px;
+	text-align:right;
+	width:52px;
+}
+
+dl.citelist dd {
+	margin:2px 0 2px 72px;
+	padding:5px 0;
+}
+
+div.toc {
+	padding: 14px 25px;
+	background-color: var(--toc-background-color);
+	border: 1px solid var(--toc-border-color);
+	border-radius: 7px 7px 7px 7px;
+	float: right;
+	height: auto;
+	margin: 0 8px 10px 10px;
+	width: 200px;
+}
+
+div.toc li {
+	background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent;
+	font: 10px/1.2 var(--font-family-toc);
+	margin-top: 5px;
+	padding-left: 10px;
+	padding-top: 2px;
+}
+
+div.toc h3 {
+	font: bold 12px/1.2 var(--font-family-toc);
+	color: var(--toc-header-color);
+	border-bottom: 0 none;
+	margin: 0;
+}
+
+div.toc ul {
+	list-style: none outside none;
+	border: medium none;
+	padding: 0px;
+}
+
+div.toc li[class^='level'] {
+	margin-left: 15px;
+}
+
+div.toc li.level1 {
+	margin-left: 0px;
+}
+
+div.toc li.empty {
+	background-image: none;
+	margin-top: 0px;
+}
+
+span.emoji {
+        /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html
+         * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort;
+         */
+}
+
+span.obfuscator {
+	display: none;
+}
+
+.inherit_header {
+	font-weight: 400;
+	cursor: pointer;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.inherit_header td {
+	padding: 6px 0 2px 0;
+}
+
+.inherit {
+	display: none;
+}
+
+tr.heading h2 {
+	margin-top: 12px;
+	margin-bottom: 12px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+	position: absolute;
+	display: none;
+}
+
+#powerTip {
+	cursor: default;
+	color: var(--tooltip-foreground-color);
+	background-color: var(--tooltip-background-color);
+	backdrop-filter: var(--tooltip-backdrop-filter);
+	-webkit-backdrop-filter: var(--tooltip-backdrop-filter);
+	border: 1px solid var(--tooltip-border-color);
+	border-radius: 4px;
+	box-shadow: var(--tooltip-shadow);
+	display: none;
+	font-size: smaller;
+	max-width: 80%;
+	padding: 1ex 1em 1em;
+	position: absolute;
+	z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+	color: var(--tooltip-doc-color);
+	font-style: italic;
+}
+
+#powerTip div.ttname a {
+	font-weight: bold;
+}
+
+#powerTip a {
+	color: var(--tooltip-link-color);
+}
+
+#powerTip div.ttname {
+	font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+	color: var(--tooltip-declaration-color);
+}
+
+#powerTip div {
+	margin: 0px;
+	padding: 0px;
+	font-size: 12px;
+	font-family: var(--font-family-tooltip);
+	line-height: 16px;
+}
+
+#powerTip:before, #powerTip:after {
+	content: "";
+	position: absolute;
+	margin: 0px;
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.w:after,  #powerTip.w:before,
+#powerTip.e:after,  #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	border: solid transparent;
+	content: " ";
+	height: 0;
+	width: 0;
+	position: absolute;
+}
+
+#powerTip.n:after,  #powerTip.s:after,
+#powerTip.w:after,  #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+	border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before,  #powerTip.s:before,
+#powerTip.w:before,  #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+	border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+	top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+	border-top-color: var(--tooltip-arrow-background-color);
+	border-width: 10px;
+	margin: 0px -10px;
+}
+#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before {
+	border-top-color: var(--tooltip-border-color);
+	border-width: 11px;
+	margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+	left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+	right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+	left: 14px;
+}
+
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+	border-bottom-color: var(--tooltip-arrow-background-color);
+	border-width: 10px;
+	margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+	border-bottom-color: var(--tooltip-border-color);
+	border-width: 11px;
+	margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+	left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+	right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+	left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+	left: 100%;
+}
+#powerTip.e:after {
+	border-left-color: var(--tooltip-border-color);
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.e:before {
+	border-left-color: var(--tooltip-border-color);
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+	right: 100%;
+}
+#powerTip.w:after {
+	border-right-color: var(--tooltip-border-color);
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.w:before {
+	border-right-color: var(--tooltip-border-color);
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+@media print
+{
+	#top { display: none; }
+	#side-nav { display: none; }
+	#nav-path { display: none; }
+	body { overflow:visible; }
+	h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+	.summary { display: none; }
+	.memitem { page-break-inside: avoid; }
+	#doc-content
+	{
+	margin-left:0 !important;
+	height:auto !important;
+	width:auto !important;
+	overflow:inherit;
+	display:inline;
+	}
+}
+
+/* @group Markdown */
+
+table.markdownTable {
+	border-collapse:collapse;
+	margin-top: 4px;
+	margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+	border: 1px solid var(--table-cell-border-color);
+	padding: 3px 7px 2px;
+}
+
+table.markdownTable tr {
+}
+
+th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
+	background-color: var(--table-header-background-color);
+	color: var(--table-header-foreground-color);
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+th.markdownTableHeadLeft, td.markdownTableBodyLeft {
+	text-align: left
+}
+
+th.markdownTableHeadRight, td.markdownTableBodyRight {
+	text-align: right
+}
+
+th.markdownTableHeadCenter, td.markdownTableBodyCenter {
+	text-align: center
+}
+
+tt, code, kbd
+{
+	display: inline-block;
+}
+tt, code, kbd
+{
+	vertical-align: top;
+}
+/* @end */
+
+u {
+	text-decoration: underline;
+}
+
+details>summary {
+	list-style-type: none;
+}
+
+details > summary::-webkit-details-marker {
+	display: none;
+}
+
+details>summary::before {
+        content: "\25bc";
+        padding-right:4px;
+        font-size: 80%;
+        display: inline-block;
+        transform: rotate(-90deg);
+}
+
+details[open]>summary::before {
+        content: "\25bc";
+        padding-right:4px;
+        font-size: 80%;
+        display: inline-block;
+        transform: rotate(0deg);
+}
+
+.spacer {
+  width: 16px;
+  display: inline-block;
+}
+
+
+#searchBoxPos1 {
+  position: absolute;
+  right: 8px;
+  top: 8px;
+  height: 36px;
+}
+
+#searchBoxPos2 {
+  float: right;
+}
+
+#splitbar {
+  -moz-user-select: none;
+  user-select: none;
+}
+
+.dynheader {
+  cursor: pointer;
+}
+
+.hidden {
+  display: none;
+}
+:root {
+    scrollbar-width: thin;
+    scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color);
+}
+
+:root.dark-mode {
+    color-scheme: dark;
+}
+
+::-webkit-scrollbar {
+        background-color: var(--scrollbar-background-color);
+        height: 12px;
+        width: 12px;
+}
+::-webkit-scrollbar-thumb {
+        border-radius: 6px;
+        box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color);
+        border: solid 2px transparent;
+}
+::-webkit-scrollbar-corner {
+        background-color: var(--scrollbar-background-color);
+}
+

Datei-Diff unterdrückt, da er zu groß ist
+ 21 - 0
docs/html/doxygen.svg


+ 146 - 0
docs/html/doxygen_crawl.html

@@ -0,0 +1,146 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<title>Validator / crawler helper</title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+</head>
+<body>
+<a href="actor_8hpp.html"/>
+<a href="actor_8hpp_source.html"/>
+<a href="annotated.html"/>
+<a href="classes.html"/>
+<a href="classtk_1_1_actor-members.html"/>
+<a href="classtk_1_1_actor.html"/>
+<a href="classtk_1_1_actor.html#a1147554d6ddb64d822285ca5a03506a4"/>
+<a href="classtk_1_1_actor.html#a224e6be4dca0d1500f2121e97bd0f92d"/>
+<a href="classtk_1_1_actor.html#a5c4f4f2f1b8011a37773617e34218c2d"/>
+<a href="classtk_1_1_actor.html#a60a2752360fa7185ec7776f2a6ef766a"/>
+<a href="classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5"/>
+<a href="classtk_1_1_actor.html#a863f28d824aaa78c75789166b1c2a010"/>
+<a href="classtk_1_1_actor.html#abfc63a514a3ae7cdbdf9ceee81c3b0fc"/>
+<a href="classtk_1_1_actor.html#ac98ec3132f2ded910a6899b030c06f3f"/>
+<a href="classtk_1_1_actor.html#afb31ec0d50d1ac97e6a4ce148a96f78d"/>
+<a href="classtk_1_1_event_hub-members.html"/>
+<a href="classtk_1_1_event_hub.html"/>
+<a href="classtk_1_1_event_hub.html#a09c779ce8c594ea44c831adfd7e287f8"/>
+<a href="classtk_1_1_event_hub.html#a3a59a641ad3fe121c0da7e1c81dc300b"/>
+<a href="classtk_1_1_event_hub.html#a50ebe29eaa2657604a1c85bf5125d490"/>
+<a href="classtk_1_1_event_hub.html#ac4cd6ce4e37b74385c7f4352a5516930"/>
+<a href="classtk_1_1_lock_guard-members.html"/>
+<a href="classtk_1_1_lock_guard.html"/>
+<a href="classtk_1_1_lock_guard.html#a3a922c7edf84ce25ef67151c322bb0eb"/>
+<a href="classtk_1_1_lock_guard.html#a3f121f8aa1307f0f6e6e608cf138340c"/>
+<a href="classtk_1_1_lock_guard.html#a52eeb50abee00bd0ed16cfa6618ce40f"/>
+<a href="classtk_1_1_lock_guard.html#af9bc86bc2036c4b8e54633ddee811604"/>
+<a href="classtk_1_1_mutex-members.html"/>
+<a href="classtk_1_1_mutex.html"/>
+<a href="classtk_1_1_mutex.html#a666dd03fb22c5cb855e3145f76a58b9c"/>
+<a href="classtk_1_1_mutex.html#a7f5645bba55df2db263f92a954802c27"/>
+<a href="classtk_1_1_mutex.html#a8b17431db60f4ab48a3859b2ca722eb1"/>
+<a href="classtk_1_1_mutex.html#acf574e35540879481f1f6e5452a504ab"/>
+<a href="classtk_1_1_mutex.html#ae8d5dfd5655b5aa54d63db6e0cf2f707"/>
+<a href="classtk_1_1_preempt_guard-members.html"/>
+<a href="classtk_1_1_preempt_guard.html"/>
+<a href="classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86"/>
+<a href="classtk_1_1_preempt_guard.html#a360ac2b073064abc0f21db3127e7f389"/>
+<a href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e"/>
+<a href="classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417"/>
+<a href="classtk_1_1_semaphore-members.html"/>
+<a href="classtk_1_1_semaphore.html"/>
+<a href="classtk_1_1_semaphore.html#a3a246c8afc866dc438186d0a53cad5c2"/>
+<a href="classtk_1_1_semaphore.html#a66c5ac90338a6fcc6a9c2f22f1586de8"/>
+<a href="classtk_1_1_semaphore.html#a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b"/>
+<a href="classtk_1_1_semaphore.html#a863ccee07bc701a78342c14503955d73"/>
+<a href="classtk_1_1_semaphore.html#ae53b9c57cc25fafb242a21776f112701"/>
+<a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html"/>
+<a href="dir_065670814960ad9cf60e14e38242ec92.html"/>
+<a href="dir_34ae86e414c9a960c5c39d1d6b15c7a8.html"/>
+<a href="dir_57f08cdb50348f663244f527066db34a.html"/>
+<a href="dir_5c27857cec97849c25650021b743744e.html"/>
+<a href="dir_6d4b68ea9176da934383ead6eaf0491a.html"/>
+<a href="dir_91e9b2eecded889eb8782a5ba7843b6a.html"/>
+<a href="dir_9b10c2ff4e034627dc7271865b055c64.html"/>
+<a href="doxygen_crawl.html"/>
+<a href="files.html"/>
+<a href="functions.html"/>
+<a href="functions_func.html"/>
+<a href="functions_vars.html"/>
+<a href="globals.html"/>
+<a href="globals_defs.html"/>
+<a href="globals_func.html"/>
+<a href="globals_vars.html"/>
+<a href="index.html"/>
+<a href="kernel_8hpp.html"/>
+<a href="kernel_8hpp.html#a22e1d9f532aa297014c125110226443c"/>
+<a href="kernel_8hpp.html#a5c791131c5ad22ed87a8d3ca2cd57d33"/>
+<a href="kernel_8hpp.html#af32989639aecb5479b4239639fd133f7"/>
+<a href="kernel_8hpp.html#af57e92069cc01608150a45032c5ad473"/>
+<a href="kernel_8hpp.html#afde197f9493ef5bdb5b715ce8b52148d"/>
+<a href="kernel_8hpp_source.html"/>
+<a href="namespacemembers.html"/>
+<a href="namespacemembers_enum.html"/>
+<a href="namespacemembers_eval.html"/>
+<a href="namespacemembers_func.html"/>
+<a href="namespacemembers_type.html"/>
+<a href="namespaces.html"/>
+<a href="namespacetk.html"/>
+<a href="namespacetk.html#a083495c9bf857a63f6c20a20aac0ca52"/>
+<a href="namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe"/>
+<a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e"/>
+<a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca"/>
+<a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37"/>
+<a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75"/>
+<a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519"/>
+<a href="namespacetk.html#a46e15375fba47cbd1a93278f17e77848"/>
+<a href="namespacetk.html#a5549bec310750722a1964de1145b9fed"/>
+<a href="namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8"/>
+<a href="namespacetk.html#a675f1829b87e2a43239b6f80a526d0ed"/>
+<a href="namespacetk.html#a6e721332f5a7d85998345ed218de7394"/>
+<a href="namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9"/>
+<a href="namespacetk.html#a752b12f6862815c94a52347af52578b7"/>
+<a href="namespacetk.html#a8081956b0a19b87d5b7c81b772373397"/>
+<a href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc"/>
+<a href="namespacetk.html#aae83f84121085578a7568437a8dc2447"/>
+<a href="namespacetk.html#ab1f2fa3d79e99f13610bd330a0df928b"/>
+<a href="namespacetk.html#aba50cfc62cb8be71cf96df7f495a7a3d"/>
+<a href="namespacetk.html#add371a241ec6c1695ef4e67935317edd"/>
+<a href="namespacetk_1_1detail.html"/>
+<a href="namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d"/>
+<a href="namespacetk_1_1detail.html#a447e4ec89b3f2748451891219b7e3738"/>
+<a href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523"/>
+<a href="namespacetk_1_1detail.html#a70ba35e0daee086ad86770f1e39c9b35"/>
+<a href="namespacetk_1_1detail.html#a73a80d92a172d565201f99e8f31278e4"/>
+<a href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b"/>
+<a href="namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa"/>
+<a href="port__m33_8c.html"/>
+<a href="port__m33_8c.html#a6addcb4c27c8943e5908a645233e4b1e"/>
+<a href="port__m33_8c.html#a7b53a215b14820fae8b8e7c387f5b3b3"/>
+<a href="port__m33_8c.html#ac9d435a65b90e71074dd44f97b1103f8"/>
+<a href="port__m33_8h.html"/>
+<a href="port__m33_8h.html#a57df28e1d96b701ef5b9713cae179462"/>
+<a href="port__m33_8h.html#aaf06c4f2c498c86ed2c595d9bfe4caab"/>
+<a href="port__m33_8h.html#ac9d435a65b90e71074dd44f97b1103f8"/>
+<a href="port__m33_8h_source.html"/>
+<a href="scheduler_8cpp.html"/>
+<a href="scheduler_8cpp.html#a10d391ed68d7bf5406e9dbcd1c69d1da"/>
+<a href="scheduler_8cpp.html#a4728919288dacba97228c27b1c996108"/>
+<a href="scheduler_8cpp.html#ad29ac857f58c5bf7c0220403c6624f32"/>
+<a href="scheduler_8cpp.html#ad7a9acf1577e1fc4ff193d79edf9e254"/>
+<a href="struct_fpu_ctx-members.html"/>
+<a href="struct_fpu_ctx.html"/>
+<a href="struct_fpu_ctx.html#ad2c3227e92b86055b7c97fbd0ee5c445"/>
+<a href="structtk_1_1_message-members.html"/>
+<a href="structtk_1_1_message.html"/>
+<a href="structtk_1_1_message.html#a570c5c394d2786708ce4830e4087aa9e"/>
+<a href="structtk_1_1_message.html#a9a7de43cbf3da1821cf18ae924f94c52"/>
+<a href="structtk_1_1_task_handle-members.html"/>
+<a href="structtk_1_1_task_handle.html"/>
+<a href="structtk_1_1_task_handle.html#a425e4877384e92ad75fee388bd54a7c3"/>
+<a href="structtk_1_1_task_handle.html#afe8adf95998f82fe6d03a80700ef7927"/>
+<a href="sync_8hpp.html"/>
+<a href="sync_8hpp_source.html"/>
+</body>
+</html>

+ 142 - 0
docs/html/files.html

@@ -0,0 +1,142 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('files.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">File List</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span class="spacer">&#160;</span><a class="el" href="dir_9b10c2ff4e034627dc7271865b055c64.html" target="_self">Pico_Projects</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_" class="odd"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><a class="el" href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html" target="_self">tinykernel</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_" class="even"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><a class="el" href="dir_065670814960ad9cf60e14e38242ec92.html" target="_self">tinykernel</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_0_" class="odd"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><a class="el" href="dir_34ae86e414c9a960c5c39d1d6b15c7a8.html" target="_self">include</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_0_0_" class="even"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><a class="el" href="dir_91e9b2eecded889eb8782a5ba7843b6a.html" target="_self">tinykernel</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_0_0_0_" class="odd"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><a href="actor_8hpp_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><a class="el" href="actor_8hpp.html" target="_self">actor.hpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_0_0_1_" class="even"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><a href="kernel_8hpp_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><a class="el" href="kernel_8hpp.html" target="_self">kernel.hpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_0_0_2_" class="odd"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><a href="sync_8hpp_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><a class="el" href="sync_8hpp.html" target="_self">sync.hpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_1_" class="even"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><a class="el" href="dir_57f08cdb50348f663244f527066db34a.html" target="_self">src</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_1_0_" class="odd"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><a class="el" href="dir_5c27857cec97849c25650021b743744e.html" target="_self">port</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_1_0_0_" class="even"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><a class="el" href="dir_6d4b68ea9176da934383ead6eaf0491a.html" target="_self">m33</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_1_0_0_0_" class="odd"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="icondoc"><div class="doc-icon"></div></span><a class="el" href="port__m33_8c.html" target="_self">port_m33.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_1_0_0_1_" class="even"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><a href="port__m33_8h_source.html"><span class="icondoc"><div class="doc-icon"></div></span></a><a class="el" href="port__m33_8h.html" target="_self">port_m33.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_1_1_" class="odd"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="icondoc"><div class="doc-icon"></div></span><a class="el" href="scheduler_8cpp.html" target="_self">scheduler.cpp</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 4 - 0
docs/html/files_dup.js

@@ -0,0 +1,4 @@
+var files_dup =
+[
+    [ "Pico_Projects", "dir_9b10c2ff4e034627dc7271865b055c64.html", "dir_9b10c2ff4e034627dc7271865b055c64" ]
+];

+ 206 - 0
docs/html/functions.html

@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('functions.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div><br/>
+<div class="qindex"><a class="qindex" href="#index_a">A</a><div class="alphasepar"></div><a class="qindex" href="#index_c">C</a><div class="alphasepar"></div><a class="qindex" href="#index_h">H</a><div class="alphasepar"></div><a class="qindex" href="#index_i">I</a><div class="alphasepar"></div><a class="qindex" href="#index_l">L</a><div class="alphasepar"></div><a class="qindex" href="#index_m">M</a><div class="alphasepar"></div><a class="qindex" href="#index_o">O</a><div class="alphasepar"></div><a class="qindex" href="#index_p">P</a><div class="alphasepar"></div><a class="qindex" href="#index_r">R</a><div class="alphasepar"></div><a class="qindex" href="#index_s">S</a><div class="alphasepar"></div><a class="qindex" href="#index_t">T</a><div class="alphasepar"></div><a class="qindex" href="#index_u">U</a><div class="alphasepar"></div><a class="qindex" href="#index_~">~</a></div>
+
+
+<h3 class="doxsection"><a id="index_a" name="index_a"></a>- a -</h3><ul>
+<li>acquire()&#160;:&#160;<a class="el" href="classtk_1_1_semaphore.html#a863ccee07bc701a78342c14503955d73">tk::Semaphore</a></li>
+<li>Actor()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+<li>arg&#160;:&#160;<a class="el" href="structtk_1_1_message.html#a570c5c394d2786708ce4830e4087aa9e">tk::Message</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_c" name="index_c"></a>- c -</h3><ul>
+<li>count()&#160;:&#160;<a class="el" href="classtk_1_1_semaphore.html#ae53b9c57cc25fafb242a21776f112701">tk::Semaphore</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_h" name="index_h"></a>- h -</h3><ul>
+<li>handle()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#a60a2752360fa7185ec7776f2a6ef766a">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_i" name="index_i"></a>- i -</h3><ul>
+<li>id&#160;:&#160;<a class="el" href="structtk_1_1_message.html#a9a7de43cbf3da1821cf18ae924f94c52">tk::Message</a></li>
+<li>is_locked()&#160;:&#160;<a class="el" href="classtk_1_1_mutex.html#acf574e35540879481f1f6e5452a504ab">tk::Mutex</a></li>
+<li>is_valid()&#160;:&#160;<a class="el" href="structtk_1_1_task_handle.html#afe8adf95998f82fe6d03a80700ef7927">tk::TaskHandle</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_l" name="index_l"></a>- l -</h3><ul>
+<li>lock()&#160;:&#160;<a class="el" href="classtk_1_1_mutex.html#a7f5645bba55df2db263f92a954802c27">tk::Mutex</a></li>
+<li>LockGuard()&#160;:&#160;<a class="el" href="classtk_1_1_lock_guard.html#a3a922c7edf84ce25ef67151c322bb0eb">tk::LockGuard&lt; Lockable &gt;</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_m" name="index_m"></a>- m -</h3><ul>
+<li>Mutex()&#160;:&#160;<a class="el" href="classtk_1_1_mutex.html#a8b17431db60f4ab48a3859b2ca722eb1">tk::Mutex</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_o" name="index_o"></a>- o -</h3><ul>
+<li>on_message()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#a1147554d6ddb64d822285ca5a03506a4">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+<li>on_start()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#afb31ec0d50d1ac97e6a4ce148a96f78d">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+<li>operator=()&#160;:&#160;<a class="el" href="classtk_1_1_lock_guard.html#a3f121f8aa1307f0f6e6e608cf138340c">tk::LockGuard&lt; Lockable &gt;</a>, <a class="el" href="classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417">tk::PreemptGuard</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_p" name="index_p"></a>- p -</h3><ul>
+<li>post()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#a224e6be4dca0d1500f2121e97bd0f92d">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+<li>PreemptGuard()&#160;:&#160;<a class="el" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">tk::PreemptGuard</a></li>
+<li>publish()&#160;:&#160;<a class="el" href="classtk_1_1_event_hub.html#a3a59a641ad3fe121c0da7e1c81dc300b">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_r" name="index_r"></a>- r -</h3><ul>
+<li>release()&#160;:&#160;<a class="el" href="classtk_1_1_semaphore.html#a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b">tk::Semaphore</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_s" name="index_s"></a>- s -</h3><ul>
+<li>s&#160;:&#160;<a class="el" href="struct_fpu_ctx.html#ad2c3227e92b86055b7c97fbd0ee5c445">FpuCtx</a></li>
+<li>Semaphore()&#160;:&#160;<a class="el" href="classtk_1_1_semaphore.html#a66c5ac90338a6fcc6a9c2f22f1586de8">tk::Semaphore</a></li>
+<li>slot&#160;:&#160;<a class="el" href="structtk_1_1_task_handle.html#a425e4877384e92ad75fee388bd54a7c3">tk::TaskHandle</a></li>
+<li>start()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#ac98ec3132f2ded910a6899b030c06f3f">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+<li>subscribe()&#160;:&#160;<a class="el" href="classtk_1_1_event_hub.html#a50ebe29eaa2657604a1c85bf5125d490">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a></li>
+<li>subscriber_count()&#160;:&#160;<a class="el" href="classtk_1_1_event_hub.html#ac4cd6ce4e37b74385c7f4352a5516930">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_t" name="index_t"></a>- t -</h3><ul>
+<li>try_acquire()&#160;:&#160;<a class="el" href="classtk_1_1_semaphore.html#a3a246c8afc866dc438186d0a53cad5c2">tk::Semaphore</a></li>
+<li>try_lock()&#160;:&#160;<a class="el" href="classtk_1_1_mutex.html#a666dd03fb22c5cb855e3145f76a58b9c">tk::Mutex</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_u" name="index_u"></a>- u -</h3><ul>
+<li>unlock()&#160;:&#160;<a class="el" href="classtk_1_1_mutex.html#ae8d5dfd5655b5aa54d63db6e0cf2f707">tk::Mutex</a></li>
+<li>unsubscribe()&#160;:&#160;<a class="el" href="classtk_1_1_event_hub.html#a09c779ce8c594ea44c831adfd7e287f8">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index__7E" name="index__7E"></a>- ~ -</h3><ul>
+<li>~Actor()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#abfc63a514a3ae7cdbdf9ceee81c3b0fc">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+<li>~LockGuard()&#160;:&#160;<a class="el" href="classtk_1_1_lock_guard.html#a52eeb50abee00bd0ed16cfa6618ce40f">tk::LockGuard&lt; Lockable &gt;</a></li>
+<li>~PreemptGuard()&#160;:&#160;<a class="el" href="classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86">tk::PreemptGuard</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 202 - 0
docs/html/functions_func.html

@@ -0,0 +1,202 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Class Members - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('functions_func.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions with links to the classes they belong to:</div><br/>
+<div class="qindex"><a class="qindex" href="#index_a">A</a><div class="alphasepar"></div><a class="qindex" href="#index_c">C</a><div class="alphasepar"></div><a class="qindex" href="#index_h">H</a><div class="alphasepar"></div><a class="qindex" href="#index_i">I</a><div class="alphasepar"></div><a class="qindex" href="#index_l">L</a><div class="alphasepar"></div><a class="qindex" href="#index_m">M</a><div class="alphasepar"></div><a class="qindex" href="#index_o">O</a><div class="alphasepar"></div><a class="qindex" href="#index_p">P</a><div class="alphasepar"></div><a class="qindex" href="#index_r">R</a><div class="alphasepar"></div><a class="qindex" href="#index_s">S</a><div class="alphasepar"></div><a class="qindex" href="#index_t">T</a><div class="alphasepar"></div><a class="qindex" href="#index_u">U</a><div class="alphasepar"></div><a class="qindex" href="#index_~">~</a></div>
+
+
+<h3 class="doxsection"><a id="index_a" name="index_a"></a>- a -</h3><ul>
+<li>acquire()&#160;:&#160;<a class="el" href="classtk_1_1_semaphore.html#a863ccee07bc701a78342c14503955d73">tk::Semaphore</a></li>
+<li>Actor()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_c" name="index_c"></a>- c -</h3><ul>
+<li>count()&#160;:&#160;<a class="el" href="classtk_1_1_semaphore.html#ae53b9c57cc25fafb242a21776f112701">tk::Semaphore</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_h" name="index_h"></a>- h -</h3><ul>
+<li>handle()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#a60a2752360fa7185ec7776f2a6ef766a">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_i" name="index_i"></a>- i -</h3><ul>
+<li>is_locked()&#160;:&#160;<a class="el" href="classtk_1_1_mutex.html#acf574e35540879481f1f6e5452a504ab">tk::Mutex</a></li>
+<li>is_valid()&#160;:&#160;<a class="el" href="structtk_1_1_task_handle.html#afe8adf95998f82fe6d03a80700ef7927">tk::TaskHandle</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_l" name="index_l"></a>- l -</h3><ul>
+<li>lock()&#160;:&#160;<a class="el" href="classtk_1_1_mutex.html#a7f5645bba55df2db263f92a954802c27">tk::Mutex</a></li>
+<li>LockGuard()&#160;:&#160;<a class="el" href="classtk_1_1_lock_guard.html#a3a922c7edf84ce25ef67151c322bb0eb">tk::LockGuard&lt; Lockable &gt;</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_m" name="index_m"></a>- m -</h3><ul>
+<li>Mutex()&#160;:&#160;<a class="el" href="classtk_1_1_mutex.html#a8b17431db60f4ab48a3859b2ca722eb1">tk::Mutex</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_o" name="index_o"></a>- o -</h3><ul>
+<li>on_message()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#a1147554d6ddb64d822285ca5a03506a4">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+<li>on_start()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#afb31ec0d50d1ac97e6a4ce148a96f78d">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+<li>operator=()&#160;:&#160;<a class="el" href="classtk_1_1_lock_guard.html#a3f121f8aa1307f0f6e6e608cf138340c">tk::LockGuard&lt; Lockable &gt;</a>, <a class="el" href="classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417">tk::PreemptGuard</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_p" name="index_p"></a>- p -</h3><ul>
+<li>post()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#a224e6be4dca0d1500f2121e97bd0f92d">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+<li>PreemptGuard()&#160;:&#160;<a class="el" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">tk::PreemptGuard</a></li>
+<li>publish()&#160;:&#160;<a class="el" href="classtk_1_1_event_hub.html#a3a59a641ad3fe121c0da7e1c81dc300b">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_r" name="index_r"></a>- r -</h3><ul>
+<li>release()&#160;:&#160;<a class="el" href="classtk_1_1_semaphore.html#a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b">tk::Semaphore</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_s" name="index_s"></a>- s -</h3><ul>
+<li>Semaphore()&#160;:&#160;<a class="el" href="classtk_1_1_semaphore.html#a66c5ac90338a6fcc6a9c2f22f1586de8">tk::Semaphore</a></li>
+<li>start()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#ac98ec3132f2ded910a6899b030c06f3f">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+<li>subscribe()&#160;:&#160;<a class="el" href="classtk_1_1_event_hub.html#a50ebe29eaa2657604a1c85bf5125d490">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a></li>
+<li>subscriber_count()&#160;:&#160;<a class="el" href="classtk_1_1_event_hub.html#ac4cd6ce4e37b74385c7f4352a5516930">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_t" name="index_t"></a>- t -</h3><ul>
+<li>try_acquire()&#160;:&#160;<a class="el" href="classtk_1_1_semaphore.html#a3a246c8afc866dc438186d0a53cad5c2">tk::Semaphore</a></li>
+<li>try_lock()&#160;:&#160;<a class="el" href="classtk_1_1_mutex.html#a666dd03fb22c5cb855e3145f76a58b9c">tk::Mutex</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index_u" name="index_u"></a>- u -</h3><ul>
+<li>unlock()&#160;:&#160;<a class="el" href="classtk_1_1_mutex.html#ae8d5dfd5655b5aa54d63db6e0cf2f707">tk::Mutex</a></li>
+<li>unsubscribe()&#160;:&#160;<a class="el" href="classtk_1_1_event_hub.html#a09c779ce8c594ea44c831adfd7e287f8">tk::EventHub&lt; MsgType, MaxSubscribers &gt;</a></li>
+</ul>
+
+
+<h3 class="doxsection"><a id="index__7E" name="index__7E"></a>- ~ -</h3><ul>
+<li>~Actor()&#160;:&#160;<a class="el" href="classtk_1_1_actor.html#abfc63a514a3ae7cdbdf9ceee81c3b0fc">tk::Actor&lt; MsgType, QueueSize &gt;</a></li>
+<li>~LockGuard()&#160;:&#160;<a class="el" href="classtk_1_1_lock_guard.html#a52eeb50abee00bd0ed16cfa6618ce40f">tk::LockGuard&lt; Lockable &gt;</a></li>
+<li>~PreemptGuard()&#160;:&#160;<a class="el" href="classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86">tk::PreemptGuard</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 129 - 0
docs/html/functions_vars.html

@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Class Members - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('functions_vars.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all variables with links to the classes they belong to:</div><br/>
+<div class="qindex"><a class="qindex" href="#index_a">A</a><div class="alphasepar"></div><a class="qindex" href="#index_i">I</a><div class="alphasepar"></div><a class="qindex" href="#index_s">S</a></div>
+<ul>
+<li>arg&#160;:&#160;<a class="el" href="structtk_1_1_message.html#a570c5c394d2786708ce4830e4087aa9e">tk::Message</a></li>
+<li>id&#160;:&#160;<a class="el" href="structtk_1_1_message.html#a9a7de43cbf3da1821cf18ae924f94c52">tk::Message</a></li>
+<li>s&#160;:&#160;<a class="el" href="struct_fpu_ctx.html#ad2c3227e92b86055b7c97fbd0ee5c445">FpuCtx</a></li>
+<li>slot&#160;:&#160;<a class="el" href="structtk_1_1_task_handle.html#a425e4877384e92ad75fee388bd54a7c3">tk::TaskHandle</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 139 - 0
docs/html/globals.html

@@ -0,0 +1,139 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('globals.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all file members with links to the files they belong to:</div><br/>
+<div class="qindex"><a class="qindex" href="#index_f">F</a><div class="alphasepar"></div><a class="qindex" href="#index_i">I</a><div class="alphasepar"></div><a class="qindex" href="#index_t">T</a></div>
+<ul>
+<li>FPCCR_ASPEN&#160;:&#160;<a class="el" href="port__m33_8c.html#a7b53a215b14820fae8b8e7c387f5b3b3">port_m33.c</a></li>
+<li>FPCCR_LSPEN&#160;:&#160;<a class="el" href="port__m33_8c.html#a6addcb4c27c8943e5908a645233e4b1e">port_m33.c</a></li>
+<li>isr_systick()&#160;:&#160;<a class="el" href="scheduler_8cpp.html#a4728919288dacba97228c27b1c996108">scheduler.cpp</a></li>
+<li>TK_DEFAULT_STACK_SIZE&#160;:&#160;<a class="el" href="kernel_8hpp.html#afde197f9493ef5bdb5b715ce8b52148d">kernel.hpp</a></li>
+<li>tk_fpu_scratch&#160;:&#160;<a class="el" href="scheduler_8cpp.html#ad7a9acf1577e1fc4ff193d79edf9e254">scheduler.cpp</a></li>
+<li>TK_MAX_TASKS&#160;:&#160;<a class="el" href="kernel_8hpp.html#a22e1d9f532aa297014c125110226443c">kernel.hpp</a></li>
+<li>tk_port_init()&#160;:&#160;<a class="el" href="port__m33_8c.html#ac9d435a65b90e71074dd44f97b1103f8">port_m33.c</a>, <a class="el" href="port__m33_8h.html#ac9d435a65b90e71074dd44f97b1103f8">port_m33.h</a></li>
+<li>tk_port_make_frame()&#160;:&#160;<a class="el" href="port__m33_8h.html#a57df28e1d96b701ef5b9713cae179462">port_m33.h</a></li>
+<li>tk_port_start()&#160;:&#160;<a class="el" href="port__m33_8h.html#aaf06c4f2c498c86ed2c595d9bfe4caab">port_m33.h</a></li>
+<li>tk_switch_context()&#160;:&#160;<a class="el" href="scheduler_8cpp.html#a10d391ed68d7bf5406e9dbcd1c69d1da">scheduler.cpp</a></li>
+<li>TK_TASK&#160;:&#160;<a class="el" href="kernel_8hpp.html#af57e92069cc01608150a45032c5ad473">kernel.hpp</a></li>
+<li>tk_task_return_trampoline()&#160;:&#160;<a class="el" href="scheduler_8cpp.html#ad29ac857f58c5bf7c0220403c6624f32">scheduler.cpp</a></li>
+<li>TK_TICKS_PER_SEC&#160;:&#160;<a class="el" href="kernel_8hpp.html#a5c791131c5ad22ed87a8d3ca2cd57d33">kernel.hpp</a></li>
+<li>TK_TIME_SLICE_MS&#160;:&#160;<a class="el" href="kernel_8hpp.html#af32989639aecb5479b4239639fd133f7">kernel.hpp</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 132 - 0
docs/html/globals_defs.html

@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('globals_defs.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all macros with links to the files they belong to:</div><br/>
+<div class="qindex"><a class="qindex" href="#index_f">F</a><div class="alphasepar"></div><a class="qindex" href="#index_t">T</a></div>
+<ul>
+<li>FPCCR_ASPEN&#160;:&#160;<a class="el" href="port__m33_8c.html#a7b53a215b14820fae8b8e7c387f5b3b3">port_m33.c</a></li>
+<li>FPCCR_LSPEN&#160;:&#160;<a class="el" href="port__m33_8c.html#a6addcb4c27c8943e5908a645233e4b1e">port_m33.c</a></li>
+<li>TK_DEFAULT_STACK_SIZE&#160;:&#160;<a class="el" href="kernel_8hpp.html#afde197f9493ef5bdb5b715ce8b52148d">kernel.hpp</a></li>
+<li>TK_MAX_TASKS&#160;:&#160;<a class="el" href="kernel_8hpp.html#a22e1d9f532aa297014c125110226443c">kernel.hpp</a></li>
+<li>TK_TASK&#160;:&#160;<a class="el" href="kernel_8hpp.html#af57e92069cc01608150a45032c5ad473">kernel.hpp</a></li>
+<li>TK_TICKS_PER_SEC&#160;:&#160;<a class="el" href="kernel_8hpp.html#a5c791131c5ad22ed87a8d3ca2cd57d33">kernel.hpp</a></li>
+<li>TK_TIME_SLICE_MS&#160;:&#160;<a class="el" href="kernel_8hpp.html#af32989639aecb5479b4239639fd133f7">kernel.hpp</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 131 - 0
docs/html/globals_func.html

@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('globals_func.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions with links to the files they belong to:</div><br/>
+<div class="qindex"><a class="qindex" href="#index_i">I</a><div class="alphasepar"></div><a class="qindex" href="#index_t">T</a></div>
+<ul>
+<li>isr_systick()&#160;:&#160;<a class="el" href="scheduler_8cpp.html#a4728919288dacba97228c27b1c996108">scheduler.cpp</a></li>
+<li>tk_port_init()&#160;:&#160;<a class="el" href="port__m33_8c.html#ac9d435a65b90e71074dd44f97b1103f8">port_m33.c</a>, <a class="el" href="port__m33_8h.html#ac9d435a65b90e71074dd44f97b1103f8">port_m33.h</a></li>
+<li>tk_port_make_frame()&#160;:&#160;<a class="el" href="port__m33_8h.html#a57df28e1d96b701ef5b9713cae179462">port_m33.h</a></li>
+<li>tk_port_start()&#160;:&#160;<a class="el" href="port__m33_8h.html#aaf06c4f2c498c86ed2c595d9bfe4caab">port_m33.h</a></li>
+<li>tk_switch_context()&#160;:&#160;<a class="el" href="scheduler_8cpp.html#a10d391ed68d7bf5406e9dbcd1c69d1da">scheduler.cpp</a></li>
+<li>tk_task_return_trampoline()&#160;:&#160;<a class="el" href="scheduler_8cpp.html#ad29ac857f58c5bf7c0220403c6624f32">scheduler.cpp</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 126 - 0
docs/html/globals_vars.html

@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('globals_vars.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all variables with links to the files they belong to:</div><br/>
+<div class="qindex"><a class="qindex" href="#index_t">T</a></div>
+<ul>
+<li>tk_fpu_scratch&#160;:&#160;<a class="el" href="scheduler_8cpp.html#ad7a9acf1577e1fc4ff193d79edf9e254">scheduler.cpp</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 125 - 0
docs/html/index.html

@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('index.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tinykernel Documentation</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="doxygen_crawl.html"></a>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 299 - 0
docs/html/kernel_8hpp.html

@@ -0,0 +1,299 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/kernel.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('kernel_8hpp.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">kernel.hpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br />
+<code>#include &lt;stddef.h&gt;</code><br />
+<code>#include &quot;pico/runtime.h&quot;</code><br />
+</div>
+<p><a href="kernel_8hpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:tk_3A_3ATaskHandle" id="r_tk_3A_3ATaskHandle"><td class="memItemLeft">struct &#160;</td><td class="memItemRight"><a class="el" href="structtk_1_1_task_handle.html">tk::TaskHandle</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">タスクの識別ハンドル  <a href="structtk_1_1_task_handle.html#details">More...</a><br /></td></tr>
+<tr class="memitem:tk_3A_3APreemptGuard" id="r_tk_3A_3APreemptGuard"><td class="memItemLeft">class &#160;</td><td class="memItemRight"><a class="el" href="classtk_1_1_preempt_guard.html">tk::PreemptGuard</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">プリエンプション禁止をスコープ単位で安全に管理する RAII クラス  <a href="classtk_1_1_preempt_guard.html#details">More...</a><br /></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-namespaces" class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:tk" id="r_tk"><td class="memItemLeft">namespace &#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html">tk</a></td></tr>
+<tr class="memitem:tk_3A_3Adetail" id="r_tk_3A_3Adetail"><td class="memItemLeft">namespace &#160;</td><td class="memItemRight"><a class="el" href="namespacetk_1_1detail.html">tk::detail</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a5c791131c5ad22ed87a8d3ca2cd57d33" id="r_a5c791131c5ad22ed87a8d3ca2cd57d33"><td class="memItemLeft">#define&#160;</td><td class="memItemRight"><a class="el" href="#a5c791131c5ad22ed87a8d3ca2cd57d33">TK_TICKS_PER_SEC</a>&#160;&#160;&#160;1000u</td></tr>
+<tr class="memitem:af32989639aecb5479b4239639fd133f7" id="r_af32989639aecb5479b4239639fd133f7"><td class="memItemLeft">#define&#160;</td><td class="memItemRight"><a class="el" href="#af32989639aecb5479b4239639fd133f7">TK_TIME_SLICE_MS</a>&#160;&#160;&#160;10u</td></tr>
+<tr class="memitem:a22e1d9f532aa297014c125110226443c" id="r_a22e1d9f532aa297014c125110226443c"><td class="memItemLeft">#define&#160;</td><td class="memItemRight"><a class="el" href="#a22e1d9f532aa297014c125110226443c">TK_MAX_TASKS</a>&#160;&#160;&#160;32u</td></tr>
+<tr class="memitem:afde197f9493ef5bdb5b715ce8b52148d" id="r_afde197f9493ef5bdb5b715ce8b52148d"><td class="memItemLeft">#define&#160;</td><td class="memItemRight"><a class="el" href="#afde197f9493ef5bdb5b715ce8b52148d">TK_DEFAULT_STACK_SIZE</a>&#160;&#160;&#160;(4 * 1024)</td></tr>
+<tr class="memitem:af57e92069cc01608150a45032c5ad473" id="r_af57e92069cc01608150a45032c5ad473"><td class="memItemLeft">#define&#160;</td><td class="memItemRight"><a class="el" href="#af57e92069cc01608150a45032c5ad473">TK_TASK</a>(fn,  prio)</td></tr>
+<tr class="memdesc:af57e92069cc01608150a45032c5ad473"><td class="mdescLeft">&#160;</td><td class="mdescRight">リンク時にタスクを自動登録するマクロ (静的タスク登録)  <br /></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-typedef-members" class="groupheader"><a id="typedef-members" name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a8908cf1e54cdc4e14ac3003126722cfc" id="r_a8908cf1e54cdc4e14ac3003126722cfc"><td class="memItemLeft">using&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">tk::TaskFn</a> = void (*)(void* arg)</td></tr>
+<tr class="memitem:add371a241ec6c1695ef4e67935317edd" id="r_add371a241ec6c1695ef4e67935317edd"><td class="memItemLeft">using&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#add371a241ec6c1695ef4e67935317edd">tk::task_mask_t</a> = uint32_t</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-enum-members" class="groupheader"><a id="enum-members" name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:a3d47fbd63b95ed3b46bed70c2fa1e50e" id="r_a3d47fbd63b95ed3b46bed70c2fa1e50e"><td class="memItemLeft">enum &#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e">tk::Prio</a> : uint32_t { <a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75">tk::PRIO_REALTIME</a> = 1
+, <a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37">tk::PRIO_HIGH</a> = 5
+, <a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">tk::PRIO_NORMAL</a> = 9
+, <a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519">tk::PRIO_LOW</a> = 13
+ }</td></tr>
+<tr class="memdesc:a3d47fbd63b95ed3b46bed70c2fa1e50e"><td class="mdescLeft">&#160;</td><td class="mdescRight">タスクの優先度レベル  <a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e">More...</a><br /></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6e721332f5a7d85998345ed218de7394" id="r_a6e721332f5a7d85998345ed218de7394"><td class="memItemLeft"><a class="el" href="structtk_1_1_task_handle.html">TaskHandle</a>&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#a6e721332f5a7d85998345ed218de7394">tk::create</a> (<a class="el" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a> fn, void *arg=nullptr, uint32_t prio=<a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">PRIO_NORMAL</a>)</td></tr>
+<tr class="memdesc:a6e721332f5a7d85998345ed218de7394"><td class="mdescLeft">&#160;</td><td class="mdescRight">タスクを生成・登録します  <br /></td></tr>
+<tr class="memitem:a675f1829b87e2a43239b6f80a526d0ed" id="r_a675f1829b87e2a43239b6f80a526d0ed"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#a675f1829b87e2a43239b6f80a526d0ed">tk::start</a> ()</td></tr>
+<tr class="memdesc:a675f1829b87e2a43239b6f80a526d0ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">tinykernel スケジューラを起動します  <br /></td></tr>
+<tr class="memitem:a8081956b0a19b87d5b7c81b772373397" id="r_a8081956b0a19b87d5b7c81b772373397"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#a8081956b0a19b87d5b7c81b772373397">tk::yield</a> ()</td></tr>
+<tr class="memdesc:a8081956b0a19b87d5b7c81b772373397"><td class="mdescLeft">&#160;</td><td class="mdescRight">現在実行中のタスクを一時中断し、同優先度の他のタスクへ CPU を譲渡します  <br /></td></tr>
+<tr class="memitem:aae83f84121085578a7568437a8dc2447" id="r_aae83f84121085578a7568437a8dc2447"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#aae83f84121085578a7568437a8dc2447">tk::sleep_ms</a> (uint32_t ms)</td></tr>
+<tr class="memdesc:aae83f84121085578a7568437a8dc2447"><td class="mdescLeft">&#160;</td><td class="mdescRight">現在のタスクを指定時間スリープさせます  <br /></td></tr>
+<tr class="memitem:aba50cfc62cb8be71cf96df7f495a7a3d" id="r_aba50cfc62cb8be71cf96df7f495a7a3d"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#aba50cfc62cb8be71cf96df7f495a7a3d">tk::exit</a> (int code=0)</td></tr>
+<tr class="memdesc:aba50cfc62cb8be71cf96df7f495a7a3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">現在のタスクを終了・破棄します  <br /></td></tr>
+<tr class="memitem:a46e15375fba47cbd1a93278f17e77848" id="r_a46e15375fba47cbd1a93278f17e77848"><td class="memItemLeft">uint64_t&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#a46e15375fba47cbd1a93278f17e77848">tk::now_ms</a> ()</td></tr>
+<tr class="memdesc:a46e15375fba47cbd1a93278f17e77848"><td class="mdescLeft">&#160;</td><td class="mdescRight">システム起動時からの経過時間をミリ秒単位で取得します  <br /></td></tr>
+<tr class="memitem:a6540aa25eb8562f6d6c8b37977d6cfe8" id="r_a6540aa25eb8562f6d6c8b37977d6cfe8"><td class="memItemLeft">bool&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8">tk::lock</a> ()</td></tr>
+<tr class="memdesc:a6540aa25eb8562f6d6c8b37977d6cfe8"><td class="mdescLeft">&#160;</td><td class="mdescRight">ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります  <br /></td></tr>
+<tr class="memitem:a752b12f6862815c94a52347af52578b7" id="r_a752b12f6862815c94a52347af52578b7"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#a752b12f6862815c94a52347af52578b7">tk::unlock</a> (bool was_enabled)</td></tr>
+<tr class="memdesc:a752b12f6862815c94a52347af52578b7"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8" title="ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります">tk::lock()</a> で入ったクリティカルセクションを抜けます  <br /></td></tr>
+<tr class="memitem:a3254a7e2a9f5ed3abe44e8cf62a8dcfe" id="r_a3254a7e2a9f5ed3abe44e8cf62a8dcfe"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe">tk::preempt_disable</a> ()</td></tr>
+<tr class="memdesc:a3254a7e2a9f5ed3abe44e8cf62a8dcfe"><td class="mdescLeft">&#160;</td><td class="mdescRight">自コアのタスクスイッチ (プリエンプション) を一時的に禁止します  <br /></td></tr>
+<tr class="memitem:a70e6ee5f456e67a24ce13ff0fd04e4d9" id="r_a70e6ee5f456e67a24ce13ff0fd04e4d9"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9">tk::preempt_enable</a> ()</td></tr>
+<tr class="memdesc:a70e6ee5f456e67a24ce13ff0fd04e4d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">自コアのタスクスイッチ (プリエンプション) を再開します  <br /></td></tr>
+<tr class="memitem:a447e4ec89b3f2748451891219b7e3738" id="r_a447e4ec89b3f2748451891219b7e3738"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="namespacetk_1_1detail.html#a447e4ec89b3f2748451891219b7e3738">tk::detail::static_register</a> (const char *name, <a class="el" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a> fn, uint32_t prio)</td></tr>
+<tr class="memitem:a5b8fa6406a867edf8c4410fcb03c6523" id="r_a5b8fa6406a867edf8c4410fcb03c6523"><td class="memItemLeft">uint32_t&#160;</td><td class="memItemRight"><a class="el" href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">tk::detail::sched_lock</a> ()</td></tr>
+<tr class="memitem:a80be9b2429346faf161eab01f595684b" id="r_a80be9b2429346faf161eab01f595684b"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">tk::detail::sched_unlock</a> (uint32_t save)</td></tr>
+<tr class="memitem:a400363f36b5fb5dfc8aec11334471d0d" id="r_a400363f36b5fb5dfc8aec11334471d0d"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d">tk::detail::block_current_task_locked</a> ()</td></tr>
+<tr class="memitem:ab19385598f18560cb574cc86174ececa" id="r_ab19385598f18560cb574cc86174ececa"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa">tk::detail::wake_task_locked</a> (<a class="el" href="structtk_1_1_task_handle.html">TaskHandle</a> handle)</td></tr>
+<tr class="memitem:a73a80d92a172d565201f99e8f31278e4" id="r_a73a80d92a172d565201f99e8f31278e4"><td class="memItemLeft">uint8_t&#160;</td><td class="memItemRight"><a class="el" href="namespacetk_1_1detail.html#a73a80d92a172d565201f99e8f31278e4">tk::detail::current_task_slot</a> ()</td></tr>
+<tr class="memitem:a70ba35e0daee086ad86770f1e39c9b35" id="r_a70ba35e0daee086ad86770f1e39c9b35"><td class="memItemLeft">uint8_t&#160;</td><td class="memItemRight"><a class="el" href="namespacetk_1_1detail.html#a70ba35e0daee086ad86770f1e39c9b35">tk::detail::find_highest_prio_waiter</a> (<a class="el" href="namespacetk.html#add371a241ec6c1695ef4e67935317edd">task_mask_t</a> wait_mask)</td></tr>
+</table>
+<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
+<a id="afde197f9493ef5bdb5b715ce8b52148d" name="afde197f9493ef5bdb5b715ce8b52148d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afde197f9493ef5bdb5b715ce8b52148d">&#9670;&#160;</a></span>TK_DEFAULT_STACK_SIZE</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TK_DEFAULT_STACK_SIZE&#160;&#160;&#160;(4 * 1024)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>1タスクあたりのスタックサイズ (バイト) </p>
+
+</div>
+</div>
+<a id="a22e1d9f532aa297014c125110226443c" name="a22e1d9f532aa297014c125110226443c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a22e1d9f532aa297014c125110226443c">&#9670;&#160;</a></span>TK_MAX_TASKS</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TK_MAX_TASKS&#160;&#160;&#160;32u</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>最大タスク数 (スロット0はCore0アイドル、スロット1はCore1アイドル専用) </p>
+
+</div>
+</div>
+<a id="af57e92069cc01608150a45032c5ad473" name="af57e92069cc01608150a45032c5ad473"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af57e92069cc01608150a45032c5ad473">&#9670;&#160;</a></span>TK_TASK</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TK_TASK</td>
+          <td>(</td>
+          <td class="paramtype"></td>          <td class="paramname"><span class="paramname"><em>fn</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"></td>          <td class="paramname"><span class="paramname"><em>prio</em></span>&#160;)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> tk_register_##fn(<span class="keywordtype">void</span>) {                              \</div>
+<div class="line">    ::tk::detail::static_register(#fn, fn, (prio));               \</div>
+<div class="line">}                                                                 \</div>
+<div class="line">PICO_RUNTIME_INIT_FUNC(tk_register_##fn, <span class="stringliteral">&quot;ZZ900&quot;</span>);</div>
+</div><!-- fragment -->
+<p>リンク時にタスクを自動登録するマクロ (静的タスク登録) </p>
+<p>main() の開始前に Pico SDK のランタイムイニシャライザを利用してタスクを登録します。</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fn</td><td>タスク関数名 (void fn(void* arg)) </td></tr>
+    <tr><td class="paramname">prio</td><td>タスク優先度 (例: <a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca" title="通常優先度 (デフォルト)">tk::PRIO_NORMAL</a>) </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a5c791131c5ad22ed87a8d3ca2cd57d33" name="a5c791131c5ad22ed87a8d3ca2cd57d33"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5c791131c5ad22ed87a8d3ca2cd57d33">&#9670;&#160;</a></span>TK_TICKS_PER_SEC</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TK_TICKS_PER_SEC&#160;&#160;&#160;1000u</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>1秒あたりのタイマースケジューラtick数 (Hz) </p>
+
+</div>
+</div>
+<a id="af32989639aecb5479b4239639fd133f7" name="af32989639aecb5479b4239639fd133f7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af32989639aecb5479b4239639fd133f7">&#9670;&#160;</a></span>TK_TIME_SLICE_MS</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TK_TIME_SLICE_MS&#160;&#160;&#160;10u</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>同一優先度タスク間のタイムスライス時間 (ミリ秒) </p>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li><li class="navelem"><a href="dir_34ae86e414c9a960c5c39d1d6b15c7a8.html">include</a></li><li class="navelem"><a href="dir_91e9b2eecded889eb8782a5ba7843b6a.html">tinykernel</a></li><li class="navelem"><a href="kernel_8hpp.html">kernel.hpp</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 35 - 0
docs/html/kernel_8hpp.js

@@ -0,0 +1,35 @@
+var kernel_8hpp =
+[
+    [ "tk::TaskHandle", "structtk_1_1_task_handle.html", "structtk_1_1_task_handle" ],
+    [ "tk::PreemptGuard", "classtk_1_1_preempt_guard.html", "classtk_1_1_preempt_guard" ],
+    [ "TK_DEFAULT_STACK_SIZE", "kernel_8hpp.html#afde197f9493ef5bdb5b715ce8b52148d", null ],
+    [ "TK_MAX_TASKS", "kernel_8hpp.html#a22e1d9f532aa297014c125110226443c", null ],
+    [ "TK_TASK", "kernel_8hpp.html#af57e92069cc01608150a45032c5ad473", null ],
+    [ "TK_TICKS_PER_SEC", "kernel_8hpp.html#a5c791131c5ad22ed87a8d3ca2cd57d33", null ],
+    [ "TK_TIME_SLICE_MS", "kernel_8hpp.html#af32989639aecb5479b4239639fd133f7", null ],
+    [ "tk::task_mask_t", "namespacetk.html#add371a241ec6c1695ef4e67935317edd", null ],
+    [ "tk::TaskFn", "namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc", null ],
+    [ "tk::Prio", "namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e", [
+      [ "tk::PRIO_REALTIME", "namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75", null ],
+      [ "tk::PRIO_HIGH", "namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37", null ],
+      [ "tk::PRIO_NORMAL", "namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca", null ],
+      [ "tk::PRIO_LOW", "namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519", null ]
+    ] ],
+    [ "tk::detail::block_current_task_locked", "namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d", null ],
+    [ "tk::create", "namespacetk.html#a6e721332f5a7d85998345ed218de7394", null ],
+    [ "tk::detail::current_task_slot", "namespacetk_1_1detail.html#a73a80d92a172d565201f99e8f31278e4", null ],
+    [ "tk::exit", "namespacetk.html#aba50cfc62cb8be71cf96df7f495a7a3d", null ],
+    [ "tk::detail::find_highest_prio_waiter", "namespacetk_1_1detail.html#a70ba35e0daee086ad86770f1e39c9b35", null ],
+    [ "tk::lock", "namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8", null ],
+    [ "tk::now_ms", "namespacetk.html#a46e15375fba47cbd1a93278f17e77848", null ],
+    [ "tk::preempt_disable", "namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe", null ],
+    [ "tk::preempt_enable", "namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9", null ],
+    [ "tk::detail::sched_lock", "namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523", null ],
+    [ "tk::detail::sched_unlock", "namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b", null ],
+    [ "tk::sleep_ms", "namespacetk.html#aae83f84121085578a7568437a8dc2447", null ],
+    [ "tk::start", "namespacetk.html#a675f1829b87e2a43239b6f80a526d0ed", null ],
+    [ "tk::detail::static_register", "namespacetk_1_1detail.html#a447e4ec89b3f2748451891219b7e3738", null ],
+    [ "tk::unlock", "namespacetk.html#a752b12f6862815c94a52347af52578b7", null ],
+    [ "tk::detail::wake_task_locked", "namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa", null ],
+    [ "tk::yield", "namespacetk.html#a8081956b0a19b87d5b7c81b772373397", null ]
+];

+ 257 - 0
docs/html/kernel_8hpp_source.html

@@ -0,0 +1,257 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/include/tinykernel/kernel.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('kernel_8hpp_source.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">kernel.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="kernel_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">// tinykernel: minimal preemptive task scheduler for RP2350 (Pico 2, Cortex-M33)</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="preprocessor">#pragma once</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span> </div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="preprocessor">#include &lt;stddef.h&gt;</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="preprocessor">#include &quot;pico/runtime.h&quot;</span>  <span class="comment">// PICO_RUNTIME_INIT_FUNC (static task registration)</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="preprocessor">#ifndef TK_TICKS_PER_SEC</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"><a class="line" href="kernel_8hpp.html#a5c791131c5ad22ed87a8d3ca2cd57d33">   11</a></span><span class="preprocessor">#define TK_TICKS_PER_SEC 1000u</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="preprocessor">#ifndef TK_TIME_SLICE_MS</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"><a class="line" href="kernel_8hpp.html#af32989639aecb5479b4239639fd133f7">   16</a></span><span class="preprocessor">#define TK_TIME_SLICE_MS 10u</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span></div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef TK_MAX_TASKS</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"><a class="line" href="kernel_8hpp.html#a22e1d9f532aa297014c125110226443c">   21</a></span><span class="preprocessor">#define TK_MAX_TASKS 32u</span></div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span></div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="preprocessor">#ifndef TK_DEFAULT_STACK_SIZE</span></div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="kernel_8hpp.html#afde197f9493ef5bdb5b715ce8b52148d">   26</a></span><span class="preprocessor">#define TK_DEFAULT_STACK_SIZE (4 * 1024)</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacetk.html">tk</a> {</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">   32</a></span><span class="keyword">using </span><a class="code hl_typedef" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a> = void (*)(<span class="keywordtype">void</span>* arg);</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span></div>
+<div class="foldopen" id="foldopen00039" data-start="{" data-end="};">
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e">   39</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e">Prio</a> : uint32_t {</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75">   40</a></span>    <a class="code hl_enumvalue" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75">PRIO_REALTIME</a> = 1,   </div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37">   41</a></span>    <a class="code hl_enumvalue" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37">PRIO_HIGH</a>     = 5,   </div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">   42</a></span>    <a class="code hl_enumvalue" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">PRIO_NORMAL</a>   = 9,   </div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519">   43</a></span>    <a class="code hl_enumvalue" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519">PRIO_LOW</a>      = 13,  </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>};</div>
+</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span></div>
+<div class="foldopen" id="foldopen00049" data-start="{" data-end="};">
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="structtk_1_1_task_handle.html">   49</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structtk_1_1_task_handle.html">TaskHandle</a> {</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="structtk_1_1_task_handle.html#a425e4877384e92ad75fee388bd54a7c3">   50</a></span>    uint8_t <a class="code hl_variable" href="structtk_1_1_task_handle.html#a425e4877384e92ad75fee388bd54a7c3">slot</a>{0xFF};  </div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span></div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="structtk_1_1_task_handle.html#afe8adf95998f82fe6d03a80700ef7927">   53</a></span>    <span class="keywordtype">bool</span> <a class="code hl_function" href="structtk_1_1_task_handle.html#afe8adf95998f82fe6d03a80700ef7927">is_valid</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code hl_variable" href="structtk_1_1_task_handle.html#a425e4877384e92ad75fee388bd54a7c3">slot</a> != 0xFF; }</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>};</div>
+</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span></div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>TaskHandle <a class="code hl_function" href="namespacetk.html#a6e721332f5a7d85998345ed218de7394">create</a>(<a class="code hl_typedef" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a> fn, <span class="keywordtype">void</span>* arg = <span class="keyword">nullptr</span>, uint32_t prio = <a class="code hl_enumvalue" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">PRIO_NORMAL</a>);</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span></div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#a675f1829b87e2a43239b6f80a526d0ed">start</a>();</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span></div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#a8081956b0a19b87d5b7c81b772373397">yield</a>();</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span></div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#aae83f84121085578a7568437a8dc2447">sleep_ms</a>(uint32_t ms);</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span></div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#aba50cfc62cb8be71cf96df7f495a7a3d">exit</a>(<span class="keywordtype">int</span> code = 0);</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span></div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>uint64_t <a class="code hl_function" href="namespacetk.html#a46e15375fba47cbd1a93278f17e77848">now_ms</a>();</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span></div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span><span class="keywordtype">bool</span> <a class="code hl_function" href="namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8">lock</a>();</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span></div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#a752b12f6862815c94a52347af52578b7">unlock</a>(<span class="keywordtype">bool</span> was_enabled);</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span></div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe">preempt_disable</a>();</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span></div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9">preempt_enable</a>();</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span></div>
+<div class="foldopen" id="foldopen00156" data-start="{" data-end="};">
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"><a class="line" href="classtk_1_1_preempt_guard.html">  156</a></span><span class="keyword">class </span><a class="code hl_function" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a> {</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"><a class="line" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">  158</a></span>    <a class="code hl_function" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a>() { <a class="code hl_function" href="namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe">preempt_disable</a>(); }</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"><a class="line" href="classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86">  159</a></span>    <a class="code hl_function" href="classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86">~PreemptGuard</a>() { <a class="code hl_function" href="namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9">preempt_enable</a>(); }</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="classtk_1_1_preempt_guard.html#a360ac2b073064abc0f21db3127e7f389">  161</a></span>    <a class="code hl_function" href="classtk_1_1_preempt_guard.html#a360ac2b073064abc0f21db3127e7f389">PreemptGuard</a>(<span class="keyword">const</span> <a class="code hl_function" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a>&amp;) = <span class="keyword">delete</span>;</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417">  162</a></span>    <a class="code hl_function" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a>&amp; <a class="code hl_function" href="classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417">operator=</a>(<span class="keyword">const</span> <a class="code hl_function" href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">PreemptGuard</a>&amp;) = <span class="keyword">delete</span>;</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span>};</div>
+</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"><a class="line" href="namespacetk.html#add371a241ec6c1695ef4e67935317edd">  165</a></span><span class="keyword">using </span><a class="code hl_typedef" href="namespacetk.html#add371a241ec6c1695ef4e67935317edd">task_mask_t</a> = uint32_t;</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="foldopen" id="foldopen00167" data-start="{" data-end="}">
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"><a class="line" href="namespacetk_1_1detail.html">  167</a></span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacetk_1_1detail.html">detail</a> {</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk_1_1detail.html#a447e4ec89b3f2748451891219b7e3738">static_register</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <a class="code hl_typedef" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a> fn, uint32_t prio);</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span>uint32_t <a class="code hl_function" href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">sched_lock</a>();</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">sched_unlock</a>(uint32_t save);</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d">block_current_task_locked</a>();</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa">wake_task_locked</a>(<a class="code hl_struct" href="structtk_1_1_task_handle.html">TaskHandle</a> handle);</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span>uint8_t <a class="code hl_function" href="namespacetk_1_1detail.html#a73a80d92a172d565201f99e8f31278e4">current_task_slot</a>();</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno">  174</span>uint8_t <a class="code hl_function" href="namespacetk_1_1detail.html#a70ba35e0daee086ad86770f1e39c9b35">find_highest_prio_waiter</a>(<a class="code hl_typedef" href="namespacetk.html#add371a241ec6c1695ef4e67935317edd">task_mask_t</a> wait_mask);</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span>}  <span class="comment">// namespace detail</span></div>
+</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span>}  <span class="comment">// namespace tk</span></div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span></div>
+<div class="foldopen" id="foldopen00187" data-start="" data-end="">
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"><a class="line" href="kernel_8hpp.html#af57e92069cc01608150a45032c5ad473">  187</a></span><span class="preprocessor">#define TK_TASK(fn, prio)                                              \</span></div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span><span class="preprocessor">    static void tk_register_##fn(void) {                              \</span></div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span><span class="preprocessor">        ::tk::detail::static_register(#fn, fn, (prio));               \</span></div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span><span class="preprocessor">    }                                                                 \</span></div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span><span class="preprocessor">    PICO_RUNTIME_INIT_FUNC(tk_register_##fn, &quot;ZZ900&quot;);</span></div>
+</div>
+<div class="ttc" id="aclasstk_1_1_preempt_guard_html_a329ea4d806861d9455168aeb01f41f86"><div class="ttname"><a href="classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86">tk::PreemptGuard::~PreemptGuard</a></div><div class="ttdeci">~PreemptGuard()</div><div class="ttdef"><b>Definition</b> kernel.hpp:159</div></div>
+<div class="ttc" id="aclasstk_1_1_preempt_guard_html_a360ac2b073064abc0f21db3127e7f389"><div class="ttname"><a href="classtk_1_1_preempt_guard.html#a360ac2b073064abc0f21db3127e7f389">tk::PreemptGuard::PreemptGuard</a></div><div class="ttdeci">PreemptGuard(const PreemptGuard &amp;)=delete</div></div>
+<div class="ttc" id="aclasstk_1_1_preempt_guard_html_a39e396ce51420c942e7d6549ec63f88e"><div class="ttname"><a href="classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e">tk::PreemptGuard::PreemptGuard</a></div><div class="ttdeci">PreemptGuard()</div><div class="ttdef"><b>Definition</b> kernel.hpp:158</div></div>
+<div class="ttc" id="aclasstk_1_1_preempt_guard_html_ad651c301bd81f95866e1cd380c2a2417"><div class="ttname"><a href="classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417">tk::PreemptGuard::operator=</a></div><div class="ttdeci">PreemptGuard &amp; operator=(const PreemptGuard &amp;)=delete</div></div>
+<div class="ttc" id="anamespacetk_1_1detail_html"><div class="ttname"><a href="namespacetk_1_1detail.html">tk::detail</a></div><div class="ttdef"><b>Definition</b> kernel.hpp:167</div></div>
+<div class="ttc" id="anamespacetk_1_1detail_html_a400363f36b5fb5dfc8aec11334471d0d"><div class="ttname"><a href="namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d">tk::detail::block_current_task_locked</a></div><div class="ttdeci">void block_current_task_locked()</div><div class="ttdef"><b>Definition</b> scheduler.cpp:333</div></div>
+<div class="ttc" id="anamespacetk_1_1detail_html_a447e4ec89b3f2748451891219b7e3738"><div class="ttname"><a href="namespacetk_1_1detail.html#a447e4ec89b3f2748451891219b7e3738">tk::detail::static_register</a></div><div class="ttdeci">void static_register(const char *name, TaskFn fn, uint32_t prio)</div><div class="ttdef"><b>Definition</b> scheduler.cpp:188</div></div>
+<div class="ttc" id="anamespacetk_1_1detail_html_a5b8fa6406a867edf8c4410fcb03c6523"><div class="ttname"><a href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">tk::detail::sched_lock</a></div><div class="ttdeci">uint32_t sched_lock()</div><div class="ttdef"><b>Definition</b> scheduler.cpp:325</div></div>
+<div class="ttc" id="anamespacetk_1_1detail_html_a70ba35e0daee086ad86770f1e39c9b35"><div class="ttname"><a href="namespacetk_1_1detail.html#a70ba35e0daee086ad86770f1e39c9b35">tk::detail::find_highest_prio_waiter</a></div><div class="ttdeci">uint8_t find_highest_prio_waiter(task_mask_t wait_mask)</div><div class="ttdef"><b>Definition</b> scheduler.cpp:355</div></div>
+<div class="ttc" id="anamespacetk_1_1detail_html_a73a80d92a172d565201f99e8f31278e4"><div class="ttname"><a href="namespacetk_1_1detail.html#a73a80d92a172d565201f99e8f31278e4">tk::detail::current_task_slot</a></div><div class="ttdeci">uint8_t current_task_slot()</div><div class="ttdef"><b>Definition</b> scheduler.cpp:349</div></div>
+<div class="ttc" id="anamespacetk_1_1detail_html_a80be9b2429346faf161eab01f595684b"><div class="ttname"><a href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">tk::detail::sched_unlock</a></div><div class="ttdeci">void sched_unlock(uint32_t save)</div><div class="ttdef"><b>Definition</b> scheduler.cpp:329</div></div>
+<div class="ttc" id="anamespacetk_1_1detail_html_ab19385598f18560cb574cc86174ececa"><div class="ttname"><a href="namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa">tk::detail::wake_task_locked</a></div><div class="ttdeci">void wake_task_locked(TaskHandle handle)</div><div class="ttdef"><b>Definition</b> scheduler.cpp:340</div></div>
+<div class="ttc" id="anamespacetk_html"><div class="ttname"><a href="namespacetk.html">tk</a></div><div class="ttdef"><b>Definition</b> actor.hpp:9</div></div>
+<div class="ttc" id="anamespacetk_html_a3254a7e2a9f5ed3abe44e8cf62a8dcfe"><div class="ttname"><a href="namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe">tk::preempt_disable</a></div><div class="ttdeci">void preempt_disable()</div><div class="ttdoc">自コアのタスクスイッチ (プリエンプション) を一時的に禁止します</div><div class="ttdef"><b>Definition</b> scheduler.cpp:369</div></div>
+<div class="ttc" id="anamespacetk_html_a3d47fbd63b95ed3b46bed70c2fa1e50e"><div class="ttname"><a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e">tk::Prio</a></div><div class="ttdeci">Prio</div><div class="ttdoc">タスクの優先度レベル</div><div class="ttdef"><b>Definition</b> kernel.hpp:39</div></div>
+<div class="ttc" id="anamespacetk_html_a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca"><div class="ttname"><a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">tk::PRIO_NORMAL</a></div><div class="ttdeci">@ PRIO_NORMAL</div><div class="ttdoc">通常優先度 (デフォルト)</div><div class="ttdef"><b>Definition</b> kernel.hpp:42</div></div>
+<div class="ttc" id="anamespacetk_html_a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37"><div class="ttname"><a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37">tk::PRIO_HIGH</a></div><div class="ttdeci">@ PRIO_HIGH</div><div class="ttdoc">高優先度</div><div class="ttdef"><b>Definition</b> kernel.hpp:41</div></div>
+<div class="ttc" id="anamespacetk_html_a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75"><div class="ttname"><a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75">tk::PRIO_REALTIME</a></div><div class="ttdeci">@ PRIO_REALTIME</div><div class="ttdoc">リアルタイム最優先</div><div class="ttdef"><b>Definition</b> kernel.hpp:40</div></div>
+<div class="ttc" id="anamespacetk_html_a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519"><div class="ttname"><a href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519">tk::PRIO_LOW</a></div><div class="ttdeci">@ PRIO_LOW</div><div class="ttdoc">低優先度</div><div class="ttdef"><b>Definition</b> kernel.hpp:43</div></div>
+<div class="ttc" id="anamespacetk_html_a46e15375fba47cbd1a93278f17e77848"><div class="ttname"><a href="namespacetk.html#a46e15375fba47cbd1a93278f17e77848">tk::now_ms</a></div><div class="ttdeci">uint64_t now_ms()</div><div class="ttdoc">システム起動時からの経過時間をミリ秒単位で取得します</div><div class="ttdef"><b>Definition</b> scheduler.cpp:312</div></div>
+<div class="ttc" id="anamespacetk_html_a6540aa25eb8562f6d6c8b37977d6cfe8"><div class="ttname"><a href="namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8">tk::lock</a></div><div class="ttdeci">bool lock()</div><div class="ttdoc">ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります</div><div class="ttdef"><b>Definition</b> scheduler.cpp:316</div></div>
+<div class="ttc" id="anamespacetk_html_a675f1829b87e2a43239b6f80a526d0ed"><div class="ttname"><a href="namespacetk.html#a675f1829b87e2a43239b6f80a526d0ed">tk::start</a></div><div class="ttdeci">void start()</div><div class="ttdoc">tinykernel スケジューラを起動します</div><div class="ttdef"><b>Definition</b> scheduler.cpp:247</div></div>
+<div class="ttc" id="anamespacetk_html_a6e721332f5a7d85998345ed218de7394"><div class="ttname"><a href="namespacetk.html#a6e721332f5a7d85998345ed218de7394">tk::create</a></div><div class="ttdeci">TaskHandle create(TaskFn fn, void *arg=nullptr, uint32_t prio=PRIO_NORMAL)</div><div class="ttdoc">タスクを生成・登録します</div><div class="ttdef"><b>Definition</b> scheduler.cpp:204</div></div>
+<div class="ttc" id="anamespacetk_html_a70e6ee5f456e67a24ce13ff0fd04e4d9"><div class="ttname"><a href="namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9">tk::preempt_enable</a></div><div class="ttdeci">void preempt_enable()</div><div class="ttdoc">自コアのタスクスイッチ (プリエンプション) を再開します</div><div class="ttdef"><b>Definition</b> scheduler.cpp:376</div></div>
+<div class="ttc" id="anamespacetk_html_a752b12f6862815c94a52347af52578b7"><div class="ttname"><a href="namespacetk.html#a752b12f6862815c94a52347af52578b7">tk::unlock</a></div><div class="ttdeci">void unlock(bool was_enabled)</div><div class="ttdoc">tk::lock() で入ったクリティカルセクションを抜けます</div><div class="ttdef"><b>Definition</b> scheduler.cpp:321</div></div>
+<div class="ttc" id="anamespacetk_html_a8081956b0a19b87d5b7c81b772373397"><div class="ttname"><a href="namespacetk.html#a8081956b0a19b87d5b7c81b772373397">tk::yield</a></div><div class="ttdeci">void yield()</div><div class="ttdoc">現在実行中のタスクを一時中断し、同優先度の他のタスクへ CPU を譲渡します</div><div class="ttdef"><b>Definition</b> scheduler.cpp:276</div></div>
+<div class="ttc" id="anamespacetk_html_a8908cf1e54cdc4e14ac3003126722cfc"><div class="ttname"><a href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">tk::TaskFn</a></div><div class="ttdeci">void(*)(void *arg) TaskFn</div><div class="ttdef"><b>Definition</b> kernel.hpp:32</div></div>
+<div class="ttc" id="anamespacetk_html_aae83f84121085578a7568437a8dc2447"><div class="ttname"><a href="namespacetk.html#aae83f84121085578a7568437a8dc2447">tk::sleep_ms</a></div><div class="ttdeci">void sleep_ms(uint32_t ms)</div><div class="ttdoc">現在のタスクを指定時間スリープさせます</div><div class="ttdef"><b>Definition</b> scheduler.cpp:284</div></div>
+<div class="ttc" id="anamespacetk_html_aba50cfc62cb8be71cf96df7f495a7a3d"><div class="ttname"><a href="namespacetk.html#aba50cfc62cb8be71cf96df7f495a7a3d">tk::exit</a></div><div class="ttdeci">void exit(int code=0)</div><div class="ttdoc">現在のタスクを終了・破棄します</div><div class="ttdef"><b>Definition</b> scheduler.cpp:298</div></div>
+<div class="ttc" id="anamespacetk_html_add371a241ec6c1695ef4e67935317edd"><div class="ttname"><a href="namespacetk.html#add371a241ec6c1695ef4e67935317edd">tk::task_mask_t</a></div><div class="ttdeci">uint32_t task_mask_t</div><div class="ttdef"><b>Definition</b> kernel.hpp:165</div></div>
+<div class="ttc" id="astructtk_1_1_task_handle_html"><div class="ttname"><a href="structtk_1_1_task_handle.html">tk::TaskHandle</a></div><div class="ttdoc">タスクの識別ハンドル</div><div class="ttdef"><b>Definition</b> kernel.hpp:49</div></div>
+<div class="ttc" id="astructtk_1_1_task_handle_html_a425e4877384e92ad75fee388bd54a7c3"><div class="ttname"><a href="structtk_1_1_task_handle.html#a425e4877384e92ad75fee388bd54a7c3">tk::TaskHandle::slot</a></div><div class="ttdeci">uint8_t slot</div><div class="ttdoc">タスクスロット番号 (0xFF は無効/失敗)</div><div class="ttdef"><b>Definition</b> kernel.hpp:50</div></div>
+<div class="ttc" id="astructtk_1_1_task_handle_html_afe8adf95998f82fe6d03a80700ef7927"><div class="ttname"><a href="structtk_1_1_task_handle.html#afe8adf95998f82fe6d03a80700ef7927">tk::TaskHandle::is_valid</a></div><div class="ttdeci">bool is_valid() const</div><div class="ttdef"><b>Definition</b> kernel.hpp:53</div></div>
+</div><!-- fragment --></div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li><li class="navelem"><a href="dir_34ae86e414c9a960c5c39d1d6b15c7a8.html">include</a></li><li class="navelem"><a href="dir_91e9b2eecded889eb8782a5ba7843b6a.html">tinykernel</a></li><li class="navelem"><a href="kernel_8hpp.html">kernel.hpp</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 589 - 0
docs/html/menu.js

@@ -0,0 +1,589 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+ */
+function initMenu(relPath,treeview) {
+
+  const SHOW_DELAY = 250;  // 250ms delay before showing
+  const HIDE_DELAY = 500;  // 500ms delay before hiding
+  const SLIDE_DELAY = 250; // 250ms slide up/down delay
+  const WHEEL_STEP = 30;   // 30 pixel per mouse wheel tick
+  const ARROW_STEP = 5;    // 5 pixel when hovering arrow up/down
+  const ARROW_POLL_INTERVAL = 20; // 20ms per arrow up/down check
+  const MOBILE_WIDTH = 768; // switch point for mobile/desktop mode
+
+  // Helper function for slideDown animation
+  function slideDown(element, duration, callback) {
+    if (element.dataset.animating) return;
+    element.dataset.animating = 'true';
+
+    element.style.removeProperty('display');
+    let display = window.getComputedStyle(element).display;
+    if (display === 'none') display = 'block';
+    element.style.display = display;
+    const height = element.offsetHeight;
+    element.style.overflow = 'hidden';
+    element.style.height = 0;
+    element.offsetHeight; // force reflow
+    element.style.transitionProperty = 'height';
+    element.style.transitionDuration = duration + 'ms';
+    element.style.height = height + 'px';
+    window.setTimeout(() => {
+      element.style.removeProperty('height');
+      element.style.removeProperty('overflow');
+      element.style.removeProperty('transition-duration');
+      element.style.removeProperty('transition-property');
+      delete element.dataset.animating;
+      if (callback) callback();
+    }, duration);
+  }
+
+  // Helper function for slideUp animation
+  function slideUp(element, duration, callback) {
+    if (element.dataset.animating) return;
+    element.dataset.animating = 'true';
+
+    element.style.transitionProperty = 'height';
+    element.style.transitionDuration = duration + 'ms';
+    element.style.height = element.offsetHeight + 'px';
+    element.offsetHeight; // force reflow
+    element.style.overflow = 'hidden';
+    element.style.height = 0;
+    window.setTimeout(() => {
+      element.style.display = 'none';
+      element.style.removeProperty('height');
+      element.style.removeProperty('overflow');
+      element.style.removeProperty('transition-duration');
+      element.style.removeProperty('transition-property');
+      delete element.dataset.animating;
+      if (callback) callback();
+    }, duration);
+  }
+
+  // Helper to create the menu tree structure
+  function makeTree(data,relPath,topLevel=false) {
+    let result='';
+    if ('children' in data) {
+      if (!topLevel) {
+        result+='<ul>';
+      }
+      for (let i in data.children) {
+        let url;
+        const link = data.children[i].url;
+        if (link.substring(0,1)=='^') {
+          url = link.substring(1);
+        } else {
+          url = relPath+link;
+        }
+        result+='<li><a href="'+url+'">'+
+                                data.children[i].text+'</a>'+
+                                makeTree(data.children[i],relPath)+'</li>';
+      }
+      if (!topLevel) {
+        result+='</ul>';
+      }
+    }
+    return result;
+  }
+
+  const mainNav = document.getElementById('main-nav');
+  if (mainNav && mainNav.children.length > 0) {
+    const firstChild = mainNav.children[0];
+    firstChild.insertAdjacentHTML('afterbegin', makeTree(menudata, relPath, true));
+  }
+
+  const searchBoxPos2 = document.getElementById('searchBoxPos2');
+  let searchBoxContents = searchBoxPos2 ? searchBoxPos2.innerHTML : '';
+  const mainMenuState = document.getElementById('main-menu-state');
+  let prevWidth = 0;
+
+  const initResizableIfExists = function() {
+    if (typeof initResizableFunc === 'function') initResizableFunc(treeview);
+  }
+
+  // Dropdown menu functionality to replace smartmenus
+  let closeAllDropdowns = null; // Will be set by initDropdownMenu
+
+  const isMobile = () => window.innerWidth < MOBILE_WIDTH;
+
+  if (mainMenuState) {
+    const mainMenu = document.getElementById('main-menu');
+    const searchBoxPos1 = document.getElementById('searchBoxPos1');
+
+    // animate mobile main menu
+    mainMenuState.addEventListener('change', function() {
+      if (this.checked) {
+        slideDown(mainMenu, SLIDE_DELAY, () => {
+          mainMenu.style.display = 'block';
+          initResizableIfExists();
+        });
+      } else {
+        slideUp(mainMenu, SLIDE_DELAY, () => {
+          mainMenu.style.display = 'none';
+          initResizableIfExists();
+        });
+      }
+    });
+
+    // set default menu visibility
+    const resetState = function() {
+      const newWidth = window.innerWidth;
+      if (newWidth !== prevWidth) {
+        // Close all open dropdown menus when switching between mobile/desktop modes
+        if (closeAllDropdowns) {
+          closeAllDropdowns();
+        }
+
+        if (newWidth < MOBILE_WIDTH) {
+          mainMenuState.checked = false;
+          mainMenu.style.display = 'none';
+          if (searchBoxPos2) {
+            searchBoxPos2.innerHTML = '';
+            searchBoxPos2.style.display = 'none';
+          }
+          if (searchBoxPos1) {
+            searchBoxPos1.innerHTML = searchBoxContents;
+            searchBoxPos1.style.display = '';
+          }
+        } else {
+          mainMenu.style.display = '';
+          if (searchBoxPos1) {
+            searchBoxPos1.innerHTML = '';
+            searchBoxPos1.style.display = 'none';
+          }
+          if (searchBoxPos2) {
+            searchBoxPos2.innerHTML = searchBoxContents;
+            searchBoxPos2.style.display = '';
+          }
+        }
+        if (typeof searchBox !== 'undefined') {
+          searchBox.CloseResultsWindow();
+        }
+        prevWidth = newWidth;
+      }
+    }
+
+    if (document.readyState === 'loading') {
+      document.addEventListener('DOMContentLoaded', function() {
+        resetState();
+        initResizableIfExists();
+      });
+    } else {
+      resetState();
+      initResizableIfExists();
+    }
+    window.addEventListener('resize', resetState);
+  } else {
+    initResizableIfExists();
+  }
+
+  function initDropdownMenu() {
+    const mainMenu = document.getElementById('main-menu');
+    if (!mainMenu) return;
+
+    const menuItems = mainMenu.querySelectorAll('li');
+
+    // Helper function to position nested submenu with viewport checking
+    function positionNestedSubmenu(submenu, link) {
+      const viewport = {
+        height: window.innerHeight,
+        scrollY: window.scrollY
+      };
+
+      // Set initial position - top aligned with parent (next to arrow)
+      submenu.style.top = '0';
+      if (isMobile()) {
+        submenu.style.marginLeft = 0;
+      } else {
+        submenu.style.marginLeft = link.offsetWidth + 'px';
+      }
+
+      // Get submenu dimensions and position
+      const submenuRect = submenu.getBoundingClientRect();
+      const submenuHeight = submenuRect.height;
+      const submenuTop = submenuRect.top;
+      const submenuBottom = submenuRect.bottom+1; // add space for border
+
+      // Check if submenu fits in viewport
+      const fitsAbove = submenuTop >= 0;
+      const fitsBelow = submenuBottom <= viewport.height;
+
+      if (!fitsAbove || !fitsBelow) {
+        // Submenu doesn't fit - try to adjust position
+        // Overflows bottom, try to shift up
+        const overflow = submenuBottom - viewport.height;
+        const newTop = Math.max(0, submenuTop-overflow)-submenuTop;
+        submenu.style.top = newTop + 'px';
+
+        // Re-check after adjustment
+        const adjustedRect = submenu.getBoundingClientRect();
+        if (adjustedRect.height > viewport.height) {
+          // Still doesn't fit - enable scrolling
+          enableSubmenuScrolling(submenu, link);
+        }
+      }
+    }
+
+    // Helper function to enable scrolling for tall submenus
+    function enableSubmenuScrolling(submenu, link) {
+      // Check if scroll arrows already exist
+      if (submenu.dataset.scrollEnabled) return;
+
+      submenu.dataset.scrollEnabled = 'true';
+
+      const viewport = {
+        height: window.innerHeight,
+        scrollY: window.scrollY
+      };
+
+      // Position submenu to fill available viewport space
+      const parentRect = link.getBoundingClientRect();
+      const availableHeight = viewport.height - 2; // Leave some margin
+
+      submenu.style.maxHeight = availableHeight + 'px';
+      submenu.style.overflow = 'hidden';
+      submenu.style.position = 'absolute';
+
+      // Create scroll arrows
+      const scrollUpArrow = document.createElement('div');
+      scrollUpArrow.className = 'submenu-scroll-arrow submenu-scroll-up';
+      scrollUpArrow.innerHTML = '<span class="scroll-up-arrow"></span>';//'<span>▲</span>';
+      scrollUpArrow.style.cssText = 'position:absolute;top:0;left:0;right:0;height:30px;background:transparent;text-align:center;line-height:30px;color:#fff;cursor:pointer;z-index:1000;display:none;';
+
+      const scrollDownArrow = document.createElement('div');
+      scrollDownArrow.className = 'submenu-scroll-arrow submenu-scroll-down';
+      scrollDownArrow.innerHTML = '<span class="scroll-down-arrow"></span>';
+      scrollDownArrow.style.cssText = 'position:absolute;bottom:0;left:0;right:0;height:30px;background:transparent;text-align:center;line-height:30px;color:#fff;cursor:pointer;z-index:1000;';
+
+      // Create wrapper for submenu content
+      const scrollWrapper = document.createElement('div');
+      scrollWrapper.className = 'submenu-scroll-wrapper';
+      scrollWrapper.style.cssText = 'height:100vh;overflow:hidden;position:relative;';
+
+      // Move submenu children to wrapper
+      while (submenu.firstChild) {
+        scrollWrapper.appendChild(submenu.firstChild);
+      }
+
+      submenu.appendChild(scrollUpArrow);
+      submenu.appendChild(scrollWrapper);
+      submenu.appendChild(scrollDownArrow);
+
+      let scrollPosition = 0;
+      let scrollInterval = null;
+
+      function updateScrollArrows() {
+        const maxScroll = scrollWrapper.scrollHeight - availableHeight;
+        scrollUpArrow.style.display = scrollPosition > 0 ? 'block' : 'none';
+        scrollDownArrow.style.display = scrollPosition < maxScroll ? 'block' : 'none';
+      }
+
+      function startScrolling(direction) {
+        if (scrollInterval) return;
+
+        scrollInterval = setInterval(() => {
+          const maxScroll = scrollWrapper.scrollHeight - availableHeight;
+
+          if (direction === 'up') {
+            scrollPosition = Math.max(0, scrollPosition - ARROW_STEP);
+          } else {
+            scrollPosition = Math.min(maxScroll, scrollPosition + ARROW_STEP);
+          }
+
+          scrollWrapper.scrollTop = scrollPosition;
+          updateScrollArrows();
+
+          if ((direction === 'up' && scrollPosition === 0) ||
+              (direction === 'down' && scrollPosition === maxScroll)) {
+            stopScrolling();
+          }
+        }, ARROW_POLL_INTERVAL);
+      }
+
+      function stopScrolling() {
+        if (scrollInterval) {
+          clearInterval(scrollInterval);
+          scrollInterval = null;
+        }
+      }
+
+      scrollUpArrow.addEventListener('mouseenter', () => startScrolling('up'));
+      scrollUpArrow.addEventListener('mouseleave', stopScrolling);
+      scrollDownArrow.addEventListener('mouseenter', () => startScrolling('down'));
+      scrollDownArrow.addEventListener('mouseleave', stopScrolling);
+
+      function wheelEvent(e) {
+        e.preventDefault();
+        e.stopPropagation();
+
+        const maxScroll = scrollWrapper.scrollHeight - availableHeight;
+        const wheelDelta = e.deltaY;
+        const scrollAmount = wheelDelta > 0 ? WHEEL_STEP : -WHEEL_STEP; // Scroll 30px per wheel tick
+
+        scrollPosition = Math.max(0, Math.min(maxScroll, scrollPosition + scrollAmount));
+        scrollWrapper.scrollTop = scrollPosition;
+        updateScrollArrows();
+      }
+
+      // Add mouse wheel scrolling support
+      scrollWrapper.addEventListener('wheel', (e) => wheelEvent(e));
+
+      // Also add wheel event to submenu itself to catch events
+      submenu.addEventListener('wheel', function(e) {
+        // Only handle if scrolling is enabled
+        if (submenu.dataset.scrollEnabled) {
+          wheelEvent(e);
+        }
+      });
+
+      // Initial arrow state
+      updateScrollArrows();
+    }
+
+    // Helper function to clean up scroll arrows
+    function disableSubmenuScrolling(submenu) {
+      if (!submenu.dataset.scrollEnabled) return;
+
+      delete submenu.dataset.scrollEnabled;
+
+      // Find and remove scroll elements
+      const scrollArrows = submenu.querySelectorAll('.submenu-scroll-arrow');
+      const scrollWrapper = submenu.querySelector('.submenu-scroll-wrapper');
+
+      if (scrollWrapper) {
+        // Move children back to submenu
+        while (scrollWrapper.firstChild) {
+          submenu.appendChild(scrollWrapper.firstChild);
+        }
+        scrollWrapper.remove();
+      }
+
+      scrollArrows.forEach(arrow => arrow.remove());
+
+      // Reset styles
+      submenu.style.maxHeight = '';
+      submenu.style.overflow = '';
+    }
+
+    menuItems.forEach(item => {
+      const submenu = item.querySelector('ul');
+      if (submenu) {
+        const link = item.querySelector('a');
+        if (link) {
+          // Add class and ARIA attributes for accessibility
+          link.classList.add('has-submenu');
+          link.setAttribute('aria-haspopup', 'true');
+          link.setAttribute('aria-expanded', 'false');
+
+          // Add sub-arrow indicator
+          const span = document.createElement('span');
+          span.classList.add('sub-arrow');
+          link.append(span);
+
+          // Calculate nesting level for z-index
+          // Root menu (main-menu) is level 200 (above the search box at 102),
+          // first submenus are level 201, etc.
+          let nestingLevel = 200;
+          let currentElement = item.parentElement;
+          while (currentElement && currentElement.id !== 'main-menu') {
+            if (currentElement.tagName === 'UL') {
+              nestingLevel++;
+            }
+            currentElement = currentElement.parentElement;
+          }
+
+          // Apply z-index based on nesting level
+          // This ensures child menus with shadows appear above parent menus
+          submenu.style.zIndex = nestingLevel + 1;
+
+          // Check if this is a level 2+ submenu (nested within another dropdown)
+          const isNestedSubmenu = item.parentElement && item.parentElement.id !== 'main-menu';
+
+          // Timeout management for smooth menu navigation
+          let showTimeout = null;
+          let hideTimeout = null;
+
+          // Desktop: show on hover
+          item.addEventListener('mouseenter', function() {
+            if (!isMobile()) {
+              // Clear any pending hide timeout
+              if (hideTimeout) {
+                clearTimeout(hideTimeout);
+                hideTimeout = null;
+              }
+
+              // Set show timeout
+              showTimeout = setTimeout(() => {
+                // Hide all sibling menus at the same level before showing this one
+                const parentElement = item.parentElement;
+                if (parentElement) {
+                  const siblings = parentElement.querySelectorAll(':scope > li');
+                  siblings.forEach(sibling => {
+                    if (sibling !== item) {
+                      const siblingSubmenu = sibling.querySelector('ul');
+                      const siblingLink = sibling.querySelector('a');
+                      if (siblingSubmenu && siblingLink) {
+                        siblingSubmenu.style.display = 'none';
+                        siblingLink.setAttribute('aria-expanded', 'false');
+                        disableSubmenuScrolling(siblingSubmenu);
+                      }
+                    }
+                  });
+                }
+
+                submenu.style.display = 'block';
+                // Only apply positioning for nested submenus (level 2+)
+                if (isNestedSubmenu) {
+                  positionNestedSubmenu(submenu, link);
+                }
+                link.setAttribute('aria-expanded', 'true');
+                showTimeout = null;
+              }, SHOW_DELAY);
+            }
+          });
+
+          item.addEventListener('mouseleave', function() {
+            if (!isMobile()) {
+              // Clear any pending show timeout
+              if (showTimeout) {
+                clearTimeout(showTimeout);
+                showTimeout = null;
+              }
+
+              // Set hide timeout
+              hideTimeout = setTimeout(() => {
+                submenu.style.display = 'none';
+                link.setAttribute('aria-expanded', 'false');
+                // Clean up scrolling if enabled
+                disableSubmenuScrolling(submenu);
+                hideTimeout = null;
+              }, HIDE_DELAY);
+            }
+          });
+
+          if (isMobile() && isNestedSubmenu) {
+            positionNestedSubmenu(submenu, link);
+          }
+
+          function toggleMenu() {
+            const isExpanded = link.getAttribute('aria-expanded') === 'true';
+            if (isExpanded) {
+              slideUp(submenu, SLIDE_DELAY, () => {
+                submenu.style.display = 'none';
+                link.setAttribute('aria-expanded', 'false');
+                link.classList.remove('highlighted')
+                disableSubmenuScrolling(submenu);
+              });
+            } else {
+              slideDown(submenu, SLIDE_DELAY, () => {
+                submenu.style.display = 'block';
+                link.classList.add('highlighted')
+                link.setAttribute('aria-expanded', 'true');
+              });
+            }
+          }
+
+          // Mobile/Touch: toggle on click
+          link.addEventListener('click', function(e) {
+            if (isMobile()) {
+              e.preventDefault();
+              toggleMenu();
+            }
+          });
+
+          // Keyboard navigation
+          link.addEventListener('keydown', function(e) {
+            if (e.key === 'Enter' || e.key === ' ') {
+              e.preventDefault();
+              toggleMenu();
+            } else if (e.key === 'Escape') {
+              submenu.style.display = 'none';
+              link.setAttribute('aria-expanded', 'false');
+              disableSubmenuScrolling(submenu);
+              link.focus();
+            }
+          });
+        }
+      }
+    });
+
+    // Helper function to close all open dropdown menus
+    closeAllDropdowns = function() {
+      menuItems.forEach(item => {
+        const submenu = item.querySelector('ul');
+        const link = item.querySelector('a.has-submenu');
+        if (submenu && link) {
+          disableSubmenuScrolling(submenu);
+          submenu.style.display = 'none';
+          submenu.style.marginLeft = 0;
+          link.setAttribute('aria-expanded', 'false');
+          link.classList.remove('highlighted');
+        }
+      });
+    };
+
+    // Close all dropdown menus when clicking a link (navigation to new page or anchor)
+    const allLinks = mainMenu.querySelectorAll('a');
+    allLinks.forEach(link => {
+      link.addEventListener('click', function() {
+        // Close dropdowns when navigating (unless it's a has-submenu link in mobile mode)
+        if (!link.classList.contains('has-submenu') || !isMobile()) {
+          if (closeAllDropdowns) {
+            closeAllDropdowns();
+          }
+        }
+      });
+    });
+  }
+
+  // Initialize dropdown menu behavior
+  initDropdownMenu();
+
+  // Close all open menus when browser back button is pressed
+  window.addEventListener('popstate', function() {
+    if (closeAllDropdowns) {
+      closeAllDropdowns();
+    }
+  });
+}
+
+document.addEventListener('DOMContentLoaded', () => {
+  const configElem = document.getElementById('doxygen-config');
+  if (configElem) {
+    const config = JSON.parse(configElem.textContent);
+    initMenu(config.relPath, config.generateTreeView);
+    if (config.searchEngine) {
+      if (!config.serverBasedSearch) {
+        if (!config.disableIndex && config.dynamicMenus && !config.fullSidebar) {
+          if (typeof init_search === 'function') init_search();
+        }
+      } else {
+        if (document.querySelector('.searchresults') && typeof searchBox !== 'undefined') {
+          searchBox.DOMSearchField().focus();
+        }
+      }
+    }
+  }
+});
+
+/* @license-end */

+ 74 - 0
docs/html/menudata.js

@@ -0,0 +1,74 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+*/
+var menudata={children:[
+{text:"Main Page",url:"index.html"},
+{text:"Namespaces",url:"namespaces.html",children:[
+{text:"Namespace List",url:"namespaces.html"},
+{text:"Namespace Members",url:"namespacemembers.html",children:[
+{text:"All",url:"namespacemembers.html"},
+{text:"Functions",url:"namespacemembers_func.html"},
+{text:"Typedefs",url:"namespacemembers_type.html"},
+{text:"Enumerations",url:"namespacemembers_enum.html"},
+{text:"Enumerator",url:"namespacemembers_eval.html"}]}]},
+{text:"Classes",url:"annotated.html",children:[
+{text:"Class List",url:"annotated.html"},
+{text:"Class Index",url:"classes.html"},
+{text:"Class Members",url:"functions.html",children:[
+{text:"All",url:"functions.html",children:[
+{text:"a",url:"functions.html#index_a"},
+{text:"c",url:"functions.html#index_c"},
+{text:"h",url:"functions.html#index_h"},
+{text:"i",url:"functions.html#index_i"},
+{text:"l",url:"functions.html#index_l"},
+{text:"m",url:"functions.html#index_m"},
+{text:"o",url:"functions.html#index_o"},
+{text:"p",url:"functions.html#index_p"},
+{text:"r",url:"functions.html#index_r"},
+{text:"s",url:"functions.html#index_s"},
+{text:"t",url:"functions.html#index_t"},
+{text:"u",url:"functions.html#index_u"},
+{text:"~",url:"functions.html#index__7E"}]},
+{text:"Functions",url:"functions_func.html",children:[
+{text:"a",url:"functions_func.html#index_a"},
+{text:"c",url:"functions_func.html#index_c"},
+{text:"h",url:"functions_func.html#index_h"},
+{text:"i",url:"functions_func.html#index_i"},
+{text:"l",url:"functions_func.html#index_l"},
+{text:"m",url:"functions_func.html#index_m"},
+{text:"o",url:"functions_func.html#index_o"},
+{text:"p",url:"functions_func.html#index_p"},
+{text:"r",url:"functions_func.html#index_r"},
+{text:"s",url:"functions_func.html#index_s"},
+{text:"t",url:"functions_func.html#index_t"},
+{text:"u",url:"functions_func.html#index_u"},
+{text:"~",url:"functions_func.html#index__7E"}]},
+{text:"Variables",url:"functions_vars.html"}]}]},
+{text:"Files",url:"files.html",children:[
+{text:"File List",url:"files.html"},
+{text:"File Members",url:"globals.html",children:[
+{text:"All",url:"globals.html"},
+{text:"Functions",url:"globals_func.html"},
+{text:"Variables",url:"globals_vars.html"},
+{text:"Macros",url:"globals_defs.html"}]}]}]}

+ 149 - 0
docs/html/namespacemembers.html

@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Namespace Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('namespacemembers.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all namespace members with links to the namespace documentation for each member:</div><ul>
+<li>BinarySemaphore&#160;:&#160;<a class="el" href="namespacetk.html#ab1f2fa3d79e99f13610bd330a0df928b">tk</a></li>
+<li>block_current_task_locked()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d">tk::detail</a></li>
+<li>create()&#160;:&#160;<a class="el" href="namespacetk.html#a6e721332f5a7d85998345ed218de7394">tk</a></li>
+<li>current_task_slot()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#a73a80d92a172d565201f99e8f31278e4">tk::detail</a></li>
+<li>exit()&#160;:&#160;<a class="el" href="namespacetk.html#aba50cfc62cb8be71cf96df7f495a7a3d">tk</a></li>
+<li>find_highest_prio_waiter()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#a70ba35e0daee086ad86770f1e39c9b35">tk::detail</a></li>
+<li>lock()&#160;:&#160;<a class="el" href="namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8">tk</a></li>
+<li>now_ms()&#160;:&#160;<a class="el" href="namespacetk.html#a46e15375fba47cbd1a93278f17e77848">tk</a></li>
+<li>preempt_disable()&#160;:&#160;<a class="el" href="namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe">tk</a></li>
+<li>preempt_enable()&#160;:&#160;<a class="el" href="namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9">tk</a></li>
+<li>Prio&#160;:&#160;<a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e">tk</a></li>
+<li>PRIO_HIGH&#160;:&#160;<a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37">tk</a></li>
+<li>PRIO_LOW&#160;:&#160;<a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519">tk</a></li>
+<li>PRIO_NORMAL&#160;:&#160;<a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">tk</a></li>
+<li>PRIO_REALTIME&#160;:&#160;<a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75">tk</a></li>
+<li>publish()&#160;:&#160;<a class="el" href="namespacetk.html#a083495c9bf857a63f6c20a20aac0ca52">tk</a></li>
+<li>sched_lock()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">tk::detail</a></li>
+<li>sched_unlock()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">tk::detail</a></li>
+<li>sleep_ms()&#160;:&#160;<a class="el" href="namespacetk.html#aae83f84121085578a7568437a8dc2447">tk</a></li>
+<li>start()&#160;:&#160;<a class="el" href="namespacetk.html#a675f1829b87e2a43239b6f80a526d0ed">tk</a></li>
+<li>static_register()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#a447e4ec89b3f2748451891219b7e3738">tk::detail</a></li>
+<li>task_mask_t&#160;:&#160;<a class="el" href="namespacetk.html#add371a241ec6c1695ef4e67935317edd">tk</a></li>
+<li>TaskFn&#160;:&#160;<a class="el" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">tk</a></li>
+<li>unlock()&#160;:&#160;<a class="el" href="namespacetk.html#a752b12f6862815c94a52347af52578b7">tk</a></li>
+<li>wake_task_locked()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa">tk::detail</a></li>
+<li>yield()&#160;:&#160;<a class="el" href="namespacetk.html#a8081956b0a19b87d5b7c81b772373397">tk</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 124 - 0
docs/html/namespacemembers_enum.html

@@ -0,0 +1,124 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Namespace Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('namespacemembers_enum.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all namespace enums with links to the namespace documentation for each enum:</div><ul>
+<li>Prio&#160;:&#160;<a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e">tk</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 127 - 0
docs/html/namespacemembers_eval.html

@@ -0,0 +1,127 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Namespace Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('namespacemembers_eval.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all namespace enum values with links to the namespace documentation for each enum value:</div><ul>
+<li>PRIO_HIGH&#160;:&#160;<a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37">tk</a></li>
+<li>PRIO_LOW&#160;:&#160;<a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519">tk</a></li>
+<li>PRIO_NORMAL&#160;:&#160;<a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">tk</a></li>
+<li>PRIO_REALTIME&#160;:&#160;<a class="el" href="namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75">tk</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 141 - 0
docs/html/namespacemembers_func.html

@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Namespace Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('namespacemembers_func.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all namespace functions with links to the namespace documentation for each function:</div><ul>
+<li>block_current_task_locked()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d">tk::detail</a></li>
+<li>create()&#160;:&#160;<a class="el" href="namespacetk.html#a6e721332f5a7d85998345ed218de7394">tk</a></li>
+<li>current_task_slot()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#a73a80d92a172d565201f99e8f31278e4">tk::detail</a></li>
+<li>exit()&#160;:&#160;<a class="el" href="namespacetk.html#aba50cfc62cb8be71cf96df7f495a7a3d">tk</a></li>
+<li>find_highest_prio_waiter()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#a70ba35e0daee086ad86770f1e39c9b35">tk::detail</a></li>
+<li>lock()&#160;:&#160;<a class="el" href="namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8">tk</a></li>
+<li>now_ms()&#160;:&#160;<a class="el" href="namespacetk.html#a46e15375fba47cbd1a93278f17e77848">tk</a></li>
+<li>preempt_disable()&#160;:&#160;<a class="el" href="namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe">tk</a></li>
+<li>preempt_enable()&#160;:&#160;<a class="el" href="namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9">tk</a></li>
+<li>publish()&#160;:&#160;<a class="el" href="namespacetk.html#a083495c9bf857a63f6c20a20aac0ca52">tk</a></li>
+<li>sched_lock()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523">tk::detail</a></li>
+<li>sched_unlock()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b">tk::detail</a></li>
+<li>sleep_ms()&#160;:&#160;<a class="el" href="namespacetk.html#aae83f84121085578a7568437a8dc2447">tk</a></li>
+<li>start()&#160;:&#160;<a class="el" href="namespacetk.html#a675f1829b87e2a43239b6f80a526d0ed">tk</a></li>
+<li>static_register()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#a447e4ec89b3f2748451891219b7e3738">tk::detail</a></li>
+<li>unlock()&#160;:&#160;<a class="el" href="namespacetk.html#a752b12f6862815c94a52347af52578b7">tk</a></li>
+<li>wake_task_locked()&#160;:&#160;<a class="el" href="namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa">tk::detail</a></li>
+<li>yield()&#160;:&#160;<a class="el" href="namespacetk.html#a8081956b0a19b87d5b7c81b772373397">tk</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 126 - 0
docs/html/namespacemembers_type.html

@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Namespace Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('namespacemembers_type.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all namespace typedefs with links to the namespace documentation for each typedef:</div><ul>
+<li>BinarySemaphore&#160;:&#160;<a class="el" href="namespacetk.html#ab1f2fa3d79e99f13610bd330a0df928b">tk</a></li>
+<li>task_mask_t&#160;:&#160;<a class="el" href="namespacetk.html#add371a241ec6c1695ef4e67935317edd">tk</a></li>
+<li>TaskFn&#160;:&#160;<a class="el" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">tk</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 130 - 0
docs/html/namespaces.html

@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: Namespace List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('namespaces.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">Namespace List</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all namespaces with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span class="spacer">&#160;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacetk.html" target="_self">tk</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_" class="odd"><td class="entry"><span class="spacer">&#160;</span><span class="spacer">&#160;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacetk_1_1detail.html" target="_self">detail</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 4 - 0
docs/html/namespaces_dup.js

@@ -0,0 +1,4 @@
+var namespaces_dup =
+[
+    [ "tk", "namespacetk.html", "namespacetk" ]
+];

+ 601 - 0
docs/html/namespacetk.html

@@ -0,0 +1,601 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: tk Namespace Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('namespacetk.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk Namespace Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-namespaces" class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:detail" id="r_detail"><td class="memItemLeft">namespace &#160;</td><td class="memItemRight"><a class="el" href="namespacetk_1_1detail.html">detail</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:Actor" id="r_Actor"><td class="memItemLeft">class &#160;</td><td class="memItemRight"><a class="el" href="classtk_1_1_actor.html">Actor</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">メッセージ駆動型タスク (アクター) の基底クラス  <a href="classtk_1_1_actor.html#details">More...</a><br /></td></tr>
+<tr class="memitem:EventHub" id="r_EventHub"><td class="memItemLeft">class &#160;</td><td class="memItemRight"><a class="el" href="classtk_1_1_event_hub.html">EventHub</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">メッセージ型ごとの超軽量 Pub/Sub ディスパッチャ  <a href="classtk_1_1_event_hub.html#details">More...</a><br /></td></tr>
+<tr class="memitem:LockGuard" id="r_LockGuard"><td class="memItemLeft">class &#160;</td><td class="memItemRight"><a class="el" href="classtk_1_1_lock_guard.html">LockGuard</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">ミューテックスのロックをスコープ単位で安全に管理する RAII クラス (std::lock_guard 相当)  <a href="classtk_1_1_lock_guard.html#details">More...</a><br /></td></tr>
+<tr class="memitem:Message" id="r_Message"><td class="memItemLeft">struct &#160;</td><td class="memItemRight"><a class="el" href="structtk_1_1_message.html">Message</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">デフォルトの軽量メッセージ構造体  <a href="structtk_1_1_message.html#details">More...</a><br /></td></tr>
+<tr class="memitem:Mutex" id="r_Mutex"><td class="memItemLeft">class &#160;</td><td class="memItemRight"><a class="el" href="classtk_1_1_mutex.html">Mutex</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">所有権・優先度順ウェイクアップ・RAII 対応のミューテックス (排他ロック)  <a href="classtk_1_1_mutex.html#details">More...</a><br /></td></tr>
+<tr class="memitem:PreemptGuard" id="r_PreemptGuard"><td class="memItemLeft">class &#160;</td><td class="memItemRight"><a class="el" href="classtk_1_1_preempt_guard.html">PreemptGuard</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">プリエンプション禁止をスコープ単位で安全に管理する RAII クラス  <a href="classtk_1_1_preempt_guard.html#details">More...</a><br /></td></tr>
+<tr class="memitem:Semaphore" id="r_Semaphore"><td class="memItemLeft">class &#160;</td><td class="memItemRight"><a class="el" href="classtk_1_1_semaphore.html">Semaphore</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">計数セマフォ (Counting <a class="el" href="classtk_1_1_semaphore.html" title="計数セマフォ (Counting Semaphore) / バイナリセマフォ">Semaphore</a>) / バイナリセマフォ  <a href="classtk_1_1_semaphore.html#details">More...</a><br /></td></tr>
+<tr class="memitem:TaskHandle" id="r_TaskHandle"><td class="memItemLeft">struct &#160;</td><td class="memItemRight"><a class="el" href="structtk_1_1_task_handle.html">TaskHandle</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">タスクの識別ハンドル  <a href="structtk_1_1_task_handle.html#details">More...</a><br /></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-typedef-members" class="groupheader"><a id="typedef-members" name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a8908cf1e54cdc4e14ac3003126722cfc" id="r_a8908cf1e54cdc4e14ac3003126722cfc"><td class="memItemLeft">using&#160;</td><td class="memItemRight"><a class="el" href="#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a> = void (*)(void* arg)</td></tr>
+<tr class="memitem:add371a241ec6c1695ef4e67935317edd" id="r_add371a241ec6c1695ef4e67935317edd"><td class="memItemLeft">using&#160;</td><td class="memItemRight"><a class="el" href="#add371a241ec6c1695ef4e67935317edd">task_mask_t</a> = uint32_t</td></tr>
+<tr class="memitem:ab1f2fa3d79e99f13610bd330a0df928b" id="r_ab1f2fa3d79e99f13610bd330a0df928b"><td class="memItemLeft">using&#160;</td><td class="memItemRight"><a class="el" href="#ab1f2fa3d79e99f13610bd330a0df928b">BinarySemaphore</a> = <a class="el" href="classtk_1_1_semaphore.html">Semaphore</a></td></tr>
+<tr class="memdesc:ab1f2fa3d79e99f13610bd330a0df928b"><td class="mdescLeft">&#160;</td><td class="mdescRight">バイナリセマフォ (初期値1, 最大1) の型エイリアス  <br /></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-enum-members" class="groupheader"><a id="enum-members" name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:a3d47fbd63b95ed3b46bed70c2fa1e50e" id="r_a3d47fbd63b95ed3b46bed70c2fa1e50e"><td class="memItemLeft">enum &#160;</td><td class="memItemRight"><a class="el" href="#a3d47fbd63b95ed3b46bed70c2fa1e50e">Prio</a> : uint32_t { <a class="el" href="#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75">PRIO_REALTIME</a> = 1
+, <a class="el" href="#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37">PRIO_HIGH</a> = 5
+, <a class="el" href="#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">PRIO_NORMAL</a> = 9
+, <a class="el" href="#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519">PRIO_LOW</a> = 13
+ }</td></tr>
+<tr class="memdesc:a3d47fbd63b95ed3b46bed70c2fa1e50e"><td class="mdescLeft">&#160;</td><td class="mdescRight">タスクの優先度レベル  <a href="#a3d47fbd63b95ed3b46bed70c2fa1e50e">More...</a><br /></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a083495c9bf857a63f6c20a20aac0ca52" id="r_a083495c9bf857a63f6c20a20aac0ca52"><td class="memTemplParams" colspan="2">template&lt;typename MsgType&gt; </td></tr>
+<tr class="memitem:a083495c9bf857a63f6c20a20aac0ca52 template"><td class="memItemLeft">size_t&#160;</td><td class="memItemRight"><a class="el" href="#a083495c9bf857a63f6c20a20aac0ca52">publish</a> (const MsgType &amp;msg)</td></tr>
+<tr class="memdesc:a083495c9bf857a63f6c20a20aac0ca52"><td class="mdescLeft">&#160;</td><td class="mdescRight">メッセージの型を指定して、購読しているすべての <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> へ同報配信します  <br /></td></tr>
+<tr class="memitem:a5549bec310750722a1964de1145b9fed" id="r_a5549bec310750722a1964de1145b9fed"><td class="memItemLeft">size_t&#160;</td><td class="memItemRight"><a class="el" href="#a5549bec310750722a1964de1145b9fed">publish</a> (uint32_t id, uintptr_t arg=0)</td></tr>
+<tr class="memdesc:a5549bec310750722a1964de1145b9fed"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structtk_1_1_message.html" title="デフォルトの軽量メッセージ構造体">tk::Message</a> 型の同報配信ショートカット  <br /></td></tr>
+<tr class="memitem:a6e721332f5a7d85998345ed218de7394" id="r_a6e721332f5a7d85998345ed218de7394"><td class="memItemLeft"><a class="el" href="structtk_1_1_task_handle.html">TaskHandle</a>&#160;</td><td class="memItemRight"><a class="el" href="#a6e721332f5a7d85998345ed218de7394">create</a> (<a class="el" href="#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a> fn, void *arg=nullptr, uint32_t prio=<a class="el" href="#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">PRIO_NORMAL</a>)</td></tr>
+<tr class="memdesc:a6e721332f5a7d85998345ed218de7394"><td class="mdescLeft">&#160;</td><td class="mdescRight">タスクを生成・登録します  <br /></td></tr>
+<tr class="memitem:a675f1829b87e2a43239b6f80a526d0ed" id="r_a675f1829b87e2a43239b6f80a526d0ed"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a675f1829b87e2a43239b6f80a526d0ed">start</a> ()</td></tr>
+<tr class="memdesc:a675f1829b87e2a43239b6f80a526d0ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">tinykernel スケジューラを起動します  <br /></td></tr>
+<tr class="memitem:a8081956b0a19b87d5b7c81b772373397" id="r_a8081956b0a19b87d5b7c81b772373397"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a8081956b0a19b87d5b7c81b772373397">yield</a> ()</td></tr>
+<tr class="memdesc:a8081956b0a19b87d5b7c81b772373397"><td class="mdescLeft">&#160;</td><td class="mdescRight">現在実行中のタスクを一時中断し、同優先度の他のタスクへ CPU を譲渡します  <br /></td></tr>
+<tr class="memitem:aae83f84121085578a7568437a8dc2447" id="r_aae83f84121085578a7568437a8dc2447"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#aae83f84121085578a7568437a8dc2447">sleep_ms</a> (uint32_t ms)</td></tr>
+<tr class="memdesc:aae83f84121085578a7568437a8dc2447"><td class="mdescLeft">&#160;</td><td class="mdescRight">現在のタスクを指定時間スリープさせます  <br /></td></tr>
+<tr class="memitem:aba50cfc62cb8be71cf96df7f495a7a3d" id="r_aba50cfc62cb8be71cf96df7f495a7a3d"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#aba50cfc62cb8be71cf96df7f495a7a3d">exit</a> (int code=0)</td></tr>
+<tr class="memdesc:aba50cfc62cb8be71cf96df7f495a7a3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">現在のタスクを終了・破棄します  <br /></td></tr>
+<tr class="memitem:a46e15375fba47cbd1a93278f17e77848" id="r_a46e15375fba47cbd1a93278f17e77848"><td class="memItemLeft">uint64_t&#160;</td><td class="memItemRight"><a class="el" href="#a46e15375fba47cbd1a93278f17e77848">now_ms</a> ()</td></tr>
+<tr class="memdesc:a46e15375fba47cbd1a93278f17e77848"><td class="mdescLeft">&#160;</td><td class="mdescRight">システム起動時からの経過時間をミリ秒単位で取得します  <br /></td></tr>
+<tr class="memitem:a6540aa25eb8562f6d6c8b37977d6cfe8" id="r_a6540aa25eb8562f6d6c8b37977d6cfe8"><td class="memItemLeft">bool&#160;</td><td class="memItemRight"><a class="el" href="#a6540aa25eb8562f6d6c8b37977d6cfe8">lock</a> ()</td></tr>
+<tr class="memdesc:a6540aa25eb8562f6d6c8b37977d6cfe8"><td class="mdescLeft">&#160;</td><td class="mdescRight">ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります  <br /></td></tr>
+<tr class="memitem:a752b12f6862815c94a52347af52578b7" id="r_a752b12f6862815c94a52347af52578b7"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a752b12f6862815c94a52347af52578b7">unlock</a> (bool was_enabled)</td></tr>
+<tr class="memdesc:a752b12f6862815c94a52347af52578b7"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="#a6540aa25eb8562f6d6c8b37977d6cfe8" title="ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります">tk::lock()</a> で入ったクリティカルセクションを抜けます  <br /></td></tr>
+<tr class="memitem:a3254a7e2a9f5ed3abe44e8cf62a8dcfe" id="r_a3254a7e2a9f5ed3abe44e8cf62a8dcfe"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a3254a7e2a9f5ed3abe44e8cf62a8dcfe">preempt_disable</a> ()</td></tr>
+<tr class="memdesc:a3254a7e2a9f5ed3abe44e8cf62a8dcfe"><td class="mdescLeft">&#160;</td><td class="mdescRight">自コアのタスクスイッチ (プリエンプション) を一時的に禁止します  <br /></td></tr>
+<tr class="memitem:a70e6ee5f456e67a24ce13ff0fd04e4d9" id="r_a70e6ee5f456e67a24ce13ff0fd04e4d9"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a70e6ee5f456e67a24ce13ff0fd04e4d9">preempt_enable</a> ()</td></tr>
+<tr class="memdesc:a70e6ee5f456e67a24ce13ff0fd04e4d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">自コアのタスクスイッチ (プリエンプション) を再開します  <br /></td></tr>
+</table>
+<a name="doc-typedef-members" id="doc-typedef-members"></a><h2 id="header-doc-typedef-members" class="groupheader">Typedef Documentation</h2>
+<a id="ab1f2fa3d79e99f13610bd330a0df928b" name="ab1f2fa3d79e99f13610bd330a0df928b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab1f2fa3d79e99f13610bd330a0df928b">&#9670;&#160;</a></span>BinarySemaphore</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">using <a class="el" href="#ab1f2fa3d79e99f13610bd330a0df928b">tk::BinarySemaphore</a> = <a class="el" href="classtk_1_1_semaphore.html">Semaphore</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>バイナリセマフォ (初期値1, 最大1) の型エイリアス </p>
+
+</div>
+</div>
+<a id="add371a241ec6c1695ef4e67935317edd" name="add371a241ec6c1695ef4e67935317edd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#add371a241ec6c1695ef4e67935317edd">&#9670;&#160;</a></span>task_mask_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">using <a class="el" href="#add371a241ec6c1695ef4e67935317edd">tk::task_mask_t</a> = uint32_t</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8908cf1e54cdc4e14ac3003126722cfc" name="a8908cf1e54cdc4e14ac3003126722cfc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8908cf1e54cdc4e14ac3003126722cfc">&#9670;&#160;</a></span>TaskFn</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">using <a class="el" href="#a8908cf1e54cdc4e14ac3003126722cfc">tk::TaskFn</a> = void (*)(void* arg)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>タスク関数のシグネチャ (void func(void* arg)) </p>
+
+</div>
+</div>
+<a name="doc-enum-members" id="doc-enum-members"></a><h2 id="header-doc-enum-members" class="groupheader">Enumeration Type Documentation</h2>
+<a id="a3d47fbd63b95ed3b46bed70c2fa1e50e" name="a3d47fbd63b95ed3b46bed70c2fa1e50e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3d47fbd63b95ed3b46bed70c2fa1e50e">&#9670;&#160;</a></span>Prio</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="#a3d47fbd63b95ed3b46bed70c2fa1e50e">tk::Prio</a> : uint32_t</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>タスクの優先度レベル </p>
+<p>数値が小さいほど高優先度です。0..15 の範囲で指定します (15 はアイドルタスク専用)。 </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75" name="a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75"></a>PRIO_REALTIME&#160;</td><td class="fielddoc"><p>リアルタイム最優先 </p>
+</td></tr>
+<tr><td class="fieldname"><a id="a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37" name="a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37"></a>PRIO_HIGH&#160;</td><td class="fielddoc"><p>高優先度 </p>
+</td></tr>
+<tr><td class="fieldname"><a id="a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca" name="a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca"></a>PRIO_NORMAL&#160;</td><td class="fielddoc"><p>通常優先度 (デフォルト) </p>
+</td></tr>
+<tr><td class="fieldname"><a id="a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519" name="a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519"></a>PRIO_LOW&#160;</td><td class="fielddoc"><p>低優先度 </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
+<a id="a6e721332f5a7d85998345ed218de7394" name="a6e721332f5a7d85998345ed218de7394"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e721332f5a7d85998345ed218de7394">&#9670;&#160;</a></span>create()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structtk_1_1_task_handle.html">tk::TaskHandle</a> tk::create </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a></td>          <td class="paramname"><span class="paramname"><em>fn</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *</td>          <td class="paramname"><span class="paramname"><em>arg</em></span><span class="paramdefsep"> = </span><span class="paramdefval">nullptr</span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t</td>          <td class="paramname"><span class="paramname"><em>prio</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca">PRIO_NORMAL</a></span>&#160;)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>タスクを生成・登録します </p>
+<p><a class="el" href="#a675f1829b87e2a43239b6f80a526d0ed" title="tinykernel スケジューラを起動します">tk::start()</a> を呼び出す前に登録する必要があります。</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fn</td><td>タスク関数ポインタ (void (*)(void* arg)) </td></tr>
+    <tr><td class="paramname">arg</td><td>タスク関数に渡すユーザー引数ポインタ (省略時: nullptr) </td></tr>
+    <tr><td class="paramname">prio</td><td>タスクの優先度 (省略時: <a class="el" href="#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca" title="通常優先度 (デフォルト)">tk::PRIO_NORMAL</a>) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="structtk_1_1_task_handle.html" title="タスクの識別ハンドル">TaskHandle</a> 生成されたタスクのハンドル。登録失敗時は is_valid() が false </dd></dl>
+
+</div>
+</div>
+<a id="aba50cfc62cb8be71cf96df7f495a7a3d" name="aba50cfc62cb8be71cf96df7f495a7a3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba50cfc62cb8be71cf96df7f495a7a3d">&#9670;&#160;</a></span>exit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::exit </td>
+          <td>(</td>
+          <td class="paramtype">int</td>          <td class="paramname"><span class="paramname"><em>code</em></span><span class="paramdefsep"> = </span><span class="paramdefval">0</span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>現在のタスクを終了・破棄します </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">code</td><td>終了コード (予約用、省略時: 0) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>タスク関数の末尾に到達した場合は自動的に呼ばれます。 </dd></dl>
+
+</div>
+</div>
+<a id="a6540aa25eb8562f6d6c8b37977d6cfe8" name="a6540aa25eb8562f6d6c8b37977d6cfe8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6540aa25eb8562f6d6c8b37977d6cfe8">&#9670;&#160;</a></span>lock()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool tk::lock </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります </p>
+<dl class="section return"><dt>Returns</dt><dd>true 呼び出し前の割り込みが有効だった場合 </dd>
+<dd>
+false 呼び出し前の割り込みが無効だった場合 </dd></dl>
+<dl class="section warning"><dt>Warning</dt><dd>長時間のロックは避けてください。数マイクロ秒以内のレジスタ操作等に使用します。 </dd></dl>
+
+</div>
+</div>
+<a id="a46e15375fba47cbd1a93278f17e77848" name="a46e15375fba47cbd1a93278f17e77848"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a46e15375fba47cbd1a93278f17e77848">&#9670;&#160;</a></span>now_ms()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t tk::now_ms </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>システム起動時からの経過時間をミリ秒単位で取得します </p>
+<dl class="section return"><dt>Returns</dt><dd>uint64_t 経過ミリ秒数 (分解能: 1 / TK_TICKS_PER_SEC 秒) </dd></dl>
+
+</div>
+</div>
+<a id="a3254a7e2a9f5ed3abe44e8cf62a8dcfe" name="a3254a7e2a9f5ed3abe44e8cf62a8dcfe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3254a7e2a9f5ed3abe44e8cf62a8dcfe">&#9670;&#160;</a></span>preempt_disable()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::preempt_disable </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>自コアのタスクスイッチ (プリエンプション) を一時的に禁止します </p>
+<p>割り込み (SysTick やタイマー、NVIC) は停止しないため、通信クロックや時刻更新を 阻害することなく、自タスクの処理をアトミックに実行できます。ネスト (入れ子) 呼び出しに対応しています。</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="classtk_1_1_preempt_guard.html" title="プリエンプション禁止をスコープ単位で安全に管理する RAII クラス">tk::PreemptGuard</a>, <a class="el" href="#a70e6ee5f456e67a24ce13ff0fd04e4d9" title="自コアのタスクスイッチ (プリエンプション) を再開します">tk::preempt_enable()</a> </dd></dl>
+
+</div>
+</div>
+<a id="a70e6ee5f456e67a24ce13ff0fd04e4d9" name="a70e6ee5f456e67a24ce13ff0fd04e4d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a70e6ee5f456e67a24ce13ff0fd04e4d9">&#9670;&#160;</a></span>preempt_enable()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::preempt_enable </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>自コアのタスクスイッチ (プリエンプション) を再開します </p>
+<p>ネストカウンタが 0 に戻った時点で、保留されていたタスクスイッチが即座に実行されます。</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="classtk_1_1_preempt_guard.html" title="プリエンプション禁止をスコープ単位で安全に管理する RAII クラス">tk::PreemptGuard</a>, <a class="el" href="#a3254a7e2a9f5ed3abe44e8cf62a8dcfe" title="自コアのタスクスイッチ (プリエンプション) を一時的に禁止します">tk::preempt_disable()</a> </dd></dl>
+
+</div>
+</div>
+<a id="a083495c9bf857a63f6c20a20aac0ca52" name="a083495c9bf857a63f6c20a20aac0ca52"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a083495c9bf857a63f6c20a20aac0ca52">&#9670;&#160;</a></span>publish() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename MsgType&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t tk::publish </td>
+          <td>(</td>
+          <td class="paramtype">const MsgType &amp;</td>          <td class="paramname"><span class="paramname"><em>msg</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>メッセージの型を指定して、購読しているすべての <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> へ同報配信します </p>
+<p>送信側は <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> のインスタンスや名前を知る必要がありません (完全疎結合)。 メッセージの実体は各 <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> のキューへ値コピーされるため、スタック上のローカル変数でも安全に渡せます。</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+  <table class="tparams">
+    <tr><td class="paramname">MsgType</td><td>配信するメッセージ型 </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">msg</td><td>送信するメッセージ </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>size_t 配信に成功した <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> の数</dd></dl>
+<div class="fragment"><div class="line">MyEvent ev{1, <span class="stringliteral">&quot;Button Pressed&quot;</span>};</div>
+<div class="line"><a class="code hl_function" href="#a083495c9bf857a63f6c20a20aac0ca52">tk::publish</a>(ev); <span class="comment">// MyEvent を受け付けるすべての Actor に届く</span></div>
+<div class="ttc" id="anamespacetk_html_a083495c9bf857a63f6c20a20aac0ca52"><div class="ttname"><a href="#a083495c9bf857a63f6c20a20aac0ca52">tk::publish</a></div><div class="ttdeci">size_t publish(const MsgType &amp;msg)</div><div class="ttdoc">メッセージの型を指定して、購読しているすべての Actor へ同報配信します</div><div class="ttdef"><b>Definition</b> actor.hpp:135</div></div>
+</div><!-- fragment --> 
+</div>
+</div>
+<a id="a5549bec310750722a1964de1145b9fed" name="a5549bec310750722a1964de1145b9fed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5549bec310750722a1964de1145b9fed">&#9670;&#160;</a></span>publish() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t tk::publish </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t</td>          <td class="paramname"><span class="paramname"><em>id</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uintptr_t</td>          <td class="paramname"><span class="paramname"><em>arg</em></span><span class="paramdefsep"> = </span><span class="paramdefval">0</span>&#160;)</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p><a class="el" href="structtk_1_1_message.html" title="デフォルトの軽量メッセージ構造体">tk::Message</a> 型の同報配信ショートカット </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">id</td><td>メッセージID </td></tr>
+    <tr><td class="paramname">arg</td><td>引数 (省略時: 0) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>size_t 配信に成功した <a class="el" href="classtk_1_1_actor.html" title="メッセージ駆動型タスク (アクター) の基底クラス">Actor</a> の数 </dd></dl>
+
+</div>
+</div>
+<a id="aae83f84121085578a7568437a8dc2447" name="aae83f84121085578a7568437a8dc2447"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aae83f84121085578a7568437a8dc2447">&#9670;&#160;</a></span>sleep_ms()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::sleep_ms </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t</td>          <td class="paramname"><span class="paramname"><em>ms</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>現在のタスクを指定時間スリープさせます </p>
+<p>スリープ中はタスクが休止状態になり、CPU は他のタスクへ自動的に割り当てられます (CPU消費ゼロ)。</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ms</td><td>スリープする時間 (ミリ秒) </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>タスクコンテキスト内から呼び出す必要があります。 </dd></dl>
+
+</div>
+</div>
+<a id="a675f1829b87e2a43239b6f80a526d0ed" name="a675f1829b87e2a43239b6f80a526d0ed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a675f1829b87e2a43239b6f80a526d0ed">&#9670;&#160;</a></span>start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::start </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>tinykernel スケジューラを起動します </p>
+<p>Core 0 のスケジューラを開始し、Core 1 を自動ブートしてデュアルコア並行実行を開始します。 この関数から制御が戻ることはありません (Never returns)。 </p>
+
+</div>
+</div>
+<a id="a752b12f6862815c94a52347af52578b7" name="a752b12f6862815c94a52347af52578b7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a752b12f6862815c94a52347af52578b7">&#9670;&#160;</a></span>unlock()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::unlock </td>
+          <td>(</td>
+          <td class="paramtype">bool</td>          <td class="paramname"><span class="paramname"><em>was_enabled</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p><a class="el" href="#a6540aa25eb8562f6d6c8b37977d6cfe8" title="ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります">tk::lock()</a> で入ったクリティカルセクションを抜けます </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">was_enabled</td><td><a class="el" href="#a6540aa25eb8562f6d6c8b37977d6cfe8" title="ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります">tk::lock()</a> の戻り値 </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a8081956b0a19b87d5b7c81b772373397" name="a8081956b0a19b87d5b7c81b772373397"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8081956b0a19b87d5b7c81b772373397">&#9670;&#160;</a></span>yield()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::yield </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>現在実行中のタスクを一時中断し、同優先度の他のタスクへ CPU を譲渡します </p>
+<dl class="section note"><dt>Note</dt><dd>タスクコンテキスト内から呼び出す必要があります。 </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="namespacetk.html">tk</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 41 - 0
docs/html/namespacetk.js

@@ -0,0 +1,41 @@
+var namespacetk =
+[
+    [ "detail", "namespacetk_1_1detail.html", [
+      [ "block_current_task_locked", "namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d", null ],
+      [ "current_task_slot", "namespacetk_1_1detail.html#a73a80d92a172d565201f99e8f31278e4", null ],
+      [ "find_highest_prio_waiter", "namespacetk_1_1detail.html#a70ba35e0daee086ad86770f1e39c9b35", null ],
+      [ "sched_lock", "namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523", null ],
+      [ "sched_unlock", "namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b", null ],
+      [ "static_register", "namespacetk_1_1detail.html#a447e4ec89b3f2748451891219b7e3738", null ],
+      [ "wake_task_locked", "namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa", null ]
+    ] ],
+    [ "Actor", "classtk_1_1_actor.html", "classtk_1_1_actor" ],
+    [ "EventHub", "classtk_1_1_event_hub.html", null ],
+    [ "LockGuard", "classtk_1_1_lock_guard.html", "classtk_1_1_lock_guard" ],
+    [ "Message", "structtk_1_1_message.html", "structtk_1_1_message" ],
+    [ "Mutex", "classtk_1_1_mutex.html", "classtk_1_1_mutex" ],
+    [ "PreemptGuard", "classtk_1_1_preempt_guard.html", "classtk_1_1_preempt_guard" ],
+    [ "Semaphore", "classtk_1_1_semaphore.html", "classtk_1_1_semaphore" ],
+    [ "TaskHandle", "structtk_1_1_task_handle.html", "structtk_1_1_task_handle" ],
+    [ "BinarySemaphore", "namespacetk.html#ab1f2fa3d79e99f13610bd330a0df928b", null ],
+    [ "task_mask_t", "namespacetk.html#add371a241ec6c1695ef4e67935317edd", null ],
+    [ "TaskFn", "namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc", null ],
+    [ "Prio", "namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e", [
+      [ "PRIO_REALTIME", "namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75", null ],
+      [ "PRIO_HIGH", "namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37", null ],
+      [ "PRIO_NORMAL", "namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca", null ],
+      [ "PRIO_LOW", "namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519", null ]
+    ] ],
+    [ "create", "namespacetk.html#a6e721332f5a7d85998345ed218de7394", null ],
+    [ "exit", "namespacetk.html#aba50cfc62cb8be71cf96df7f495a7a3d", null ],
+    [ "lock", "namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8", null ],
+    [ "now_ms", "namespacetk.html#a46e15375fba47cbd1a93278f17e77848", null ],
+    [ "preempt_disable", "namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe", null ],
+    [ "preempt_enable", "namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9", null ],
+    [ "publish", "namespacetk.html#a083495c9bf857a63f6c20a20aac0ca52", null ],
+    [ "publish", "namespacetk.html#a5549bec310750722a1964de1145b9fed", null ],
+    [ "sleep_ms", "namespacetk.html#aae83f84121085578a7568437a8dc2447", null ],
+    [ "start", "namespacetk.html#a675f1829b87e2a43239b6f80a526d0ed", null ],
+    [ "unlock", "namespacetk.html#a752b12f6862815c94a52347af52578b7", null ],
+    [ "yield", "namespacetk.html#a8081956b0a19b87d5b7c81b772373397", null ]
+];

+ 272 - 0
docs/html/namespacetk_1_1detail.html

@@ -0,0 +1,272 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: tk::detail Namespace Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('namespacetk_1_1detail.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">tk::detail Namespace Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a447e4ec89b3f2748451891219b7e3738" id="r_a447e4ec89b3f2748451891219b7e3738"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a447e4ec89b3f2748451891219b7e3738">static_register</a> (const char *name, <a class="el" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a> fn, uint32_t prio)</td></tr>
+<tr class="memitem:a5b8fa6406a867edf8c4410fcb03c6523" id="r_a5b8fa6406a867edf8c4410fcb03c6523"><td class="memItemLeft">uint32_t&#160;</td><td class="memItemRight"><a class="el" href="#a5b8fa6406a867edf8c4410fcb03c6523">sched_lock</a> ()</td></tr>
+<tr class="memitem:a80be9b2429346faf161eab01f595684b" id="r_a80be9b2429346faf161eab01f595684b"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a80be9b2429346faf161eab01f595684b">sched_unlock</a> (uint32_t save)</td></tr>
+<tr class="memitem:a400363f36b5fb5dfc8aec11334471d0d" id="r_a400363f36b5fb5dfc8aec11334471d0d"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a400363f36b5fb5dfc8aec11334471d0d">block_current_task_locked</a> ()</td></tr>
+<tr class="memitem:ab19385598f18560cb574cc86174ececa" id="r_ab19385598f18560cb574cc86174ececa"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#ab19385598f18560cb574cc86174ececa">wake_task_locked</a> (<a class="el" href="structtk_1_1_task_handle.html">TaskHandle</a> handle)</td></tr>
+<tr class="memitem:a73a80d92a172d565201f99e8f31278e4" id="r_a73a80d92a172d565201f99e8f31278e4"><td class="memItemLeft">uint8_t&#160;</td><td class="memItemRight"><a class="el" href="#a73a80d92a172d565201f99e8f31278e4">current_task_slot</a> ()</td></tr>
+<tr class="memitem:a70ba35e0daee086ad86770f1e39c9b35" id="r_a70ba35e0daee086ad86770f1e39c9b35"><td class="memItemLeft">uint8_t&#160;</td><td class="memItemRight"><a class="el" href="#a70ba35e0daee086ad86770f1e39c9b35">find_highest_prio_waiter</a> (<a class="el" href="namespacetk.html#add371a241ec6c1695ef4e67935317edd">task_mask_t</a> wait_mask)</td></tr>
+</table>
+<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
+<a id="a400363f36b5fb5dfc8aec11334471d0d" name="a400363f36b5fb5dfc8aec11334471d0d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a400363f36b5fb5dfc8aec11334471d0d">&#9670;&#160;</a></span>block_current_task_locked()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::detail::block_current_task_locked </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a73a80d92a172d565201f99e8f31278e4" name="a73a80d92a172d565201f99e8f31278e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a73a80d92a172d565201f99e8f31278e4">&#9670;&#160;</a></span>current_task_slot()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t tk::detail::current_task_slot </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a70ba35e0daee086ad86770f1e39c9b35" name="a70ba35e0daee086ad86770f1e39c9b35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a70ba35e0daee086ad86770f1e39c9b35">&#9670;&#160;</a></span>find_highest_prio_waiter()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t tk::detail::find_highest_prio_waiter </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="namespacetk.html#add371a241ec6c1695ef4e67935317edd">task_mask_t</a></td>          <td class="paramname"><span class="paramname"><em>wait_mask</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a5b8fa6406a867edf8c4410fcb03c6523" name="a5b8fa6406a867edf8c4410fcb03c6523"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b8fa6406a867edf8c4410fcb03c6523">&#9670;&#160;</a></span>sched_lock()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t tk::detail::sched_lock </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a80be9b2429346faf161eab01f595684b" name="a80be9b2429346faf161eab01f595684b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a80be9b2429346faf161eab01f595684b">&#9670;&#160;</a></span>sched_unlock()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::detail::sched_unlock </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t</td>          <td class="paramname"><span class="paramname"><em>save</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a447e4ec89b3f2748451891219b7e3738" name="a447e4ec89b3f2748451891219b7e3738"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a447e4ec89b3f2748451891219b7e3738">&#9670;&#160;</a></span>static_register()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::detail::static_register </td>
+          <td>(</td>
+          <td class="paramtype">const char *</td>          <td class="paramname"><span class="paramname"><em>name</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a></td>          <td class="paramname"><span class="paramname"><em>fn</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t</td>          <td class="paramname"><span class="paramname"><em>prio</em></span>&#160;)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab19385598f18560cb574cc86174ececa" name="ab19385598f18560cb574cc86174ececa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab19385598f18560cb574cc86174ececa">&#9670;&#160;</a></span>wake_task_locked()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk::detail::wake_task_locked </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structtk_1_1_task_handle.html">TaskHandle</a></td>          <td class="paramname"><span class="paramname"><em>handle</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="namespacetk.html">tk</a></li><li class="navelem"><a href="namespacetk_1_1detail.html">detail</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 329 - 0
docs/html/navtree.css

@@ -0,0 +1,329 @@
+#nav-tree .children_ul {
+  margin:0;
+  padding:4px;
+}
+
+#nav-tree ul {
+  list-style:none outside none;
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree li {
+  white-space:nowrap;
+  margin:0;
+  padding:0;
+}
+
+#nav-tree .plus {
+  margin:0px;
+}
+
+#nav-tree .selected {
+  position: relative;
+  background-color: var(--nav-menu-active-bg);
+  border-radius: 0 6px 6px 0;
+  /*margin-right: 5px;*/
+}
+
+#nav-tree img {
+  margin:0px;
+  padding:0px;
+  border:0px;
+  vertical-align: middle;
+  float: none;
+  max-height: 20px;
+}
+
+#nav-tree a {
+  text-decoration:none;
+  padding:0px;
+  margin:0px;
+}
+
+#nav-tree .label {
+  margin:0px;
+  padding:0px;
+  font: 12px var(--font-family-nav);
+  line-height: 22px;
+}
+
+#nav-tree .selected a {
+  text-decoration:none;
+  color:var(--page-link-color);
+}
+
+#nav-tree .children_ul {
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree .item {
+  margin: 0 6px 0 -5px;
+  padding: 0 0 0 5px;
+}
+
+#nav-tree {
+  padding: 0px 0px;
+  font-size:14px;
+  overflow:auto;
+}
+
+#doc-content {
+  overflow:auto;
+  display:block;
+  padding:0px;
+  margin:0px;
+  -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#side-nav {
+  padding:0 6px 0 0;
+  margin: 0px;
+  display:block;
+  position: absolute;
+  left: 0px;
+  overflow : hidden;
+}
+
+.ui-resizable .ui-resizable-handle {
+  display:block;
+}
+
+.ui-resizable-e {
+  transition: opacity 0.5s ease;
+  background-color: var(--nav-splitbar-bg-color);
+  opacity:0;
+  cursor:col-resize;
+  height:100%;
+  right:0;
+  top:0;
+  width:6px;
+  position: relative;
+}
+
+.ui-resizable-e:after {
+  content: '';
+  display: block;
+  top: 50%;
+  left: 1px;
+  width: 2px;
+  height: 15px;
+  border-left: 1px solid var(--nav-splitbar-handle-color);
+  border-right: 1px solid var(--nav-splitbar-handle-color);
+  position: absolute;
+}
+
+.ui-resizable-e:hover {
+  opacity: 1;
+}
+
+.ui-resizable-handle {
+  display:none;
+  font-size:0.1px;
+  position:absolute;
+  z-index:1;
+}
+
+#nav-tree-contents {
+  margin: 6px 0px 0px 0px;
+}
+
+#nav-tree {
+  background-color: var(--nav-background-color);
+  -webkit-overflow-scrolling : touch; /* iOS 5+ */
+  scrollbar-width: thin;
+  border-right: 1px solid var(--nav-border-color);
+  padding-left: 5px;
+}
+
+#nav-sync {
+  position:absolute;
+  top:0px;
+  right:0px;
+  z-index:1;
+}
+
+#nav-sync img {
+  opacity:0.3;
+}
+
+div.nav-sync-icon {
+	position: relative;
+	width: 24px;
+	height: 17px;
+	left: -6px;
+	top: -1px;
+	opacity: 0.7;
+	display: inline-block;
+	background-color: var(--sync-icon-background-color);
+	border: 1px solid var(--sync-icon-border-color);
+	box-sizing: content-box;
+}
+
+div.nav-sync-icon:hover {
+	background-color: var(--sync-icon-selected-background-color);
+	opacity: 1.0;
+}
+
+div.nav-sync-icon.active:after {
+	content: '';
+	background-color: var(--sync-icon-background-color);
+	border-top: 2px solid var(--sync-icon-color);
+	position: absolute;
+	width: 16px;
+	height: 0px;
+	top: 7px;
+	left: 4px;
+}
+
+div.nav-sync-icon.active:hover:after {
+	border-top: 2px solid var(--sync-icon-selected-color);
+}
+
+span.sync-icon-left {
+	position: absolute;
+	padding: 0;
+	margin: 0;
+	top: 3px;
+	left: 4px;
+	display: inline-block;
+	width: 8px;
+	height: 8px;
+	border-left: 2px solid var(--sync-icon-color);
+	border-top: 2px solid var(--sync-icon-color);
+	transform: rotate(-45deg);
+}
+
+span.sync-icon-right {
+	position: absolute;
+	padding: 0;
+	margin: 0;
+	top: 3px;
+	left: 10px;
+	display: inline-block;
+	width: 8px;
+	height: 8px;
+	border-right: 2px solid var(--sync-icon-color);
+	border-bottom: 2px solid var(--sync-icon-color);
+	transform: rotate(-45deg);
+}
+
+div.nav-sync-icon:hover span.sync-icon-left {
+	border-left: 2px solid var(--sync-icon-selected-color);
+	border-top: 2px solid var(--sync-icon-selected-color);
+}
+
+div.nav-sync-icon:hover span.sync-icon-right {
+	border-right: 2px solid var(--sync-icon-selected-color);
+	border-bottom: 2px solid var(--sync-icon-selected-color);
+}
+
+#nav-path ul {
+  border-top: 1px solid var(--nav-breadcrumb-separator-color);
+}
+
+@media print
+{
+  #nav-tree { display: none; }
+  div.ui-resizable-handle { display: none; position: relative; }
+}
+
+/*---------------------------*/
+#container {
+	display: grid;
+	grid-template-columns: auto auto;
+	overflow: hidden;
+}
+
+#page-nav {
+	background: var(--nav-background-color);
+	display: block;
+	width: 250px;
+	box-sizing: content-box;
+	position: relative;
+	border-left: 1px solid var(--nav-border-color);
+}
+
+#page-nav img.inline {
+	float: none;
+	max-height: 19px;
+}
+
+#page-nav-tree {
+	display: inline-block;
+}
+
+#page-nav-resize-handle {
+  transition: opacity 0.5s ease;
+  background-color: var(--nav-splitbar-bg-color);
+  opacity:0;
+  cursor:col-resize;
+  height:100%;
+  right:0;
+  top:0;
+  width:6px;
+  position: relative;
+  z-index: 1;
+  user-select: none;
+}
+
+#page-nav-resize-handle:after {
+  content: '';
+  display: block;
+  top: 50%;
+  left: 1px;
+  width: 2px;
+  height: 15px;
+  border-left: 1px solid var(--nav-splitbar-handle-color);
+  border-right: 1px solid var(--nav-splitbar-handle-color);
+  position: absolute;
+}
+
+#page-nav-resize-handle.dragging,
+#page-nav-resize-handle:hover {
+  opacity: 1;
+}
+
+#page-nav-contents {
+  padding: 0;
+  margin: 0;
+  display: block;
+  top: 0;
+  left: 0;
+  height: 100%;
+  width: 100%;
+  position: absolute;
+  overflow: auto;
+  scrollbar-width: thin;
+  -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+ul.page-outline,
+ul.page-outline ul {
+  text-indent: 0;
+  list-style: none outside none;
+  padding: 0 0 0 4px;
+}
+
+ul.page-outline {
+  margin: 0 4px 4px 6px;
+}
+
+ul.page-outline div.item {
+  font: 12px var(--font-family-nav);
+  line-height: 22px;
+}
+
+ul.page-outline li {
+  white-space: nowrap;
+}
+
+ul.page-outline li.vis {
+  background-color: var(--nav-breadcrumb-active-bg);
+}
+
+#container.resizing {
+  cursor: col-resize;
+  user-select: none;
+}

+ 1163 - 0
docs/html/navtree.js

@@ -0,0 +1,1163 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+ */
+
+let initResizableFunc;
+
+function initNavTree(toroot,relpath,allMembersFile) {
+  let navTreeSubIndices = [];
+  const ARROW_DOWN = '<span class="arrowhead opened"></span>';
+  const ARROW_RIGHT = '<span class="arrowhead closed"></span>';
+  const NAVPATH_COOKIE_NAME = ''+'navpath';
+  const fullSidebar = document.querySelector('meta[name="doxygen-page-layout"]') !== null;
+
+  // Helper functions to replace jQuery
+  const $  = (selector) => document.querySelector(selector);
+  const $$ = (selector) => Array.from(document.querySelectorAll(selector));
+  const hasClass = (el, className) => el ? el.classList.contains(className) : false;
+  const offsetTop = (el) => el ? (el.getBoundingClientRect().top + window.pageYOffset) : 0;
+
+  const slideUp = function(el, duration, callback) {
+    if (!el) return;
+    el.style.overflow = 'hidden';
+    el.style.transition = `height ${duration}ms ease`;
+    el.style.height = el.scrollHeight + 'px';
+    setTimeout(() => {
+      el.style.height = '0';
+      setTimeout(() => {
+        el.style.display = 'none';
+        el.style.transition = '';
+        el.style.overflow = '';
+        el.style.height = '';
+        if (callback) callback();
+      }, duration);
+    }, 10);
+  };
+
+  const slideDown = function(el, duration, callback) {
+    if (!el) return;
+    el.style.display = 'block';
+    const height = el.scrollHeight;
+    el.style.overflow = 'hidden';
+    el.style.height = '0';
+    el.style.transition = `height ${duration}ms ease`;
+    setTimeout(() => {
+      el.style.height = height + 'px';
+      setTimeout(() => {
+        el.style.transition = '';
+        el.style.overflow = '';
+        el.style.height = '';
+        if (callback) callback();
+      }, duration);
+    }, 10);
+  };
+
+  const animateScrolling = function(el, targetPos, duration, callback) {
+    if (!el) return;
+    const start = performance.now();
+    const startVal = el.scrollTop;
+    const tick = (now) => {
+      const elapsed  = now - start;
+      const progress = Math.min(elapsed / duration, 1);
+      const endVal   = targetPos;
+      el.scrollTop   = startVal + (endVal - startVal) * progress;
+
+      if (progress < 1) {
+        requestAnimationFrame(tick);
+      } else if (callback) {
+        callback();
+      }
+    };
+    requestAnimationFrame(tick);
+  };
+
+  function getScrollBarWidth () {
+    const outer = document.createElement('div');
+    outer.style.visibility='hidden';
+    outer.style.width='100px';
+    outer.style.overflow='scroll';
+    outer.style.scrollbarWidth='thin';
+    document.body.appendChild(outer);
+
+    const inner = document.createElement('div');
+    inner.style.width='100%';
+    outer.appendChild(inner);
+
+    const widthWithScroll = inner.offsetWidth;
+    document.body.removeChild(outer);
+    return 100 - widthWithScroll;
+  }
+  const scrollbarWidth = getScrollBarWidth();
+
+  function adjustSyncIconPosition() {
+    if (!fullSidebar) {
+      const nt = document.getElementById("nav-tree");
+      const hasVerticalScrollbar = nt.scrollHeight > nt.clientHeight;
+      const navSync = $("#nav-sync");
+      navSync.style.right = (hasVerticalScrollbar ? scrollbarWidth : 0) + 'px';
+    }
+  }
+
+  const getData = function(varName) {
+    const i = varName.lastIndexOf('/');
+    const n = i>=0 ? varName.substring(i+1) : varName;
+    const e = n.replace(/-/g,'_');
+    const r = (e[0] >= '0' && e[0] <= '9') ? '_' + e : e;
+
+    return window[r];
+  }
+
+  const stripPath = (uri) => uri.substring(uri.lastIndexOf('/')+1);
+
+  const stripPath2 = function(uri) {
+    const i = uri.lastIndexOf('/');
+    const s = uri.substring(i+1);
+    const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
+    return m ? uri.substring(i-6) : s;
+  }
+
+  const hashValue = () => location.hash.substring(1).replace(/[^\w-]/g,'');
+  const hashUrl = () => '#'+hashValue();
+  const pathName = () => location.pathname.replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, '');
+
+  const storeLink = function(link) {
+    const navSync = $("#nav-sync");
+    if (!hasClass(navSync, 'sync')) {
+      Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0);
+    }
+  }
+
+  const deleteLink = function() {
+    Cookie.eraseSetting(NAVPATH_COOKIE_NAME);
+  }
+
+  const cachedLink = () => Cookie.readSetting(NAVPATH_COOKIE_NAME,'');
+
+  const getScript = function(scriptName,func) {
+    const head = document.getElementsByTagName("head")[0];
+    const script = document.createElement('script');
+    script.id = scriptName;
+    script.type = 'text/javascript';
+    script.onload = function() { func(); adjustSyncIconPosition(); }
+    script.src = scriptName+'.js';
+    head.appendChild(script);
+  }
+
+  const createIndent = function(o,domNode,node) {
+    let level=-1;
+    let n = node;
+    while (n.parentNode) { level++; n=n.parentNode; }
+    if (node.childrenData) {
+      const imgNode = document.createElement("span");
+      imgNode.className = 'arrow';
+      imgNode.style.paddingLeft=(16*level).toString()+'px';
+      imgNode.innerHTML=ARROW_RIGHT;
+      node.plus_img = imgNode;
+      node.expandToggle = document.createElement("a");
+      node.expandToggle.href = "javascript:void(0)";
+      node.expandToggle.onclick = function() {
+        if (node.expanded) {
+          slideUp(node.getChildrenUL(), 200, adjustSyncIconPosition);
+          const child0 = node.plus_img.childNodes[0]
+          if (child0) {
+            child0.classList.remove('opened');
+            child0.classList.add('closed');
+          }
+          node.expanded = false;
+        } else {
+          expandNode(o, node, false, true);
+        }
+      }
+      node.expandToggle.appendChild(imgNode);
+      domNode.appendChild(node.expandToggle);
+    } else {
+      let span = document.createElement("span");
+      span.className = 'arrow';
+      span.style.width = 16*(level+1)+'px';
+      span.innerHTML = '&#160;';
+      domNode.appendChild(span);
+    }
+  }
+
+  let animationInProgress = false;
+
+  const gotoAnchor = function(anchor,aname) {
+    if (!anchor) return;
+    let pos, docContent = $('#doc-content');
+    if (!docContent) return;
+
+    const anchorParent = anchor.parentElement;
+    if (!anchorParent) return;
+
+    const parentClass = anchorParent.className;
+    if (hasClass(anchorParent, 'memItemLeft') || hasClass(anchorParent, 'memtitle') ||
+        hasClass(anchorParent, 'fieldname')   || hasClass(anchorParent, 'fieldtype') ||
+        anchorParent.tagName.match(/^H[1-6]$/)) {
+      pos = offsetTop(anchorParent); // goto anchor's parent
+    } else {
+      pos = offsetTop(anchor); // goto anchor
+    }
+    if (pos) {
+      const dcOffset    = offsetTop(docContent);
+      const dcHeight    = docContent.clientHeight;
+      const dcScrHeight = docContent.scrollHeight;
+      const dcScrTop    = docContent.scrollTop;
+      let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop));
+      animationInProgress = true;
+      animateScrolling(docContent, pos+dcScrTop-dcOffset, Math.max(50,Math.min(500,dist)), function() {
+        animationInProgress=false;
+        if (parentClass=='memItemLeft') {
+          const rows = $$('.memberdecls tr[class$="'+hashValue()+'"]');
+          rows.forEach(row => {
+            const children = Array.from(row.children);
+            children.forEach(child => glowEffect(child, 300));
+          });
+        } else if (parentClass=='fieldname') {
+          glowEffect(anchorParent.parentElement, 1000); // enum value
+        } else if (parentClass=='fieldtype') {
+          glowEffect(anchorParent.parentElement, 1000); // struct field
+        } else if (anchorParent.tagName.match(/^H[1-6]$/)) {
+          glowEffect(anchorParent, 1000); // section header
+        } else {
+          glowEffect(anchor.nextElementSibling, 1000); // normal member
+        }
+      });
+    }
+  }
+
+  function htmlToNode(html) {
+    const template = document.createElement('template');
+    template.innerHTML = html;
+    const nNodes = template.content.childNodes.length;
+    if (nNodes !== 1) {
+        throw new Error(`html parameter must represent a single node; got ${nNodes}. `);
+    }
+    return template.content.firstChild;
+  }
+
+  const newNode = function(o, po, text, link, childrenData, lastNode) {
+    const node = {
+      children     : [],
+      childrenData : childrenData,
+      depth        : po.depth + 1,
+      relpath      : po.relpath,
+      isLast       : lastNode,
+      li           : document.createElement("li"),
+      parentNode   : po,
+      itemDiv      : document.createElement("div"),
+      labelSpan    : document.createElement("span"),
+      expanded     : false,
+      childrenUL   : null,
+      getChildrenUL : function() {
+        if (!this.childrenUL) {
+          this.childrenUL = document.createElement("ul");
+          this.childrenUL.className = "children_ul";
+          this.childrenUL.style.display = "none";
+          this.li.appendChild(node.childrenUL);
+        }
+        return node.childrenUL;
+      },
+    };
+
+    node.itemDiv.className = "item";
+    node.labelSpan.className = "label";
+    createIndent(o,node.itemDiv,node);
+    node.itemDiv.appendChild(node.labelSpan);
+    node.li.appendChild(node.itemDiv);
+
+    const a = document.createElement("a");
+    node.labelSpan.appendChild(a);
+    po.getChildrenUL().appendChild(node.li);
+    a.appendChild(htmlToNode('<span>'+text+'</span>'));
+    if (link) {
+      let url;
+      if (link.substring(0,1)=='^') {
+        url = link.substring(1);
+        link = url;
+      } else {
+        url = node.relpath+link;
+      }
+      a.className = stripPath(link.replace('#',':'));
+      if (link.indexOf('#')!=-1) {
+        const aname = '#'+link.split('#')[1];
+        const srcPage = stripPath(pathName());
+        const targetPage = stripPath(link.split('#')[0]);
+        a.href = srcPage!=targetPage ? url : aname;
+        a.onclick = function() {
+          storeLink(link);
+          const aPPar = a.parentElement.parentElement;
+          if (!hasClass(aPPar, 'selected')) {
+            $$('.item').forEach(item => {
+              item.classList.remove('selected');
+              item.removeAttribute('id');
+            });
+            aPPar.classList.add('selected');
+            aPPar.setAttribute('id', 'selected');
+          }
+          const anchor = document.querySelector(aname);
+          gotoAnchor(anchor,aname);
+        };
+      } else {
+        a.href = url;
+        a.onclick = () => storeLink(link);
+      }
+    } else if (childrenData != null) {
+      a.className = "nolink";
+      a.href = "javascript:void(0)";
+      a.onclick = node.expandToggle.onclick;
+    }
+    return node;
+  }
+
+  const showRoot = function() {
+    const top = $("#top");
+    const navPath = $("#nav-path");
+    const headerHeight = top ? top.clientHeight : 0;
+    const footerHeight = navPath ? navPath.clientHeight : 0;
+    const windowHeight = window.innerHeight - headerHeight - footerHeight;
+    (function retry() { // retry until we can scroll to the selected item
+      try {
+        const navtree = $('#nav-tree');
+        if (navtree) {
+          const selected = navtree.querySelector('#selected');
+          if (selected) {
+            const offset = -windowHeight/2;
+            const targetPos = selected.offsetTop + offset;
+            animateScrolling(navtree, Math.max(0, targetPos), 100);
+          }
+        }
+      } catch (err) {
+        setTimeout(retry, 0);
+      }
+    })();
+  }
+
+  const expandNode = function(o, node, imm, setFocus) {
+    if (node.childrenData && !node.expanded) {
+      if (typeof(node.childrenData)==='string') {
+        const varName = node.childrenData;
+        getScript(node.relpath+varName,function() {
+          node.childrenData = getData(varName);
+          expandNode(o, node, imm, setFocus);
+        });
+      } else {
+        if (!node.childrenVisited) {
+          getNode(o, node);
+        }
+        slideDown(node.getChildrenUL(), 200, adjustSyncIconPosition);
+        const child0 = node.plus_img.childNodes[0]
+        if (child0) {
+            child0.classList.add('opened');
+            child0.classList.remove('closed');
+        }
+        node.expanded = true;
+        if (setFocus) {
+          node.expandToggle.focus();
+        }
+      }
+    }
+  }
+
+  const glowEffect = function(n, duration) {
+    if (!n) return;
+    n.classList.add('glow');
+    setTimeout(() => {
+      n.classList.remove('glow');
+    }, duration);
+  }
+
+  const highlightAnchor = function() {
+    const aname = hashUrl();
+    const anchor = document.querySelector(aname);
+    gotoAnchor(anchor,aname);
+  }
+
+  const selectAndHighlight = function(hash,n) {
+    let a;
+    if (hash) {
+      const link=stripPath(pathName())+':'+hash.substring(1);
+      a=document.querySelector('.item a[class$="'+link+'"]');
+    }
+    if (a) {
+      const parent = a.parentElement.parentElement;
+      if (parent) {
+        parent.classList.add('selected');
+        parent.setAttribute('id', 'selected');
+      }
+      highlightAnchor();
+    } else if (n && n.itemDiv) {
+      n.itemDiv.classList.add('selected');
+      n.itemDiv.setAttribute('id', 'selected');
+    }
+    let topOffset=5;
+    const firstItem = document.querySelector('#nav-tree-contents .item:first-child');
+    if (firstItem && hasClass(firstItem, 'selected')) {
+      topOffset+=25;
+    }
+    showRoot();
+  }
+
+  const showNode = function(o, node, index, hash) {
+    if (node && node.childrenData) {
+      if (typeof(node.childrenData)==='string') {
+        const varName = node.childrenData;
+        getScript(node.relpath+varName,function() {
+          node.childrenData = getData(varName);
+          showNode(o,node,index,hash);
+        });
+      } else {
+        if (!node.childrenVisited) {
+          getNode(o, node);
+        }
+        const childUL = node.getChildrenUL();
+        if (childUL) {
+          childUL.style.display='block';
+        }
+        const child0 = node.plus_img.childNodes[0];
+        if (child0) {
+          child0.classList.remove('closed');
+          child0.classList.add('opened');
+        }
+        node.expanded = true;
+        const n = node.children[o.breadcrumbs[index]];
+        if (index+1<o.breadcrumbs.length) {
+          showNode(o,n,index+1,hash);
+        } else if (typeof(n.childrenData)==='string') {
+          const varName = n.childrenData;
+          getScript(n.relpath+varName,function() {
+            n.childrenData = getData(varName);
+            node.expanded=false;
+            showNode(o,node,index,hash); // retry with child node expanded
+          });
+        } else {
+          const rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
+          if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
+            expandNode(o, n, true, false);
+          }
+          selectAndHighlight(hash,n);
+        }
+      }
+    } else {
+      selectAndHighlight(hash);
+    }
+  }
+
+  const getNode = function(o, po) {
+    po.childrenVisited = true;
+    const l = po.childrenData.length-1;
+    for (let i in po.childrenData) {
+      const nodeData = po.childrenData[i];
+      po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2], i==l);
+    }
+  }
+
+  const gotoNode = function(o,subIndex,root,hash,relpath) {
+    const nti = navTreeSubIndices[subIndex][root+hash];
+    if (nti==undefined && hash.length>0) { // try root page without hash as fallback
+      gotoUrl(o,root,'',relpath);
+    } else {
+      o.breadcrumbs = nti ? JSON.parse(JSON.stringify(nti)) : null;
+      if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
+        navTo(o,NAVTREE[0][1],"",relpath);
+        $$('.item').forEach(item => {
+          item.classList.remove('selected');
+          item.removeAttribute('id');
+        });
+      }
+      if (o.breadcrumbs) {
+        o.breadcrumbs.unshift(0); // add 0 for root node
+        showNode(o, o.node, 0, hash);
+      }
+    }
+  }
+
+  const gotoUrl = function(o,root,hash,relpath) {
+    const url=root+hash;
+    let i=-1;
+    while (NAVTREEINDEX[i+1]<=url) i++;
+    if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
+    if (navTreeSubIndices[i]) {
+      gotoNode(o,i,root,hash,relpath)
+    } else {
+      getScript(relpath+'navtreeindex'+i,function() {
+        navTreeSubIndices[i] = window['NAVTREEINDEX'+i];
+        if (navTreeSubIndices[i]) {
+          gotoNode(o,i,root,hash,relpath);
+        }
+      });
+    }
+  }
+
+  const navTo = function(o,root,hash,relpath) {
+    const link = cachedLink();
+    if (link) {
+      const parts = link.split('#');
+      root = parts[0];
+      hash = parts.length>1 ? '#'+parts[1].replace(/[^\w-]/g,'') : '';
+    }
+    if (hash.match(/^#l\d+$/)) {
+      const anchor = document.querySelector('a[name='+hash.substring(1)+']');
+      if (anchor && anchor.parentElement) {
+        glowEffect(anchor.parentElement, 1000); // line number
+      }
+      hash=''; // strip line number anchors
+    }
+    gotoUrl(o,root,hash,relpath);
+  }
+
+  const showSyncOff = function(n,relpath) {
+    if (n) n.innerHTML = '<div class="nav-sync-icon" title="'+SYNCOFFMSG+'"><span class="sync-icon-left"></span><span class="sync-icon-right"></span></div>';
+  }
+
+  const showSyncOn = function(n,relpath) {
+    if (n) n.innerHTML = '<div class="nav-sync-icon active" title="'+SYNCONMSG+'"><span class="sync-icon-left"></span><span class="sync-icon-right"></span></div>';
+  }
+
+  const o = {
+    toroot : toroot,
+    node   : {
+      childrenData  : NAVTREE,
+      children      : [],
+      childrenUL    : document.createElement("ul"),
+      getChildrenUL : function() { return this.childrenUL },
+      li            : document.getElementById("nav-tree-contents"),
+      depth         : 0,
+      relpath       : relpath,
+      expanded      : false,
+      isLast        : true,
+      plus_img      : document.createElement("span"),
+    },
+  };
+  o.node.li.appendChild(o.node.childrenUL);
+  o.node.plus_img.className = 'arrow';
+  o.node.plus_img.innerHTML = ARROW_RIGHT;
+
+  const navSync = $('#nav-sync');
+  if (cachedLink()) {
+    showSyncOff(navSync,relpath);
+    navSync.classList.remove('sync');
+  } else {
+    showSyncOn(navSync,relpath);
+  }
+
+  if (navSync) {
+    navSync.addEventListener('click', () => {
+      const navSync = $('#nav-sync');
+      if (hasClass(navSync, 'sync')) {
+        navSync.classList.remove('sync');
+        showSyncOff(navSync,relpath);
+        storeLink(stripPath2(pathName())+hashUrl());
+      } else {
+        navSync.classList.add('sync');
+        showSyncOn(navSync,relpath);
+        deleteLink();
+      }
+    });
+  }
+
+  navTo(o,toroot,hashUrl(),relpath);
+  showRoot();
+
+  window.addEventListener('hashchange', () => {
+    if (!animationInProgress) {
+      if (window.location.hash && window.location.hash.length>1) {
+        let a;
+        if (location.hash) {
+          const clslink=stripPath(pathName())+':'+hashValue();
+          a=document.querySelector('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
+        }
+        if (a==null || !hasClass(a.parentElement.parentElement, 'selected')) {
+          $$('.item').forEach(item => {
+            item.classList.remove('selected');
+            item.removeAttribute('id');
+          });
+        }
+        const link=stripPath2(pathName());
+        navTo(o,link,hashUrl(),relpath);
+      } else {
+        const docContent = $('#doc-content');
+        if (docContent) docContent.scrollTop = 0;
+        $$('.item').forEach(item => {
+          item.classList.remove('selected');
+          item.removeAttribute('id');
+        });
+        navTo(o,toroot,hashUrl(),relpath);
+      }
+    }
+  });
+
+  window.addEventListener('resize', function() { adjustSyncIconPosition(); });
+
+  let navtree_trampoline = {
+    updateContentTop : function() {}
+  }
+
+  function initResizable() {
+    let sidenav,mainnav,pagenav,container,navtree,content,header,footer,barWidth=6;
+    const RESIZE_COOKIE_NAME = ''+'width';
+    const PAGENAV_COOKIE_NAME = ''+'pagenav';
+    const fullSidebar = document.querySelector('meta[name="doxygen-page-layout"]') !== null;
+
+    function showHideNavBar() {
+      const bar = document.querySelector('div.sm-dox');
+      if (fullSidebar && mainnav && bar) {
+        if (mainnav.clientWidth < 768) {
+          bar.style.display = 'none';
+        } else {
+          bar.style.display = '';
+        }
+      }
+    }
+
+    function constrainPanelWidths(leftPanelWidth,rightPanelWidth,dragLeft) {
+      const contentWidth = container.clientWidth - leftPanelWidth - rightPanelWidth;
+      const minContentWidth = 250;
+      const minPanelWidth = barWidth;
+      if (contentWidth<minContentWidth) // need to shrink panels
+      {
+        const deficit = minContentWidth - contentWidth;
+        if (dragLeft) { // dragging left handle -> try to keep right panel width
+          const shrinkLeft = Math.min(deficit, leftPanelWidth-minPanelWidth);
+          leftPanelWidth -= shrinkLeft;
+          const remainingDeficit = deficit - shrinkLeft;
+          const shrinkRight = Math.min(remainingDeficit, rightPanelWidth-minPanelWidth);
+          rightPanelWidth -= shrinkRight;
+        } else { // dragging right handle -> try to keep left panel width
+          const shrinkRight = Math.min(deficit, rightPanelWidth-minPanelWidth);
+          rightPanelWidth -= shrinkRight;
+          const remainingDeficit = deficit - shrinkRight;
+          const shrinkLeft = Math.min(remainingDeficit, leftPanelWidth-minPanelWidth);
+          leftPanelWidth -= shrinkLeft;
+        }
+      } else {
+        rightPanelWidth = pagenav ? Math.max(minPanelWidth,rightPanelWidth) : 0;
+        leftPanelWidth = Math.max(minPanelWidth,leftPanelWidth);
+      }
+      return { leftPanelWidth, rightPanelWidth }
+    }
+
+    function updateWidths(sidenavWidth,pagenavWidth,dragLeft)
+    {
+      const widths = constrainPanelWidths(sidenavWidth,pagenavWidth,dragLeft);
+      const widthStr = parseFloat(widths.leftPanelWidth)+"px";
+      content.style.marginLeft = widthStr;
+      if (fullSidebar) {
+        footer.style.marginLeft = widthStr;
+        if (mainnav) {
+          mainnav.style.marginLeft = widthStr;
+        }
+      }
+      sidenav.style.width = widthStr;
+      if (pagenav) {
+        container.style.gridTemplateColumns = 'auto '+parseFloat(widths.rightPanelWidth)+'px';
+        if (!dragLeft) {
+          pagenav.style.width = parseFloat(widths.rightPanelWidth-1)+'px';
+        }
+      }
+      return widths;
+    }
+
+    function resizeWidth(dragLeft) {
+      const sidenavWidth = sidenav.offsetWidth - barWidth;
+      let pagenavWidth = pagenav ? pagenav.offsetWidth : 0;
+      const widths = updateWidths(sidenavWidth,pagenavWidth,dragLeft);
+      Cookie.writeSetting(RESIZE_COOKIE_NAME,widths.leftPanelWidth-barWidth);
+      if (pagenav) {
+        Cookie.writeSetting(PAGENAV_COOKIE_NAME,widths.rightPanelWidth);
+      }
+    }
+
+    function restoreWidth(sidenavWidth,pagenavWidth) {
+      updateWidths(sidenavWidth,pagenavWidth,false);
+      showHideNavBar();
+    }
+
+    function resizeHeight() {
+      const headerHeight = header.offsetHeight;
+      const windowHeight = window.innerHeight;
+      let contentHeight;
+      const footerHeight = footer.offsetHeight;
+      let navtreeHeight,sideNavHeight;
+      if (!fullSidebar) {
+        contentHeight = windowHeight - headerHeight - footerHeight - 1;
+        navtreeHeight = contentHeight;
+        sideNavHeight = contentHeight;
+      } else if (fullSidebar) {
+        contentHeight = windowHeight - footerHeight - 1;
+        navtreeHeight = windowHeight - headerHeight - 1;
+        sideNavHeight = windowHeight - 1;
+        if (mainnav) {
+          contentHeight -= mainnav.offsetHeight;
+        }
+      }
+      navtree.style.height = navtreeHeight + "px";
+      sidenav.style.height = sideNavHeight + "px";
+      content.style.height = contentHeight + "px";
+      resizeWidth(false);
+      showHideNavBar();
+      if (location.hash.slice(1)) {
+        (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView();
+      }
+    }
+
+    header  = $("#top");
+    content = $("#doc-content");
+    footer  = $("#nav-path");
+    sidenav = $("#side-nav");
+    if (document.getElementById('main-nav')) {
+      mainnav = $("#main-nav");
+    }
+    navtree   = $("#nav-tree");
+    pagenav   = $("#page-nav");
+    container = $("#container");
+
+    // Native JavaScript implementation for resizable side navigation
+    const splitbar = $("#splitbar");
+    if (splitbar) {
+      // Add the ui-resizable-e class to make the splitbar visible and styled correctly
+      splitbar.classList.add('ui-resizable-e');
+      splitbar.style.zIndex = 90;
+
+      let isResizing = false;
+      let startX = 0;
+      let startWidth = 0;
+
+      const startResize = (e) => {
+        startX = e.clientX ?? e.touches?.[0]?.clientX;
+        startWidth = sidenav.offsetWidth - barWidth;
+        document.body.classList.add('resizing');
+        document.body.style.cursor = 'col-resize';
+
+        const doResize = (e) => {
+          const clientX = e.clientX ?? e.touches?.[0]?.clientX;
+          if (clientX === undefined) return;
+          const delta = clientX - startX;
+          const newWidth = startWidth + delta;
+          sidenav.style.width = newWidth + 'px';
+          resizeWidth(true);
+        };
+
+        const stopResize = () => {
+          document.body.classList.remove('resizing');
+          document.body.style.cursor = 'auto';
+          document.removeEventListener('mousemove', doResize);
+          document.removeEventListener('touchmove', doResize);
+          document.removeEventListener('mouseup',   stopResize);
+          document.removeEventListener('touchend',  stopResize);
+        };
+
+        document.addEventListener('mousemove', doResize);
+        document.addEventListener('touchmove', doResize);
+        document.addEventListener('mouseup', stopResize);
+        document.addEventListener('touchend', stopResize);
+      };
+
+      splitbar.addEventListener('mousedown', startResize);
+      splitbar.addEventListener('touchstart', startResize, { passive: false });
+    }
+
+    if (pagenav) {
+      const pagehandle = $("#page-nav-resize-handle");
+      if (pagehandle) {
+        const startDrag = (e) => {
+          document.body.classList.add('resizing');
+          pagehandle.classList.add('dragging');
+
+          const mouseMoveHandler = (e) => {
+            const clientX = e.clientX ?? e.touches?.[0]?.clientX;
+            if (clientX === undefined) return;
+            let pagenavWidth = container.offsetWidth - clientX + barWidth/2;
+            const sidenavWidth = sidenav.clientWidth;
+            const widths = constrainPanelWidths(sidenavWidth,pagenavWidth,false);
+            container.style.gridTemplateColumns = 'auto '+parseFloat(widths.rightPanelWidth)+'px';
+            pagenav.style.width = parseFloat(widths.rightPanelWidth-1)+'px';
+            content.style.marginLeft = parseFloat(widths.leftPanelWidth - barWidth)+'px';
+            Cookie.writeSetting(PAGENAV_COOKIE_NAME,pagenavWidth);
+          };
+
+          const mouseUpHandler = (e) => {
+            document.body.classList.remove('resizing');
+            pagehandle.classList.remove('dragging');
+            document.removeEventListener('mousemove', mouseMoveHandler);
+            document.removeEventListener('mouseup',   mouseUpHandler);
+            document.removeEventListener('touchmove', mouseMoveHandler);
+            document.removeEventListener('touchend',  mouseUpHandler);
+          };
+
+          document.addEventListener('mousemove', mouseMoveHandler);
+          document.addEventListener('touchmove', mouseMoveHandler);
+          document.addEventListener('mouseup',   mouseUpHandler);
+          document.addEventListener('touchend',  mouseUpHandler);
+        };
+
+        pagehandle.addEventListener('mousedown', startDrag);
+        pagehandle.addEventListener('touchstart', startDrag, { passive: false });
+      }
+    } else {
+      container.style.gridTemplateColumns = 'auto';
+    }
+    const width = parseInt(Cookie.readSetting(RESIZE_COOKIE_NAME,250));
+    const pagenavWidth = parseInt(Cookie.readSetting(PAGENAV_COOKIE_NAME,250));
+    if (width) { restoreWidth(width+barWidth,pagenavWidth); } else { resizeWidth(); }
+    const url = location.href;
+    const i=url.indexOf("#");
+    if (i>=0) window.location.hash=url.substr(i);
+
+
+    let lastWidth = -1;
+    let lastHeight = -1;
+    window.addEventListener('resize', function() {
+        const newWidth = window.innerWidth;
+        const newHeight = window.innerHeight;
+        if (newWidth!=lastWidth || newHeight!=lastHeight) {
+          resizeHeight();
+          navtree_trampoline.updateContentTop();
+          lastWidth = newWidth;
+          lastHeight = newHeight;
+        }
+    });
+    resizeHeight();
+    lastWidth = window.innerWidth;
+    lastHeight = window.innerHeight;
+    if (content) {
+      content.addEventListener('scroll', function() {
+        navtree_trampoline.updateContentTop();
+      });
+    }
+  }
+
+  function initPageToc() {
+    const topMapping = [];
+    const toc_contents = $('#page-nav-contents');
+    const content = document.createElement('ul');
+    content.className = 'page-outline';
+
+    var entityMap = {
+      '&': '&amp;',
+      '<': '&lt;',
+      '>': '&gt;',
+      '"': '&quot;',
+      "'": '&#39;',
+      '/': '&#x2F;',
+      '`': '&#x60;',
+      '=': '&#x3D;'
+    };
+    function escapeHtml (string) {
+      return String(string).replace(/[&<>"'`=\/]/g, function (s) {
+        return entityMap[s];
+      });
+    }
+
+    // for ClassDef/GroupDef/ModuleDef/ConceptDef/DirDef
+    const groupSections = [];
+    let currentGroup = null;
+    $$('h2.groupheader, h2.memtitle').forEach(function(element){
+      if (hasClass(element, 'groupheader')) {
+        currentGroup = { groupHeader: element, memTitles: [] };
+        groupSections.push(currentGroup);
+      } else if (hasClass(element, 'memtitle') && currentGroup) {
+        currentGroup.memTitles.push(element);
+      }
+    });
+    groupSections.forEach(function(item){
+      const title = item.groupHeader.textContent.trim();
+      let id = item.groupHeader.getAttribute('id');
+      let table = item.groupHeader.closest('table.memberdecls');
+      let rows = [];
+      if (table) {
+        rows = Array.from(table.querySelectorAll("tr[class^='memitem:'] td.memItemRight, tr[class^='memitem:'] td.memItemLeft.anon, tr[class=groupHeader] td"));
+      }
+      function hasSubItems() {
+        return item.memTitles.length>0 || rows.some(function(el) { 
+          return el.offsetParent !== null; // check if visible
+        });
+      }
+      const li = document.createElement('li');
+      li.setAttribute('id', 'nav-'+id);
+      const div = document.createElement('div');
+      div.classList.add('item');
+      const span = document.createElement('span');
+      span.classList.add('arrow');
+      span.style.paddingLeft='0px';
+      if (hasSubItems()) {
+        const arrowSpan = document.createElement('span');
+        arrowSpan.classList.add('arrowhead', 'opened');
+        span.appendChild(arrowSpan);
+      }
+      const ahref = document.createElement('a');
+      ahref.setAttribute('href', '#'+id);
+      ahref.textContent = title;
+      div.appendChild(span);
+      div.appendChild(ahref);
+      li.appendChild(div);
+      content.appendChild(li);
+      topMapping.push(id);
+      const ulStack = [];
+      ulStack.push(content);
+      if (hasSubItems()) {
+        let last_id = undefined;
+        let inMemberGroup = false;
+        // declaration sections have rows for items
+        rows.forEach(function(td) {
+          let tr = td.parentElement;
+          const firstChild = td.childNodes[0];
+          const is_anon_enum = firstChild && firstChild.textContent.trim()=='{';
+          if (hasClass(tr, 'template')) {
+            tr = tr.previousElementSibling;
+          }
+          id = tr.getAttribute('id');
+          let text = is_anon_enum ? 'anonymous enum' : (td.querySelector(':first-child') ? td.querySelector(':first-child').textContent : '');
+          let isMemberGroupHeader = hasClass(tr, 'groupHeader');
+          if (tr.offsetParent !== null && last_id!=id && id!==undefined && id!==null) {
+            if (isMemberGroupHeader && inMemberGroup) {
+              ulStack.pop();
+              inMemberGroup=false;
+            }
+            const li2 = document.createElement('li');
+            li2.setAttribute('id', 'nav-'+id);
+            const div2 = document.createElement('div');
+            div2.classList.add('item');
+            const span2 = document.createElement('span');
+            span2.classList.add('arrow');
+            span2.style.paddingLeft = parseInt(ulStack.length*16)+'px';
+            const ahref = document.createElement('a');
+            ahref.setAttribute('href', '#'+id);
+            ahref.textContent = escapeHtml(text);
+            div2.appendChild(span2);
+            div2.appendChild(ahref);
+            li2.appendChild(div2);
+            topMapping.push(id);
+            if (isMemberGroupHeader) {
+              const arrowSpan = document.createElement('span');
+              arrowSpan.classList.add('arrowhead','opened');
+              span2.appendChild(arrowSpan);
+              ulStack[ulStack.length-1].appendChild(li2);
+              const ul2 = document.createElement('ul');
+              ulStack.push(ul2);
+              li2.appendChild(ul2);
+              inMemberGroup=true;
+            } else {
+              ulStack[ulStack.length-1].appendChild(li2);
+            }
+            last_id=id;
+          }
+        });
+        // detailed documentation has h2.memtitle sections for items
+        item.memTitles.forEach(function(data) {
+          const childNodes = Array.from(data.childNodes);
+          const firstChild = data.children[0];
+          let text = '';
+          childNodes.forEach(node => {
+            if (node !== firstChild) {
+              text += node.textContent || '';
+            }
+          });
+          const name = text.replace(/\(\)(\s*\[\d+\/\d+\])?$/, '') // func() [2/8] -> func
+          const permalinkAnchor = data.querySelector('span.permalink a');
+          id = permalinkAnchor ? permalinkAnchor.getAttribute('href') : undefined;
+          if (id!==undefined && name!==undefined) {
+            const li2 = document.createElement('li');
+            li2.setAttribute('id', 'nav-'+id.substring(1));
+            const div2 = document.createElement('div');
+            div2.classList.add('item');
+            const span2 = document.createElement('span');
+            span2.classList.add('arrow');
+            span2.style.paddingLeft = parseInt(ulStack.length*16)+'px';
+            const ahref = document.createElement('a');
+            ahref.setAttribute('href', id);
+            ahref.textContent = escapeHtml(name);
+            div2.appendChild(span2);
+            div2.appendChild(ahref);
+            li2.appendChild(div2);
+            ulStack[ulStack.length-1].appendChild(li2);
+            topMapping.push(id.substring(1));
+          }
+        });
+      }
+    });
+    if (allMembersFile.length) { // add entry linking to all members page
+      const url = location.href;
+      let srcBaseUrl = '';
+      let dstBaseUrl = '';
+      if (relpath.length) { // CREATE_SUBDIRS=YES -> find target location
+        srcBaseUrl = url.substring(0, url.lastIndexOf('/')) + '/' + relpath;
+        dstBaseUrl = allMembersFile.substr(0, allMembersFile.lastIndexOf('/'))+'/';
+      }
+      const pageName = url.split('/').pop().split('#')[0].replace(/(\.[^/.]+)$/, '-members$1');
+      const li = document.createElement('li');
+      const div = document.createElement('div');
+      div.classList.add('item');
+      const span = document.createElement('span');
+      span.classList.add('arrow');
+      span.style.paddingLeft='0px';
+      const ahref = document.createElement('a');
+      ahref.setAttribute('href', srcBaseUrl+dstBaseUrl+pageName);
+      ahref.classList.add('noscroll');
+      ahref.textContent = LISTOFALLMEMBERS;
+      div.appendChild(span);
+      div.appendChild(ahref);
+      li.appendChild(div);
+      content.appendChild(li);
+    }
+
+    if (groupSections.length==0) {
+      // for PageDef
+      const sectionTree = [], sectionStack = [];
+      $$('h1.doxsection, h2.doxsection, h3.doxsection, h4.doxsection, h5.doxsection, h6.doxsection').forEach(function(element){
+        const level = parseInt(element.tagName[1]);
+        const anchorEl = element.querySelector('a.anchor');
+        const anchor = anchorEl ? anchorEl.getAttribute('id') : null;
+        // Note: innerHTML is used here to preserve HTML formatting in section headings
+        // This content is generated by doxygen, not from user input
+        const node = { text: element.innerHTML, id: anchor, children: [] };
+        while (sectionStack.length && sectionStack[sectionStack.length - 1].level >= level) sectionStack.pop();
+        (sectionStack.length ? sectionStack[sectionStack.length - 1].children : sectionTree).push(node);
+        sectionStack.push({ ...node, level });
+      });
+      if (sectionTree.length>0) {
+        function render(nodes, level=0) {
+          nodes.map(n => {
+            const li = document.createElement('li');
+            li.setAttribute('id', 'nav-'+n.id);
+            const div = document.createElement('div');
+            div.classList.add('item');
+            const span = document.createElement('span');
+            span.classList.add('arrow');
+            span.setAttribute('style', 'padding-left:'+parseInt(level*16)+'px;');
+            if (n.children.length > 0) {
+              const arrowSpan = document.createElement('span');
+              arrowSpan.classList.add('arrowhead','opened');
+              span.appendChild(arrowSpan);
+            }
+            const url = document.createElement('a');
+            url.setAttribute('href', '#'+n.id);
+            // innerHTML used to preserve HTML formatting from doxygen-generated content
+            url.innerHTML = n.text;
+            div.appendChild(span);
+            div.appendChild(url);
+            li.appendChild(div);
+            content.appendChild(li);
+            topMapping.push(n.id);
+            render(n.children,level+1);
+          });
+        }
+        render(sectionTree);
+      }
+    }
+
+    if (toc_contents) {
+      toc_contents.appendChild(content);
+    }
+
+    $$(".page-outline a[href]:not(.noscroll)").forEach(function(anchor) {
+      anchor.addEventListener('click', function(e) {
+        e.preventDefault();
+        const aname = this.getAttribute("href");
+        gotoAnchor(document.querySelector(aname), aname);
+      });
+    });
+
+    let lastScrollSourceOffset = -1;
+    let lastScrollTargetOffset = -1;
+    let lastScrollTargetId = '';
+
+    navtree_trampoline.updateContentTop = function() {
+      const pagenavcontents = $("#page-nav-contents");
+      if (pagenavcontents) {
+        const content = $("#doc-content");
+        const height = content ? content.clientHeight : 0;
+        const navy = pagenavcontents ? offsetTop(pagenavcontents) : 0;
+        const yc = content ? offsetTop(content) : 0;
+        let offsets = []
+        for (let i=0;i<topMapping.length;i++) {
+          const heading = document.getElementById(topMapping[i]);
+          if (heading && heading.parentElement && hasClass(heading.parentElement, 'doxsection')) {
+            offsets.push({id:topMapping[i],y:offsetTop(heading.parentElement)-yc});
+          } else if (heading) {
+            offsets.push({id:topMapping[i],y:offsetTop(heading)-yc});
+          }
+        }
+        offsets.push({id:'',y:1e10});
+        let scrollTarget = undefined, numItems=0;
+        for (let i=0;i<offsets.length-1;i++) {
+          const ys = offsets[i].y;
+          const ye = offsets[i+1].y;
+          const id = offsets[i].id;
+          const nav = document.getElementById('nav-'+id);
+          const margin = 10; // #pixels before content show as visible
+          if ((ys>margin || ye>margin) && (ys<height-margin || ye<height-margin)) {
+            if (!scrollTarget) scrollTarget=nav;
+            if (nav) nav.classList.add('vis'); // mark navigation entry as visible within content area
+            numItems+=1;
+          } else {
+            if (nav) nav.classList.remove('vis');
+          }
+        }
+        const contentsDiv = document.querySelector('div.contents');
+        const contentScrollOffset = contentsDiv ? offsetTop(contentsDiv) : 0;
+        if (scrollTarget && lastScrollTargetId!=scrollTarget.getAttribute('id')) { // new item to scroll to
+          const scrollDown = contentScrollOffset<lastScrollSourceOffset;
+          const range = 22*numItems;
+          const my = range/2-height/2;
+          const pageOutline = document.querySelector('ul.page-outline');
+          const ulOffset = pageOutline ? offsetTop(pageOutline)-navy : 0;
+          const targetPos = offsetTop(scrollTarget)-navy-ulOffset;
+          const targetOffset=targetPos+my;
+          if ( (scrollDown && targetOffset>lastScrollTargetOffset) ||
+              (!scrollDown && targetOffset<lastScrollTargetOffset)) 
+          { // force panel to scroll in the same direction as content window
+            if (pagenavcontents) {
+              pagenavcontents.scrollTo({
+                left: 0,
+                top: targetOffset,
+                behavior: 'smooth'
+              });
+            }
+            lastScrollTargetOffset = targetOffset;
+          }
+          lastScrollTargetId = scrollTarget.getAttribute('id');
+        }
+        lastScrollSourceOffset = contentScrollOffset;
+      }
+    }
+    // TODO: find out how to avoid a timeout
+    setTimeout(() => {
+      navtree_trampoline.updateContentTop();
+    },200);
+  }
+
+  if (document.readyState === 'loading') {
+    document.addEventListener('DOMContentLoaded', function() {
+      initPageToc();
+      initResizable();
+    });
+  } else {
+    initPageToc();
+    initResizable();
+  }
+
+  initResizableFunc = initResizable;
+
+}
+/* @license-end */

+ 66 - 0
docs/html/navtreedata.js

@@ -0,0 +1,66 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+*/
+var NAVTREE =
+[
+  [ "tinykernel", "index.html", [
+    [ "Namespaces", "namespaces.html", [
+      [ "Namespace List", "namespaces.html", "namespaces_dup" ],
+      [ "Namespace Members", "namespacemembers.html", [
+        [ "All", "namespacemembers.html", null ],
+        [ "Functions", "namespacemembers_func.html", null ],
+        [ "Typedefs", "namespacemembers_type.html", null ],
+        [ "Enumerations", "namespacemembers_enum.html", null ],
+        [ "Enumerator", "namespacemembers_eval.html", null ]
+      ] ]
+    ] ],
+    [ "Classes", "annotated.html", [
+      [ "Class List", "annotated.html", "annotated_dup" ],
+      [ "Class Index", "classes.html", null ],
+      [ "Class Members", "functions.html", [
+        [ "All", "functions.html", null ],
+        [ "Functions", "functions_func.html", null ],
+        [ "Variables", "functions_vars.html", null ]
+      ] ]
+    ] ],
+    [ "Files", "files.html", [
+      [ "File List", "files.html", "files_dup" ],
+      [ "File Members", "globals.html", [
+        [ "All", "globals.html", null ],
+        [ "Functions", "globals_func.html", null ],
+        [ "Variables", "globals_vars.html", null ],
+        [ "Macros", "globals_defs.html", null ]
+      ] ]
+    ] ]
+  ] ]
+];
+
+var NAVTREEINDEX =
+[
+"actor_8hpp.html"
+];
+
+const SYNCONMSG = 'click to disable panel synchronization';
+const SYNCOFFMSG = 'click to enable panel synchronization';
+const LISTOFALLMEMBERS = 'List of all members';

+ 163 - 0
docs/html/navtreeindex0.js

@@ -0,0 +1,163 @@
+var NAVTREEINDEX0 =
+{
+"actor_8hpp.html":[2,0,0,0,0,0,0,0],
+"actor_8hpp_source.html":[2,0,0,0,0,0,0,0],
+"annotated.html":[1,0],
+"classes.html":[1,1],
+"classtk_1_1_actor.html":[0,0,0,1],
+"classtk_1_1_actor.html":[1,0,0,0],
+"classtk_1_1_actor.html#a1147554d6ddb64d822285ca5a03506a4":[0,0,0,1,3],
+"classtk_1_1_actor.html#a1147554d6ddb64d822285ca5a03506a4":[1,0,0,0,3],
+"classtk_1_1_actor.html#a224e6be4dca0d1500f2121e97bd0f92d":[0,0,0,1,5],
+"classtk_1_1_actor.html#a224e6be4dca0d1500f2121e97bd0f92d":[1,0,0,0,5],
+"classtk_1_1_actor.html#a5c4f4f2f1b8011a37773617e34218c2d":[0,0,0,1,7],
+"classtk_1_1_actor.html#a5c4f4f2f1b8011a37773617e34218c2d":[1,0,0,0,7],
+"classtk_1_1_actor.html#a60a2752360fa7185ec7776f2a6ef766a":[0,0,0,1,2],
+"classtk_1_1_actor.html#a60a2752360fa7185ec7776f2a6ef766a":[1,0,0,0,2],
+"classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5":[0,0,0,1,0],
+"classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5":[1,0,0,0,0],
+"classtk_1_1_actor.html#a863f28d824aaa78c75789166b1c2a010":[0,0,0,1,6],
+"classtk_1_1_actor.html#a863f28d824aaa78c75789166b1c2a010":[1,0,0,0,6],
+"classtk_1_1_actor.html#abfc63a514a3ae7cdbdf9ceee81c3b0fc":[0,0,0,1,1],
+"classtk_1_1_actor.html#abfc63a514a3ae7cdbdf9ceee81c3b0fc":[1,0,0,0,1],
+"classtk_1_1_actor.html#ac98ec3132f2ded910a6899b030c06f3f":[0,0,0,1,8],
+"classtk_1_1_actor.html#ac98ec3132f2ded910a6899b030c06f3f":[1,0,0,0,8],
+"classtk_1_1_actor.html#afb31ec0d50d1ac97e6a4ce148a96f78d":[0,0,0,1,4],
+"classtk_1_1_actor.html#afb31ec0d50d1ac97e6a4ce148a96f78d":[1,0,0,0,4],
+"classtk_1_1_event_hub.html":[0,0,0,2],
+"classtk_1_1_event_hub.html":[1,0,0,1],
+"classtk_1_1_lock_guard.html":[0,0,0,3],
+"classtk_1_1_lock_guard.html":[1,0,0,2],
+"classtk_1_1_lock_guard.html#a3a922c7edf84ce25ef67151c322bb0eb":[0,0,0,3,0],
+"classtk_1_1_lock_guard.html#a3a922c7edf84ce25ef67151c322bb0eb":[1,0,0,2,0],
+"classtk_1_1_lock_guard.html#a3f121f8aa1307f0f6e6e608cf138340c":[0,0,0,3,3],
+"classtk_1_1_lock_guard.html#a3f121f8aa1307f0f6e6e608cf138340c":[1,0,0,2,3],
+"classtk_1_1_lock_guard.html#a52eeb50abee00bd0ed16cfa6618ce40f":[0,0,0,3,1],
+"classtk_1_1_lock_guard.html#a52eeb50abee00bd0ed16cfa6618ce40f":[1,0,0,2,1],
+"classtk_1_1_lock_guard.html#af9bc86bc2036c4b8e54633ddee811604":[0,0,0,3,2],
+"classtk_1_1_lock_guard.html#af9bc86bc2036c4b8e54633ddee811604":[1,0,0,2,2],
+"classtk_1_1_mutex.html":[0,0,0,5],
+"classtk_1_1_mutex.html":[1,0,0,4],
+"classtk_1_1_mutex.html#a666dd03fb22c5cb855e3145f76a58b9c":[0,0,0,5,3],
+"classtk_1_1_mutex.html#a666dd03fb22c5cb855e3145f76a58b9c":[1,0,0,4,3],
+"classtk_1_1_mutex.html#a7f5645bba55df2db263f92a954802c27":[0,0,0,5,2],
+"classtk_1_1_mutex.html#a7f5645bba55df2db263f92a954802c27":[1,0,0,4,2],
+"classtk_1_1_mutex.html#a8b17431db60f4ab48a3859b2ca722eb1":[0,0,0,5,0],
+"classtk_1_1_mutex.html#a8b17431db60f4ab48a3859b2ca722eb1":[1,0,0,4,0],
+"classtk_1_1_mutex.html#acf574e35540879481f1f6e5452a504ab":[0,0,0,5,1],
+"classtk_1_1_mutex.html#acf574e35540879481f1f6e5452a504ab":[1,0,0,4,1],
+"classtk_1_1_mutex.html#ae8d5dfd5655b5aa54d63db6e0cf2f707":[0,0,0,5,4],
+"classtk_1_1_mutex.html#ae8d5dfd5655b5aa54d63db6e0cf2f707":[1,0,0,4,4],
+"classtk_1_1_preempt_guard.html":[0,0,0,6],
+"classtk_1_1_preempt_guard.html":[1,0,0,5],
+"classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86":[0,0,0,6,1],
+"classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86":[1,0,0,5,1],
+"classtk_1_1_preempt_guard.html#a360ac2b073064abc0f21db3127e7f389":[0,0,0,6,2],
+"classtk_1_1_preempt_guard.html#a360ac2b073064abc0f21db3127e7f389":[1,0,0,5,2],
+"classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e":[0,0,0,6,0],
+"classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e":[1,0,0,5,0],
+"classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417":[0,0,0,6,3],
+"classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417":[1,0,0,5,3],
+"classtk_1_1_semaphore.html":[0,0,0,7],
+"classtk_1_1_semaphore.html":[1,0,0,6],
+"classtk_1_1_semaphore.html#a3a246c8afc866dc438186d0a53cad5c2":[0,0,0,7,4],
+"classtk_1_1_semaphore.html#a3a246c8afc866dc438186d0a53cad5c2":[1,0,0,6,4],
+"classtk_1_1_semaphore.html#a66c5ac90338a6fcc6a9c2f22f1586de8":[0,0,0,7,0],
+"classtk_1_1_semaphore.html#a66c5ac90338a6fcc6a9c2f22f1586de8":[1,0,0,6,0],
+"classtk_1_1_semaphore.html#a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b":[0,0,0,7,3],
+"classtk_1_1_semaphore.html#a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b":[1,0,0,6,3],
+"classtk_1_1_semaphore.html#a863ccee07bc701a78342c14503955d73":[0,0,0,7,1],
+"classtk_1_1_semaphore.html#a863ccee07bc701a78342c14503955d73":[1,0,0,6,1],
+"classtk_1_1_semaphore.html#ae53b9c57cc25fafb242a21776f112701":[0,0,0,7,2],
+"classtk_1_1_semaphore.html#ae53b9c57cc25fafb242a21776f112701":[1,0,0,6,2],
+"dir_01f710e8c634e538c6d9f00c5eaf4f2e.html":[2,0,0,0],
+"dir_065670814960ad9cf60e14e38242ec92.html":[2,0,0,0,0],
+"dir_34ae86e414c9a960c5c39d1d6b15c7a8.html":[2,0,0,0,0,0],
+"dir_57f08cdb50348f663244f527066db34a.html":[2,0,0,0,0,1],
+"dir_5c27857cec97849c25650021b743744e.html":[2,0,0,0,0,1,0],
+"dir_6d4b68ea9176da934383ead6eaf0491a.html":[2,0,0,0,0,1,0,0],
+"dir_91e9b2eecded889eb8782a5ba7843b6a.html":[2,0,0,0,0,0,0],
+"dir_9b10c2ff4e034627dc7271865b055c64.html":[2,0,0],
+"files.html":[2,0],
+"functions.html":[1,2,0],
+"functions_func.html":[1,2,1],
+"functions_vars.html":[1,2,2],
+"globals.html":[2,1,0],
+"globals_defs.html":[2,1,3],
+"globals_func.html":[2,1,1],
+"globals_vars.html":[2,1,2],
+"index.html":[],
+"kernel_8hpp.html":[2,0,0,0,0,0,0,1],
+"kernel_8hpp.html#a22e1d9f532aa297014c125110226443c":[2,0,0,0,0,0,0,1,3],
+"kernel_8hpp.html#a5c791131c5ad22ed87a8d3ca2cd57d33":[2,0,0,0,0,0,0,1,5],
+"kernel_8hpp.html#af32989639aecb5479b4239639fd133f7":[2,0,0,0,0,0,0,1,6],
+"kernel_8hpp.html#af57e92069cc01608150a45032c5ad473":[2,0,0,0,0,0,0,1,4],
+"kernel_8hpp.html#afde197f9493ef5bdb5b715ce8b52148d":[2,0,0,0,0,0,0,1,2],
+"kernel_8hpp_source.html":[2,0,0,0,0,0,0,1],
+"namespacemembers.html":[0,1,0],
+"namespacemembers_enum.html":[0,1,3],
+"namespacemembers_eval.html":[0,1,4],
+"namespacemembers_func.html":[0,1,1],
+"namespacemembers_type.html":[0,1,2],
+"namespaces.html":[0,0],
+"namespacetk.html":[0,0,0],
+"namespacetk.html#a083495c9bf857a63f6c20a20aac0ca52":[0,0,0,19],
+"namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe":[0,0,0,17],
+"namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e":[0,0,0,12],
+"namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca":[0,0,0,12,2],
+"namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37":[0,0,0,12,1],
+"namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75":[0,0,0,12,0],
+"namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519":[0,0,0,12,3],
+"namespacetk.html#a46e15375fba47cbd1a93278f17e77848":[0,0,0,16],
+"namespacetk.html#a5549bec310750722a1964de1145b9fed":[0,0,0,20],
+"namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8":[0,0,0,15],
+"namespacetk.html#a675f1829b87e2a43239b6f80a526d0ed":[0,0,0,22],
+"namespacetk.html#a6e721332f5a7d85998345ed218de7394":[0,0,0,13],
+"namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9":[0,0,0,18],
+"namespacetk.html#a752b12f6862815c94a52347af52578b7":[0,0,0,23],
+"namespacetk.html#a8081956b0a19b87d5b7c81b772373397":[0,0,0,24],
+"namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc":[0,0,0,11],
+"namespacetk.html#aae83f84121085578a7568437a8dc2447":[0,0,0,21],
+"namespacetk.html#ab1f2fa3d79e99f13610bd330a0df928b":[0,0,0,9],
+"namespacetk.html#aba50cfc62cb8be71cf96df7f495a7a3d":[0,0,0,14],
+"namespacetk.html#add371a241ec6c1695ef4e67935317edd":[0,0,0,10],
+"namespacetk_1_1detail.html":[0,0,0,0],
+"namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d":[0,0,0,0,0],
+"namespacetk_1_1detail.html#a447e4ec89b3f2748451891219b7e3738":[0,0,0,0,5],
+"namespacetk_1_1detail.html#a5b8fa6406a867edf8c4410fcb03c6523":[0,0,0,0,3],
+"namespacetk_1_1detail.html#a70ba35e0daee086ad86770f1e39c9b35":[0,0,0,0,2],
+"namespacetk_1_1detail.html#a73a80d92a172d565201f99e8f31278e4":[0,0,0,0,1],
+"namespacetk_1_1detail.html#a80be9b2429346faf161eab01f595684b":[0,0,0,0,4],
+"namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa":[0,0,0,0,6],
+"pages.html":[],
+"port__m33_8c.html":[2,0,0,0,0,1,0,0,0],
+"port__m33_8c.html#a6addcb4c27c8943e5908a645233e4b1e":[2,0,0,0,0,1,0,0,0,1],
+"port__m33_8c.html#a7b53a215b14820fae8b8e7c387f5b3b3":[2,0,0,0,0,1,0,0,0,0],
+"port__m33_8c.html#ac9d435a65b90e71074dd44f97b1103f8":[2,0,0,0,0,1,0,0,0,2],
+"port__m33_8h.html":[2,0,0,0,0,1,0,0,1],
+"port__m33_8h.html#a57df28e1d96b701ef5b9713cae179462":[2,0,0,0,0,1,0,0,1,1],
+"port__m33_8h.html#aaf06c4f2c498c86ed2c595d9bfe4caab":[2,0,0,0,0,1,0,0,1,2],
+"port__m33_8h.html#ac9d435a65b90e71074dd44f97b1103f8":[2,0,0,0,0,1,0,0,1,0],
+"port__m33_8h_source.html":[2,0,0,0,0,1,0,0,1],
+"scheduler_8cpp.html":[2,0,0,0,0,1,1],
+"scheduler_8cpp.html#a10d391ed68d7bf5406e9dbcd1c69d1da":[2,0,0,0,0,1,1,3],
+"scheduler_8cpp.html#a4728919288dacba97228c27b1c996108":[2,0,0,0,0,1,1,1],
+"scheduler_8cpp.html#ad29ac857f58c5bf7c0220403c6624f32":[2,0,0,0,0,1,1,4],
+"scheduler_8cpp.html#ad7a9acf1577e1fc4ff193d79edf9e254":[2,0,0,0,0,1,1,5],
+"struct_fpu_ctx.html":[1,0,1],
+"struct_fpu_ctx.html#ad2c3227e92b86055b7c97fbd0ee5c445":[1,0,1,0],
+"structtk_1_1_message.html":[0,0,0,4],
+"structtk_1_1_message.html":[1,0,0,3],
+"structtk_1_1_message.html#a570c5c394d2786708ce4830e4087aa9e":[0,0,0,4,0],
+"structtk_1_1_message.html#a570c5c394d2786708ce4830e4087aa9e":[1,0,0,3,0],
+"structtk_1_1_message.html#a9a7de43cbf3da1821cf18ae924f94c52":[0,0,0,4,1],
+"structtk_1_1_message.html#a9a7de43cbf3da1821cf18ae924f94c52":[1,0,0,3,1],
+"structtk_1_1_task_handle.html":[0,0,0,8],
+"structtk_1_1_task_handle.html":[1,0,0,7],
+"structtk_1_1_task_handle.html#a425e4877384e92ad75fee388bd54a7c3":[0,0,0,8,1],
+"structtk_1_1_task_handle.html#a425e4877384e92ad75fee388bd54a7c3":[1,0,0,7,1],
+"structtk_1_1_task_handle.html#afe8adf95998f82fe6d03a80700ef7927":[0,0,0,8,0],
+"structtk_1_1_task_handle.html#afe8adf95998f82fe6d03a80700ef7927":[1,0,0,7,0],
+"sync_8hpp.html":[2,0,0,0,0,0,0,2],
+"sync_8hpp_source.html":[2,0,0,0,0,0,0,2]
+};

+ 196 - 0
docs/html/port__m33_8c.html

@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port/m33/port_m33.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('port__m33_8c.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">port_m33.c File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br />
+<code>#include &quot;hardware/clocks.h&quot;</code><br />
+<code>#include &quot;hardware/structs/clocks.h&quot;</code><br />
+<code>#include &quot;hardware/structs/m33.h&quot;</code><br />
+<code>#include &quot;hardware/structs/scb.h&quot;</code><br />
+<code>#include &quot;hardware/structs/systick.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="port__m33_8h_source.html">port_m33.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a7b53a215b14820fae8b8e7c387f5b3b3" id="r_a7b53a215b14820fae8b8e7c387f5b3b3"><td class="memItemLeft">#define&#160;</td><td class="memItemRight"><a class="el" href="#a7b53a215b14820fae8b8e7c387f5b3b3">FPCCR_ASPEN</a>&#160;&#160;&#160;(1u &lt;&lt; 31)</td></tr>
+<tr class="memitem:a6addcb4c27c8943e5908a645233e4b1e" id="r_a6addcb4c27c8943e5908a645233e4b1e"><td class="memItemLeft">#define&#160;</td><td class="memItemRight"><a class="el" href="#a6addcb4c27c8943e5908a645233e4b1e">FPCCR_LSPEN</a>&#160;&#160;&#160;(1u &lt;&lt; 30)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac9d435a65b90e71074dd44f97b1103f8" id="r_ac9d435a65b90e71074dd44f97b1103f8"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#ac9d435a65b90e71074dd44f97b1103f8">tk_port_init</a> (uint32_t ticks_per_sec)</td></tr>
+</table>
+<a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
+<a id="a7b53a215b14820fae8b8e7c387f5b3b3" name="a7b53a215b14820fae8b8e7c387f5b3b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b53a215b14820fae8b8e7c387f5b3b3">&#9670;&#160;</a></span>FPCCR_ASPEN</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FPCCR_ASPEN&#160;&#160;&#160;(1u &lt;&lt; 31)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6addcb4c27c8943e5908a645233e4b1e" name="a6addcb4c27c8943e5908a645233e4b1e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6addcb4c27c8943e5908a645233e4b1e">&#9670;&#160;</a></span>FPCCR_LSPEN</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FPCCR_LSPEN&#160;&#160;&#160;(1u &lt;&lt; 30)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
+<a id="ac9d435a65b90e71074dd44f97b1103f8" name="ac9d435a65b90e71074dd44f97b1103f8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac9d435a65b90e71074dd44f97b1103f8">&#9670;&#160;</a></span>tk_port_init()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk_port_init </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t</td>          <td class="paramname"><span class="paramname"><em>ticks_per_sec</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li><li class="navelem"><a href="dir_57f08cdb50348f663244f527066db34a.html">src</a></li><li class="navelem"><a href="dir_5c27857cec97849c25650021b743744e.html">port</a></li><li class="navelem"><a href="dir_6d4b68ea9176da934383ead6eaf0491a.html">m33</a></li><li class="navelem"><a href="port__m33_8c.html">port_m33.c</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 6 - 0
docs/html/port__m33_8c.js

@@ -0,0 +1,6 @@
+var port__m33_8c =
+[
+    [ "FPCCR_ASPEN", "port__m33_8c.html#a7b53a215b14820fae8b8e7c387f5b3b3", null ],
+    [ "FPCCR_LSPEN", "port__m33_8c.html#a6addcb4c27c8943e5908a645233e4b1e", null ],
+    [ "tk_port_init", "port__m33_8c.html#ac9d435a65b90e71074dd44f97b1103f8", null ]
+];

+ 209 - 0
docs/html/port__m33_8h.html

@@ -0,0 +1,209 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port/m33/port_m33.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('port__m33_8h.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">port_m33.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br />
+<code>#include &quot;hardware/structs/scb.h&quot;</code><br />
+</div>
+<p><a href="port__m33_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac9d435a65b90e71074dd44f97b1103f8" id="r_ac9d435a65b90e71074dd44f97b1103f8"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#ac9d435a65b90e71074dd44f97b1103f8">tk_port_init</a> (uint32_t ticks_per_sec)</td></tr>
+<tr class="memitem:a57df28e1d96b701ef5b9713cae179462" id="r_a57df28e1d96b701ef5b9713cae179462"><td class="memItemLeft">uintptr_t&#160;</td><td class="memItemRight"><a class="el" href="#a57df28e1d96b701ef5b9713cae179462">tk_port_make_frame</a> (uint8_t *base, uint32_t size_bytes, void *entry_fn, void *arg)</td></tr>
+<tr class="memitem:aaf06c4f2c498c86ed2c595d9bfe4caab" id="r_aaf06c4f2c498c86ed2c595d9bfe4caab"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#aaf06c4f2c498c86ed2c595d9bfe4caab">tk_port_start</a> (uintptr_t sp)</td></tr>
+</table>
+<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
+<a id="ac9d435a65b90e71074dd44f97b1103f8" name="ac9d435a65b90e71074dd44f97b1103f8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac9d435a65b90e71074dd44f97b1103f8">&#9670;&#160;</a></span>tk_port_init()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk_port_init </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t</td>          <td class="paramname"><span class="paramname"><em>ticks_per_sec</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a57df28e1d96b701ef5b9713cae179462" name="a57df28e1d96b701ef5b9713cae179462"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57df28e1d96b701ef5b9713cae179462">&#9670;&#160;</a></span>tk_port_make_frame()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uintptr_t tk_port_make_frame </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t *</td>          <td class="paramname"><span class="paramname"><em>base</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t</td>          <td class="paramname"><span class="paramname"><em>size_bytes</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *</td>          <td class="paramname"><span class="paramname"><em>entry_fn</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *</td>          <td class="paramname"><span class="paramname"><em>arg</em></span>&#160;)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaf06c4f2c498c86ed2c595d9bfe4caab" name="aaf06c4f2c498c86ed2c595d9bfe4caab"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaf06c4f2c498c86ed2c595d9bfe4caab">&#9670;&#160;</a></span>tk_port_start()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk_port_start </td>
+          <td>(</td>
+          <td class="paramtype">uintptr_t</td>          <td class="paramname"><span class="paramname"><em>sp</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li><li class="navelem"><a href="dir_57f08cdb50348f663244f527066db34a.html">src</a></li><li class="navelem"><a href="dir_5c27857cec97849c25650021b743744e.html">port</a></li><li class="navelem"><a href="dir_6d4b68ea9176da934383ead6eaf0491a.html">m33</a></li><li class="navelem"><a href="port__m33_8h.html">port_m33.h</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 6 - 0
docs/html/port__m33_8h.js

@@ -0,0 +1,6 @@
+var port__m33_8h =
+[
+    [ "tk_port_init", "port__m33_8h.html#ac9d435a65b90e71074dd44f97b1103f8", null ],
+    [ "tk_port_make_frame", "port__m33_8h.html#a57df28e1d96b701ef5b9713cae179462", null ],
+    [ "tk_port_start", "port__m33_8h.html#aaf06c4f2c498c86ed2c595d9bfe4caab", null ]
+];

+ 156 - 0
docs/html/port__m33_8h_source.html

@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port/m33/port_m33.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('port__m33_8h_source.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">port_m33.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="port__m33_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="preprocessor">#pragma once</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span> </div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span> </div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="preprocessor">#include &quot;hardware/structs/scb.h&quot;</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span> </div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment">// One-time port setup: FPU context policy + SysTick + PendSV priority. Called from tk::start().</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="keywordtype">void</span> <a class="code hl_function" href="port__m33_8c.html#ac9d435a65b90e71074dd44f97b1103f8">tk_port_init</a>(uint32_t ticks_per_sec);</div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment">// Build a task&#39;s initial stack frame. Returns the SP to start with.</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"><a class="line" href="port__m33_8h.html#a57df28e1d96b701ef5b9713cae179462">   15</a></span>uintptr_t <a class="code hl_function" href="port__m33_8h.html#a57df28e1d96b701ef5b9713cae179462">tk_port_make_frame</a>(uint8_t* base, uint32_t size_bytes, <span class="keywordtype">void</span>* entry_fn, <span class="keywordtype">void</span>* arg);</div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment">// Jump into the first task (r0 = SP from tk_port_make_frame). Never returns.</span></div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"><a class="line" href="port__m33_8h.html#aaf06c4f2c498c86ed2c595d9bfe4caab">   18</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="port__m33_8h.html#aaf06c4f2c498c86ed2c595d9bfe4caab">tk_port_start</a>(uintptr_t sp);</div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="comment">// Trigger a PendSV exception to initiate context switching.</span></div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> tk_port_trigger_pendsv(<span class="keywordtype">void</span>) {</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span>    scb_hw-&gt;icsr = 1u &lt;&lt; 28;  <span class="comment">// SCB_ICSR_PENDSVSET_Msk</span></div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span>    __asm__ <span class="keyword">volatile</span>(<span class="stringliteral">&quot;isb&quot;</span> ::: <span class="stringliteral">&quot;memory&quot;</span>);</div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span>}</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span>}</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aport__m33_8c_html_ac9d435a65b90e71074dd44f97b1103f8"><div class="ttname"><a href="port__m33_8c.html#ac9d435a65b90e71074dd44f97b1103f8">tk_port_init</a></div><div class="ttdeci">void tk_port_init(uint32_t ticks_per_sec)</div><div class="ttdef"><b>Definition</b> port_m33.c:14</div></div>
+<div class="ttc" id="aport__m33_8h_html_a57df28e1d96b701ef5b9713cae179462"><div class="ttname"><a href="port__m33_8h.html#a57df28e1d96b701ef5b9713cae179462">tk_port_make_frame</a></div><div class="ttdeci">uintptr_t tk_port_make_frame(uint8_t *base, uint32_t size_bytes, void *entry_fn, void *arg)</div></div>
+<div class="ttc" id="aport__m33_8h_html_aaf06c4f2c498c86ed2c595d9bfe4caab"><div class="ttname"><a href="port__m33_8h.html#aaf06c4f2c498c86ed2c595d9bfe4caab">tk_port_start</a></div><div class="ttdeci">void tk_port_start(uintptr_t sp)</div></div>
+</div><!-- fragment --></div><!-- contents -->
+</div><!-- doc-content -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li><li class="navelem"><a href="dir_57f08cdb50348f663244f527066db34a.html">src</a></li><li class="navelem"><a href="dir_5c27857cec97849c25650021b743744e.html">port</a></li><li class="navelem"><a href="dir_6d4b68ea9176da934383ead6eaf0491a.html">m33</a></li><li class="navelem"><a href="port__m33_8h.html">port_m33.h</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 226 - 0
docs/html/scheduler_8cpp.html

@@ -0,0 +1,226 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.18.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>tinykernel: C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/scheduler.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="codefolding.js"></script>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript" src="cookie.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">tinykernel
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.18.0 -->
+<script type="text/javascript">
+let searchBox = new SearchBox("searchBox", "search/",'.html');
+</script>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded', codefold.init);
+</script>
+<script type="application/json" id="doxygen-config">
+{
+  "relPath": "",
+  "generateTreeView": true,
+  "searchEngine": true,
+  "serverBasedSearch": false,
+  "disableIndex": false,
+  "dynamicMenus": true,
+  "fullSidebar": false
+}
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<div id="main-nav-mobile">
+<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
+<label class="main-menu-btn" for="main-menu-state">
+<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
+<span id="searchBoxPos1"></span>
+</div>
+</div><!-- main-nav-mobile -->
+<div id="main-nav">
+  <ul class="sm sm-dox" id="main-menu">
+    <li id="searchBoxPos2">
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
+          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
+          </span>
+        </div>
+    </li>
+  </ul>
+</div><!-- main-nav -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+  <div id="nav-tree">
+    <div id="nav-tree-contents">
+      <div id="nav-sync" class="sync"></div>
+    </div>
+  </div>
+  <div id="splitbar" class="ui-resizable-handle">
+  </div>
+</div>
+<script type="text/javascript">
+document.addEventListener('DOMContentLoaded',() => { initNavTree('scheduler_8cpp.html','',''); });
+</script>
+<div id="container">
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">scheduler.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="kernel_8hpp_source.html">tinykernel/kernel.hpp</a>&quot;</code><br />
+<code>#include &lt;cstring&gt;</code><br />
+<code>#include &quot;pico/platform.h&quot;</code><br />
+<code>#include &quot;pico/multicore.h&quot;</code><br />
+<code>#include &quot;hardware/sync.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="port__m33_8h_source.html">port/m33/port_m33.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:FpuCtx" id="r_FpuCtx"><td class="memItemLeft">struct &#160;</td><td class="memItemRight"><a class="el" href="struct_fpu_ctx.html">FpuCtx</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-namespaces" class="groupheader"><a id="namespaces" name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr class="memitem:tk" id="r_tk"><td class="memItemLeft">namespace &#160;</td><td class="memItemRight"><a class="el" href="namespacetk.html">tk</a></td></tr>
+<tr class="memitem:tk_3A_3Adetail" id="r_tk_3A_3Adetail"><td class="memItemLeft">namespace &#160;</td><td class="memItemRight"><a class="el" href="namespacetk_1_1detail.html">tk::detail</a></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a4728919288dacba97228c27b1c996108" id="r_a4728919288dacba97228c27b1c996108"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#a4728919288dacba97228c27b1c996108">isr_systick</a> (void)</td></tr>
+<tr class="memitem:a10d391ed68d7bf5406e9dbcd1c69d1da" id="r_a10d391ed68d7bf5406e9dbcd1c69d1da"><td class="memItemLeft">uintptr_t&#160;</td><td class="memItemRight"><a class="el" href="#a10d391ed68d7bf5406e9dbcd1c69d1da">tk_switch_context</a> (uintptr_t cur_sp)</td></tr>
+<tr class="memitem:a447e4ec89b3f2748451891219b7e3738" id="r_a447e4ec89b3f2748451891219b7e3738"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="namespacetk_1_1detail.html#a447e4ec89b3f2748451891219b7e3738">tk::detail::static_register</a> (const char *name, <a class="el" href="namespacetk.html#a8908cf1e54cdc4e14ac3003126722cfc">TaskFn</a> fn, uint32_t prio)</td></tr>
+<tr class="memitem:ad29ac857f58c5bf7c0220403c6624f32" id="r_ad29ac857f58c5bf7c0220403c6624f32"><td class="memItemLeft">void&#160;</td><td class="memItemRight"><a class="el" href="#ad29ac857f58c5bf7c0220403c6624f32">tk_task_return_trampoline</a> (void)</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 id="header-var-members" class="groupheader"><a id="var-members" name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ad7a9acf1577e1fc4ff193d79edf9e254" id="r_ad7a9acf1577e1fc4ff193d79edf9e254"><td class="memItemLeft"><a class="el" href="struct_fpu_ctx.html">FpuCtx</a>&#160;</td><td class="memItemRight"><a class="el" href="#ad7a9acf1577e1fc4ff193d79edf9e254">tk_fpu_scratch</a> [TK_NUM_CORES] = {}</td></tr>
+</table>
+<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
+<a id="a4728919288dacba97228c27b1c996108" name="a4728919288dacba97228c27b1c996108"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4728919288dacba97228c27b1c996108">&#9670;&#160;</a></span>isr_systick()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void isr_systick </td>
+          <td>(</td>
+          <td class="paramtype">void</td>          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a10d391ed68d7bf5406e9dbcd1c69d1da" name="a10d391ed68d7bf5406e9dbcd1c69d1da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a10d391ed68d7bf5406e9dbcd1c69d1da">&#9670;&#160;</a></span>tk_switch_context()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uintptr_t tk_switch_context </td>
+          <td>(</td>
+          <td class="paramtype">uintptr_t</td>          <td class="paramname"><span class="paramname"><em>cur_sp</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad29ac857f58c5bf7c0220403c6624f32" name="ad29ac857f58c5bf7c0220403c6624f32"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad29ac857f58c5bf7c0220403c6624f32">&#9670;&#160;</a></span>tk_task_return_trampoline()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tk_task_return_trampoline </td>
+          <td>(</td>
+          <td class="paramtype">void</td>          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a name="doc-var-members" id="doc-var-members"></a><h2 id="header-doc-var-members" class="groupheader">Variable Documentation</h2>
+<a id="ad7a9acf1577e1fc4ff193d79edf9e254" name="ad7a9acf1577e1fc4ff193d79edf9e254"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad7a9acf1577e1fc4ff193d79edf9e254">&#9670;&#160;</a></span>tk_fpu_scratch</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="struct_fpu_ctx.html">FpuCtx</a> tk_fpu_scratch[TK_NUM_CORES] = {}</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<div id="page-nav" class="page-nav-panel">
+<div id="page-nav-resize-handle"></div>
+<div id="page-nav-tree">
+<div id="page-nav-contents">
+</div><!-- page-nav-contents -->
+</div><!-- page-nav-tree -->
+</div><!-- page-nav -->
+</div><!-- container -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="navelem"><a href="dir_9b10c2ff4e034627dc7271865b055c64.html">Pico_Projects</a></li><li class="navelem"><a href="dir_01f710e8c634e538c6d9f00c5eaf4f2e.html">tinykernel</a></li><li class="navelem"><a href="dir_065670814960ad9cf60e14e38242ec92.html">tinykernel</a></li><li class="navelem"><a href="dir_57f08cdb50348f663244f527066db34a.html">src</a></li><li class="navelem"><a href="scheduler_8cpp.html">scheduler.cpp</a></li>
+    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
+  </ul>
+</div>
+</body>
+</html>

+ 9 - 0
docs/html/scheduler_8cpp.js

@@ -0,0 +1,9 @@
+var scheduler_8cpp =
+[
+    [ "FpuCtx", "struct_fpu_ctx.html", "struct_fpu_ctx" ],
+    [ "isr_systick", "scheduler_8cpp.html#a4728919288dacba97228c27b1c996108", null ],
+    [ "tk::detail::static_register", "namespacetk_1_1detail.html#a447e4ec89b3f2748451891219b7e3738", null ],
+    [ "tk_switch_context", "scheduler_8cpp.html#a10d391ed68d7bf5406e9dbcd1c69d1da", null ],
+    [ "tk_task_return_trampoline", "scheduler_8cpp.html#ad29ac857f58c5bf7c0220403c6624f32", null ],
+    [ "tk_fpu_scratch", "scheduler_8cpp.html#ad7a9acf1577e1fc4ff193d79edf9e254", null ]
+];

+ 7 - 0
docs/html/search/all_0.js

@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['acquire_0',['acquire',['../classtk_1_1_semaphore.html#a863ccee07bc701a78342c14503955d73',1,'tk::Semaphore']]],
+  ['actor_1',['Actor',['../classtk_1_1_actor.html',1,'tk::Actor&lt; MsgType, QueueSize &gt;'],['../classtk_1_1_actor.html#a776aef8cdcfb4416ef976697eb518ed5',1,'tk::Actor::Actor()']]],
+  ['actor_2ehpp_2',['actor.hpp',['../actor_8hpp.html',1,'']]],
+  ['arg_3',['arg',['../structtk_1_1_message.html#a570c5c394d2786708ce4830e4087aa9e',1,'tk::Message']]]
+];

+ 5 - 0
docs/html/search/all_1.js

@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['binarysemaphore_0',['BinarySemaphore',['../namespacetk.html#ab1f2fa3d79e99f13610bd330a0df928b',1,'tk']]],
+  ['block_5fcurrent_5ftask_5flocked_1',['block_current_task_locked',['../namespacetk_1_1detail.html#a400363f36b5fb5dfc8aec11334471d0d',1,'tk::detail']]]
+];

+ 5 - 0
docs/html/search/all_10.js

@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['unlock_0',['unlock',['../classtk_1_1_mutex.html#ae8d5dfd5655b5aa54d63db6e0cf2f707',1,'tk::Mutex::unlock()'],['../namespacetk.html#a752b12f6862815c94a52347af52578b7',1,'tk::unlock()']]],
+  ['unsubscribe_1',['unsubscribe',['../classtk_1_1_event_hub.html#a09c779ce8c594ea44c831adfd7e287f8',1,'tk::EventHub']]]
+];

+ 4 - 0
docs/html/search/all_11.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['wake_5ftask_5flocked_0',['wake_task_locked',['../namespacetk_1_1detail.html#ab19385598f18560cb574cc86174ececa',1,'tk::detail']]]
+];

+ 4 - 0
docs/html/search/all_12.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['yield_0',['yield',['../namespacetk.html#a8081956b0a19b87d5b7c81b772373397',1,'tk']]]
+];

+ 6 - 0
docs/html/search/all_13.js

@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['_7eactor_0',['~Actor',['../classtk_1_1_actor.html#abfc63a514a3ae7cdbdf9ceee81c3b0fc',1,'tk::Actor']]],
+  ['_7elockguard_1',['~LockGuard',['../classtk_1_1_lock_guard.html#a52eeb50abee00bd0ed16cfa6618ce40f',1,'tk::LockGuard']]],
+  ['_7epreemptguard_2',['~PreemptGuard',['../classtk_1_1_preempt_guard.html#a329ea4d806861d9455168aeb01f41f86',1,'tk::PreemptGuard']]]
+];

+ 6 - 0
docs/html/search/all_2.js

@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['count_0',['count',['../classtk_1_1_semaphore.html#ae53b9c57cc25fafb242a21776f112701',1,'tk::Semaphore']]],
+  ['create_1',['create',['../namespacetk.html#a6e721332f5a7d85998345ed218de7394',1,'tk']]],
+  ['current_5ftask_5fslot_2',['current_task_slot',['../namespacetk_1_1detail.html#a73a80d92a172d565201f99e8f31278e4',1,'tk::detail']]]
+];

+ 5 - 0
docs/html/search/all_3.js

@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['eventhub_0',['EventHub',['../classtk_1_1_event_hub.html',1,'tk']]],
+  ['exit_1',['exit',['../namespacetk.html#aba50cfc62cb8be71cf96df7f495a7a3d',1,'tk']]]
+];

+ 7 - 0
docs/html/search/all_4.js

@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['find_5fhighest_5fprio_5fwaiter_0',['find_highest_prio_waiter',['../namespacetk_1_1detail.html#a70ba35e0daee086ad86770f1e39c9b35',1,'tk::detail']]],
+  ['fpccr_5faspen_1',['FPCCR_ASPEN',['../port__m33_8c.html#a7b53a215b14820fae8b8e7c387f5b3b3',1,'port_m33.c']]],
+  ['fpccr_5flspen_2',['FPCCR_LSPEN',['../port__m33_8c.html#a6addcb4c27c8943e5908a645233e4b1e',1,'port_m33.c']]],
+  ['fpuctx_3',['FpuCtx',['../struct_fpu_ctx.html',1,'']]]
+];

+ 4 - 0
docs/html/search/all_5.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['handle_0',['handle',['../classtk_1_1_actor.html#a60a2752360fa7185ec7776f2a6ef766a',1,'tk::Actor']]]
+];

+ 7 - 0
docs/html/search/all_6.js

@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['id_0',['id',['../structtk_1_1_message.html#a9a7de43cbf3da1821cf18ae924f94c52',1,'tk::Message']]],
+  ['is_5flocked_1',['is_locked',['../classtk_1_1_mutex.html#acf574e35540879481f1f6e5452a504ab',1,'tk::Mutex']]],
+  ['is_5fvalid_2',['is_valid',['../structtk_1_1_task_handle.html#afe8adf95998f82fe6d03a80700ef7927',1,'tk::TaskHandle']]],
+  ['isr_5fsystick_3',['isr_systick',['../scheduler_8cpp.html#a4728919288dacba97228c27b1c996108',1,'scheduler.cpp']]]
+];

+ 4 - 0
docs/html/search/all_7.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['kernel_2ehpp_0',['kernel.hpp',['../kernel_8hpp.html',1,'']]]
+];

+ 5 - 0
docs/html/search/all_8.js

@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['lock_0',['lock',['../classtk_1_1_mutex.html#a7f5645bba55df2db263f92a954802c27',1,'tk::Mutex::lock()'],['../namespacetk.html#a6540aa25eb8562f6d6c8b37977d6cfe8',1,'tk::lock()']]],
+  ['lockguard_1',['LockGuard',['../classtk_1_1_lock_guard.html',1,'tk::LockGuard&lt; Lockable &gt;'],['../classtk_1_1_lock_guard.html#a3a922c7edf84ce25ef67151c322bb0eb',1,'tk::LockGuard::LockGuard(Lockable &amp;m)'],['../classtk_1_1_lock_guard.html#af9bc86bc2036c4b8e54633ddee811604',1,'tk::LockGuard::LockGuard(const LockGuard &amp;)=delete']]]
+];

+ 5 - 0
docs/html/search/all_9.js

@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['message_0',['Message',['../structtk_1_1_message.html',1,'tk']]],
+  ['mutex_1',['Mutex',['../classtk_1_1_mutex.html',1,'tk::Mutex'],['../classtk_1_1_mutex.html#a8b17431db60f4ab48a3859b2ca722eb1',1,'tk::Mutex::Mutex()']]]
+];

+ 4 - 0
docs/html/search/all_a.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['now_5fms_0',['now_ms',['../namespacetk.html#a46e15375fba47cbd1a93278f17e77848',1,'tk']]]
+];

+ 6 - 0
docs/html/search/all_b.js

@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['on_5fmessage_0',['on_message',['../classtk_1_1_actor.html#a1147554d6ddb64d822285ca5a03506a4',1,'tk::Actor']]],
+  ['on_5fstart_1',['on_start',['../classtk_1_1_actor.html#afb31ec0d50d1ac97e6a4ce148a96f78d',1,'tk::Actor']]],
+  ['operator_3d_2',['operator=',['../classtk_1_1_preempt_guard.html#ad651c301bd81f95866e1cd380c2a2417',1,'tk::PreemptGuard::operator=()'],['../classtk_1_1_lock_guard.html#a3f121f8aa1307f0f6e6e608cf138340c',1,'tk::LockGuard::operator=()']]]
+];

+ 15 - 0
docs/html/search/all_c.js

@@ -0,0 +1,15 @@
+var searchData=
+[
+  ['port_5fm33_2ec_0',['port_m33.c',['../port__m33_8c.html',1,'']]],
+  ['port_5fm33_2eh_1',['port_m33.h',['../port__m33_8h.html',1,'']]],
+  ['post_2',['post',['../classtk_1_1_actor.html#a224e6be4dca0d1500f2121e97bd0f92d',1,'tk::Actor::post(const MsgType &amp;msg)'],['../classtk_1_1_actor.html#a863f28d824aaa78c75789166b1c2a010',1,'tk::Actor::post(MsgType &amp;&amp;msg)'],['../classtk_1_1_actor.html#a5c4f4f2f1b8011a37773617e34218c2d',1,'tk::Actor::post(uint32_t id, uintptr_t arg=0)']]],
+  ['preempt_5fdisable_3',['preempt_disable',['../namespacetk.html#a3254a7e2a9f5ed3abe44e8cf62a8dcfe',1,'tk']]],
+  ['preempt_5fenable_4',['preempt_enable',['../namespacetk.html#a70e6ee5f456e67a24ce13ff0fd04e4d9',1,'tk']]],
+  ['preemptguard_5',['PreemptGuard',['../classtk_1_1_preempt_guard.html',1,'tk::PreemptGuard'],['../classtk_1_1_preempt_guard.html#a39e396ce51420c942e7d6549ec63f88e',1,'tk::PreemptGuard::PreemptGuard()'],['../classtk_1_1_preempt_guard.html#a360ac2b073064abc0f21db3127e7f389',1,'tk::PreemptGuard::PreemptGuard(const PreemptGuard &amp;)=delete']]],
+  ['prio_6',['Prio',['../namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50e',1,'tk']]],
+  ['prio_5fhigh_7',['PRIO_HIGH',['../namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea614240a3a3fc1094c6daa0fdca92ba37',1,'tk']]],
+  ['prio_5flow_8',['PRIO_LOW',['../namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eacf084edcfe985b77c205a37c3bd60519',1,'tk']]],
+  ['prio_5fnormal_9',['PRIO_NORMAL',['../namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50ea0e6779023b97999c2cef66ba1d4d1fca',1,'tk']]],
+  ['prio_5frealtime_10',['PRIO_REALTIME',['../namespacetk.html#a3d47fbd63b95ed3b46bed70c2fa1e50eabbefd771d1fb2ac0708c1bd5371e5a75',1,'tk']]],
+  ['publish_11',['publish',['../classtk_1_1_event_hub.html#a3a59a641ad3fe121c0da7e1c81dc300b',1,'tk::EventHub::publish()'],['../namespacetk.html#a083495c9bf857a63f6c20a20aac0ca52',1,'tk::publish(const MsgType &amp;msg)'],['../namespacetk.html#a5549bec310750722a1964de1145b9fed',1,'tk::publish(uint32_t id, uintptr_t arg=0)']]]
+];

+ 4 - 0
docs/html/search/all_d.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['release_0',['release',['../classtk_1_1_semaphore.html#a7bb8eb8b0bd69b2f6b0a4d89d0f5b07b',1,'tk::Semaphore']]]
+];

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.