tk tk::Actor tk::EventHub tk::LockGuard tk::Message tk::Mutex tk::PreemptGuard tk::Semaphore tk::TaskHandle tk::detail uint32_t Prio tk::Prio PRIO_REALTIME = 1 リアルタイム最優先 PRIO_HIGH = 5 高優先度 PRIO_NORMAL = 9 通常優先度 (デフォルト) PRIO_LOW = 13 低優先度 タスクの優先度レベル 数値が小さいほど高優先度です。0..15 の範囲で指定します (15 はアイドルタスク専用)。 void(*)(void *arg) using tk::TaskFn = void (*)(void* arg) TaskFn tk::TaskFn タスク関数のシグネチャ (void func(void* arg)) uint32_t using tk::task_mask_t = uint32_t task_mask_t tk::task_mask_t Semaphore using tk::BinarySemaphore = Semaphore BinarySemaphore tk::BinarySemaphore バイナリセマフォ (初期値1, 最大1) の型エイリアス typename MsgType size_t size_t tk::publish (const MsgType &msg) publish tk::publish const MsgType & msg メッセージの型を指定して、購読しているすべての Actor へ同報配信します 送信側は Actor のインスタンスや名前を知る必要がありません (完全疎結合)。 メッセージの実体は各 Actor のキューへ値コピーされるため、スタック上のローカル変数でも安全に渡せます。 MsgType 配信するメッセージ型 msg 送信するメッセージ size_t 配信に成功した Actor の数 MyEventev{1,"ButtonPressed"}; tk::publish(ev);//MyEventを受け付けるすべてのActorに届く size_t size_t tk::publish (uint32_t id, uintptr_t arg=0) publish tk::publish uint32_t id uintptr_t arg 0 tk::Message 型の同報配信ショートカット id メッセージID arg 引数 (省略時: 0) size_t 配信に成功した Actor の数 TaskHandle tk::TaskHandle tk::create (TaskFn fn, void *arg=nullptr, uint32_t prio=PRIO_NORMAL) create tk::create TaskFn fn void * arg nullptr uint32_t prio PRIO_NORMAL タスクを生成・登録します tk::start() を呼び出す前に登録する必要があります。 fn タスク関数ポインタ (void (*)(void* arg)) arg タスク関数に渡すユーザー引数ポインタ (省略時: nullptr) prio タスクの優先度 (省略時: tk::PRIO_NORMAL) TaskHandle 生成されたタスクのハンドル。登録失敗時は is_valid() が false void void tk::start () start tk::start tinykernel スケジューラを起動します Core 0 のスケジューラを開始し、Core 1 を自動ブートしてデュアルコア並行実行を開始します。 この関数から制御が戻ることはありません (Never returns)。 void void tk::yield () yield tk::yield 現在実行中のタスクを一時中断し、同優先度の他のタスクへ CPU を譲渡します タスクコンテキスト内から呼び出す必要があります。 void void tk::sleep_ms (uint32_t ms) sleep_ms tk::sleep_ms uint32_t ms 現在のタスクを指定時間スリープさせます スリープ中はタスクが休止状態になり、CPU は他のタスクへ自動的に割り当てられます (CPU消費ゼロ)。 ms スリープする時間 (ミリ秒) タスクコンテキスト内から呼び出す必要があります。 void void tk::exit (int code=0) exit tk::exit int code 0 現在のタスクを終了・破棄します code 終了コード (予約用、省略時: 0) タスク関数の末尾に到達した場合は自動的に呼ばれます。 uint64_t uint64_t tk::now_ms () now_ms tk::now_ms システム起動時からの経過時間をミリ秒単位で取得します uint64_t 経過ミリ秒数 (分解能: 1 / TK_TICKS_PER_SEC 秒) bool bool tk::lock () lock tk::lock ハードウェアスピンロックと全割り込み禁止によるクリティカルセクションに入ります true 呼び出し前の割り込みが有効だった場合 false 呼び出し前の割り込みが無効だった場合 長時間のロックは避けてください。数マイクロ秒以内のレジスタ操作等に使用します。 void void tk::unlock (bool was_enabled) unlock tk::unlock bool was_enabled tk::lock() で入ったクリティカルセクションを抜けます was_enabled tk::lock() の戻り値 void void tk::preempt_disable () preempt_disable tk::preempt_disable 自コアのタスクスイッチ (プリエンプション) を一時的に禁止します 割り込み (SysTick やタイマー、NVIC) は停止しないため、通信クロックや時刻更新を 阻害することなく、自タスクの処理をアトミックに実行できます。ネスト (入れ子) 呼び出しに対応しています。 tk::PreemptGuard, tk::preempt_enable() void void tk::preempt_enable () preempt_enable tk::preempt_enable 自コアのタスクスイッチ (プリエンプション) を再開します ネストカウンタが 0 に戻った時点で、保留されていたタスクスイッチが即座に実行されます。 tk::PreemptGuard, tk::preempt_disable()