title: tk
| Name |
|---|
| tk::detail |
| Name | |
|---|---|
| class | tk::Actor メッセージ駆動型タスク (アクター) の基底クラス |
| class | tk::EventHub メッセージ型ごとの超軽量 Pub/Sub ディスパッチャ |
| class | tk::LockGuard ミューテックスのロックをスコープ単位で安全に管理する RAII クラス (std::lock_guard 相当) |
| struct | tk::Message デフォルトの軽量メッセージ構造体 |
| class | tk::Mutex 所有権・優先度順ウェイクアップ・RAII 対応のミューテックス (排他ロック) |
| class | tk::PreemptGuard プリエンプション禁止をスコープ単位で安全に管理する RAII クラス |
| class | tk::Semaphore 計数セマフォ (Counting [Semaphore]()) / バイナリセマフォ |
| struct | tk::TaskHandle タスクの識別ハンドル |
| Name | |
|---|---|
| enum uint32_t | Prio { PRIO_REALTIME = 1, PRIO_HIGH = 5, PRIO_NORMAL = 9, PRIO_LOW = 13} タスクの優先度レベル |
| using void(*)(void *arg) | TaskFn |
| using uint32_t | task_mask_t |
| using Semaphore | BinarySemaphore バイナリセマフォ (初期値1, 最大1) の型エイリアス |
| Name | ||
|---|---|---|
| template 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() 自コアのタスクスイッチ (プリエンプション) を再開します |
| Enumerator | Value | Description |
|---|---|---|
| PRIO_REALTIME | 1 | リアルタイム最優先 |
| PRIO_HIGH | 5 | 高優先度 |
| PRIO_NORMAL | 9 | 通常優先度 (デフォルト) |
| PRIO_LOW | 13 | 低優先度 |
タスクの優先度レベル
数値が小さいほど高優先度です。0..15 の範囲で指定します (15 はアイドルタスク専用)。
using tk::TaskFn = void (*)(void* arg);
タスク関数のシグネチャ (void func(void* arg))
using tk::task_mask_t = uint32_t;
using tk::BinarySemaphore = Semaphore;
バイナリセマフォ (初期値1, 最大1) の型エイリアス
template <typename MsgType >
inline size_t publish(
const MsgType & msg
)
メッセージの型を指定して、購読しているすべての [Actor]() へ同報配信します
Parameters:
Template Parameters:
Return: size_t 配信に成功した Actor の数
送信側は Actor のインスタンスや名前を知る必要がありません (完全疎結合)。 メッセージの実体は各 Actor のキューへ値コピーされるため、スタック上のローカル変数でも安全に渡せます。
MyEvent ev{1, "Button Pressed"};
tk::publish(ev); // MyEvent を受け付けるすべての Actor に届く
inline size_t publish(
uint32_t id,
uintptr_t arg =0
)
[tk::Message]() 型の同報配信ショートカット
Parameters:
Return: size_t 配信に成功した Actor の数
TaskHandle create(
TaskFn fn,
void * arg =nullptr,
uint32_t prio =PRIO_NORMAL
)
タスクを生成・登録します
Parameters:
Return: TaskHandle 生成されたタスクのハンドル。登録失敗時は is_valid() が false
tk::start() を呼び出す前に登録する必要があります。
void start()
tinykernel スケジューラを起動します
Core 0 のスケジューラを開始し、Core 1 を自動ブートしてデュアルコア並行実行を開始します。 この関数から制御が戻ることはありません (Never returns)。
void yield()
現在実行中のタスクを一時中断し、同優先度の他のタスクへ CPU を譲渡します
Note: タスクコンテキスト内から呼び出す必要があります。
void sleep_ms(
uint32_t ms
)
現在のタスクを指定時間スリープさせます
Parameters:
Note: タスクコンテキスト内から呼び出す必要があります。
スリープ中はタスクが休止状態になり、CPU は他のタスクへ自動的に割り当てられます (CPU消費ゼロ)。
void exit(
int code =0
)
現在のタスクを終了・破棄します
Parameters:
Note: タスク関数の末尾に到達した場合は自動的に呼ばれます。
uint64_t now_ms()
システム起動時からの経過時間をミリ秒単位で取得します
Return: uint64_t 経過ミリ秒数 (分解能: 1 / TK_TICKS_PER_SEC 秒)
bool lock()
ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります
Return:
Warning: 長時間のロックは避けてください。数マイクロ秒以内のレジスタ操作等に使用します。
void unlock(
bool was_enabled
)
tk::lock() で入ったクリティカルセクションを抜けます
Parameters:
void preempt_disable()
自コアのタスクスイッチ (プリエンプション) を一時的に禁止します
See: tk::PreemptGuard, tk::preempt_enable()
割り込み (SysTick やタイマー、NVIC) は停止しないため、通信クロックや時刻更新を 阻害することなく、自タスクの処理をアトミックに実行できます。ネスト (入れ子) 呼び出しに対応しています。
void preempt_enable()
自コアのタスクスイッチ (プリエンプション) を再開します
See: tk::PreemptGuard, tk::preempt_disable()
ネストカウンタが 0 に戻った時点で、保留されていたタスクスイッチが即座に実行されます。
Updated on 2026-10-02 at 14:01:32 +0900