|
tinykernel
|
名前空間 | |
| namespace | detail |
クラス | |
| class | Actor |
| メッセージ駆動型タスク (アクター) の基底クラス [詳解] | |
| class | EventHub |
| メッセージ型ごとの超軽量 Pub/Sub ディスパッチャ [詳解] | |
| class | LockGuard |
| ミューテックスのロックをスコープ単位で安全に管理する RAII クラス (std::lock_guard 相当) [詳解] | |
| struct | Message |
| デフォルトの軽量メッセージ構造体 [詳解] | |
| class | Mutex |
| 所有権・優先度順ウェイクアップ・RAII 対応のミューテックス (排他ロック) [詳解] | |
| class | PreemptGuard |
| プリエンプション禁止をスコープ単位で安全に管理する RAII クラス [詳解] | |
| class | Semaphore |
| 計数セマフォ (Counting Semaphore) / バイナリセマフォ [詳解] | |
| struct | TaskHandle |
| タスクの識別ハンドル [詳解] | |
型定義 | |
| using | TaskFn = void (*)(void* arg) |
| using | task_mask_t = uint32_t |
| using | BinarySemaphore = Semaphore |
| バイナリセマフォ (初期値1, 最大1) の型エイリアス | |
列挙型 | |
| enum | Prio : uint32_t { PRIO_REALTIME = 1 , PRIO_HIGH = 5 , PRIO_NORMAL = 9 , PRIO_LOW = 13 } |
| タスクの優先度レベル [詳解] | |
関数 | |
| template<typename MsgType> | |
| size_t | publish (const MsgType &msg) |
| メッセージの型を指定して、購読しているすべての Actor へ同報配信します | |
| size_t | publish (uint32_t id, uintptr_t arg=0) |
| tk::Message 型の同報配信ショートカット | |
| TaskHandle | create (TaskFn fn, void *arg=nullptr, uint32_t prio=PRIO_NORMAL) |
| タスクを生成・登録します | |
| void | start () |
| tinykernel スケジューラを起動します | |
| void | yield () |
| 現在実行中のタスクを一時中断し、同優先度の他のタスクへ CPU を譲渡します | |
| void | sleep_ms (uint32_t ms) |
| 現在のタスクを指定時間スリープさせます | |
| void | exit (int code=0) |
| 現在のタスクを終了・破棄します | |
| uint64_t | now_ms () |
| システム起動時からの経過時間をミリ秒単位で取得します | |
| bool | lock () |
| ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります | |
| void | unlock (bool was_enabled) |
| tk::lock() で入ったクリティカルセクションを抜けます | |
| void | preempt_disable () |
| 自コアのタスクスイッチ (プリエンプション) を一時的に禁止します | |
| void | preempt_enable () |
| 自コアのタスクスイッチ (プリエンプション) を再開します | |
| using tk::BinarySemaphore = Semaphore |
バイナリセマフォ (初期値1, 最大1) の型エイリアス
| using tk::task_mask_t = uint32_t |
| using tk::TaskFn = void (*)(void* arg) |
タスク関数のシグネチャ (void func(void* arg))
| enum tk::Prio : uint32_t |
| tk::TaskHandle tk::create | ( | TaskFn | fn, |
| void * | arg = nullptr, | ||
| uint32_t | prio = PRIO_NORMAL ) |
タスクを生成・登録します
tk::start() を呼び出す前に登録する必要があります。
| fn | タスク関数ポインタ (void (*)(void* arg)) |
| arg | タスク関数に渡すユーザー引数ポインタ (省略時: nullptr) |
| prio | タスクの優先度 (省略時: tk::PRIO_NORMAL) |
| void tk::exit | ( | int | code = 0 | ) |
現在のタスクを終了・破棄します
| code | 終了コード (予約用、省略時: 0) |
| bool tk::lock | ( | ) |
ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります
| uint64_t tk::now_ms | ( | ) |
システム起動時からの経過時間をミリ秒単位で取得します
| void tk::preempt_disable | ( | ) |
自コアのタスクスイッチ (プリエンプション) を一時的に禁止します
割り込み (SysTick やタイマー、NVIC) は停止しないため、通信クロックや時刻更新を 阻害することなく、自タスクの処理をアトミックに実行できます。ネスト (入れ子) 呼び出しに対応しています。
| void tk::preempt_enable | ( | ) |
自コアのタスクスイッチ (プリエンプション) を再開します
ネストカウンタが 0 に戻った時点で、保留されていたタスクスイッチが即座に実行されます。
|
inline |
メッセージの型を指定して、購読しているすべての Actor へ同報配信します
送信側は Actor のインスタンスや名前を知る必要がありません (完全疎結合)。 メッセージの実体は各 Actor のキューへ値コピーされるため、スタック上のローカル変数でも安全に渡せます。
| MsgType | 配信するメッセージ型 |
| msg | 送信するメッセージ |
|
inline |
| void tk::sleep_ms | ( | uint32_t | ms | ) |
現在のタスクを指定時間スリープさせます
スリープ中はタスクが休止状態になり、CPU は他のタスクへ自動的に割り当てられます (CPU消費ゼロ)。
| ms | スリープする時間 (ミリ秒) |
| void tk::start | ( | ) |
tinykernel スケジューラを起動します
Core 0 のスケジューラを開始し、Core 1 を自動ブートしてデュアルコア並行実行を開始します。 この関数から制御が戻ることはありません (Never returns)。
| void tk::unlock | ( | bool | was_enabled | ) |
tk::lock() で入ったクリティカルセクションを抜けます
| was_enabled | tk::lock() の戻り値 |
| void tk::yield | ( | ) |
現在実行中のタスクを一時中断し、同優先度の他のタスクへ CPU を譲渡します