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 を参照して下さい。
GadgetSeed はリソースの排他機構 MUTEX があります。
MUTEX API はタスクからのみ実行できます。
MUTEX をロックしたタクスのみが、 MUTEX をアンロックすることができます。
MUTEX を使用するには、以下に示す MUTEX 構造体を定義し、 mutex_register() 、 mutex_register_ISR() 関数で MUTEX 構造体データ をシステムに登録する必要があります。
st_mutex MUTEX
MUTEX 用APIは MUTEX API を参照して下さい。
include ファイル : syscall.h
API名 | 機能 |
---|---|
task_add() | タスクを追加する |
task_exec() | タスクを追加し起動する |
task_exit() | タスクを終了する |
task_pause() | タスクを停止する |
task_sleep() | タスクを指定時間タイマ待ち状態にする |
task_kill() | 指定したタスクを終了する |
task_wakeup() | 指定したタスクを実行状態にする |
task_wakeup_id_ISR() | idタスクを実行する |
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() | イベントキューを登録解除する |
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を登録解除する |