GadgetSeed  0.9.6
タスク制御

GadgetSeedのカーネルはマルチタスクカーネルです。
GedgetSeedはタスク間同期の機能として以下の機能があります。

タスク状態

GadgetSeedの各タスクは以下のように状態遷移します。

状態名 状態
READY 実行可能状態
RUN 実行状態
TIMER_WAIT タイマ待ち状態
EVENT_WAIT イベント待ち状態
MUTEX_WAIT MUTEXロック解除待ち状態
REQUEST_WAIT 起床待ち状態
DORMANT_WAIT 休止状態

タスクコンテキスト

タスクコンテキストは以下の構造体で定義されます。

st_tcb タスクコンテキスト

ユーザが作成する各タスクは、スタティックに st_tcb 構造のデータを定義する必要があります。

タスクには名前をつけることができます。

タスクには優先順位があります。タスク優先順位デフォルトでは0(最高)から3(最低)の4段階を設定することができます。 タスク優先順位の数はコンフィグレーションマクロ GSC_KERNEL_MAX_TASK_PRIORITY を定義することにより変更することができます。

各タスクのスタックメモリは、各タスク毎にスタティックに定義する必要があります。

タスクの実行例として、 init_gs() で実行している task_exec() の実行例を参照して下さい。

タスク用APIは タスク制御API を参照して下さい。


イベント

GadgetSeed は一般的な RTOS のイベントフラグのような同期機構としてイベントがあります。

イベントAPI は、タスク間および、タスクと非タスクコンテキスト(割り込みハンドラ等)間の同期を行うために使用できます。

非タスクコンテキスト用(システム初期化時/割り込みハンドラ用) はイベントの発生通知のみ行うことができます。

例えば、タスクで event_wait() を実行し、IO割り込みハンドラで event_wakeup_ISR() を実行し、タスクでIOのデータの受信を待ちます。 この場合、event_wait() を実行したタスクは、IO割り込みハンドラで event_wakeup_ISR() が実行されるまで「イベント待ち状態」になります。

イベントを使用するには、以下に示すイベント構造体を定義し、 eventqueue_register()eventqueue_register_ISR() 関数でイベント 構造体データをシステムに登録する必要があります。

st_event イベント

イベント用APIは イベントAPI を参照して下さい。


MUTEX

GadgetSeed はリソースの排他機構 MUTEX があります。

MUTEX API はタスクからのみ実行できます。

MUTEX をロックしたタクスのみが、 MUTEX をアンロックすることができます。

MUTEX を使用するには、以下に示す MUTEX 構造体を定義し、 mutex_register()mutex_register_ISR() 関数で MUTEX 構造体データ をシステムに登録する必要があります。

st_mutex MUTEX

MUTEX 用APIは MUTEX API を参照して下さい。


タスク制御API

include ファイル : syscall.h

API名 機能
task_add() タスクを追加する
task_exec() タスクを追加し起動する
task_exit() タスクを終了する
task_pause() タスクを停止する
task_sleep() タスクを指定時間タイマ待ち状態にする
task_kill() 指定したタスクを終了する
task_wakeup() 指定したタスクを実行状態にする
task_wakeup_id_ISR() idタスクを実行する

イベントAPI

タスクコンテキスト用

include ファイル : syscall.h

API名 機能
eventqueue_register() イベントキューを登録する
event_wait() タスクをイベント待ち状態にする
event_check() イベントキューにイベントが登録されているか調べる
event_clear() イベントキューに登録されているイベントを削除する
event_wakeup() イベントキューにイベントを登録する
eventqueue_unregister() イベントキューを登録解除する

非タスクコンテキスト用(システム初期化時/割り込みハンドラ用)

include ファイル : task/event.h

API名 機能
eventqueue_register_ISR() イベントキューを登録する
event_push_ISR() イベントFIFOにイベントを登録する
event_set_ISR() イベント待ちタスクを起動する
event_wakeup_ISR() イベントキューにイベントを登録し、イベント待ちタスクを起動する
eventqueue_unregister_ISR() イベントキューを登録解除する

MUTEX API

タスクコンテキスト用

include ファイル : syscall.h

API名 機能
mutex_register() MUTEXを登録する
mutex_lock() MUTEXをロックする
mutex_unlock() MUTEXをアンロックする
mutex_unregister() MUTEXを登録解除する

非タスクコンテキスト用(システム初期化時/割り込みハンドラ用)

include ファイル : task/mutex.h

API名 機能
mutex_register_ISR() MUTEXを登録する
mutex_unregister_ISR() MUTEXを登録解除する