OS Demos

# オペレーティングシステム(OS)サンプルデモ

## 場所

`$TwlSDK/build/demos/os`
`$TwlSDK/build/demos.TWL/os`

## コンパイル方法

`$TwlSDK/build/demos/os` (または`$TwlSDK/build/demos.TWL/os`) ディレクトリに移り、

> `% make`

と入力します。コンパイルが始まり、実行ファイルである `.srl` ファイルやバイナリ情報を記述した `.nef` または `.tef` ファイルが、

> `$TwlSDK/build/demos/os/(サンプル名)/bin/(プラットフォーム)/(ターゲット)/`
> `$TwlSDK/build/demos.TWL/os/(サンプル名)/bin/(プラットフォーム)/(ターゲット)/`

の下に生成されます。例えば、

> `$TwlSDK/build/demos/os/thread-1/bin/ARM9-TS/Release/main.srl`

が `thread-1` デモの実行ファイルとなります。

## 実行方法

### NITRO ROM の場合

Ensata エミュレータを用いる場合

- ensata で `*.nef`, `*.srl` を実行する。

IS-NITRO-DEBUGGER を用いる場合

- IS-NITRO-DEBUGGER で `*.nlf` ファイルを読みこんで実行する。
- IS-NITRO-DEBUGGER で `*.srl` を実行する。
- コマンドラインから `loadrun.exe` で IS-NITRO-DEBUGGER で `*.srl` を実行する。

IS-TWL-DEBUGGER を用いる場合

- IS-TWL-DEBUGGER で `*.nlf` ファイルを読みこんで実行する。
- IS-TWL-DEBUGGER で `*.srl` を実行する。
- コマンドラインから `loadrun.TWL.exe` で IS-TWL-DEBUGGER で `*.srl` を実行する。

### TWL/NITRO HYBRID ROM の場合

IS-NITRO-DEBUGGER を用いる場合

- IS-NITRO-DEBUGGER で `*.srl` を実行する。
- コマンドラインから `loadrun.exe` で IS-NITRO-DEBUGGER で `*.srl` を実行する。

IS-TWL-DEBUGGER を用いる場合

- IS-TWL-DEBUGGER で `*.tlf` ファイルを読みこんで実行する。
- IS-TWL-DEBUGGER で `*.srl` を実行する。
- コマンドラインから `loadrun.TWL.exe` で IS-TWL-DEBUGGER で `*.srl` を実行する。

### TWL LIMITED ROM の場合

IS-TWL-DEBUGGER を用いる場合

- IS-TWL-DEBUGGER で `*.tlf` ファイルを読みこんで実行する。
- IS-TWL-DEBUGGER で `*.srl` を実行する。
- コマンドラインから `loadrun.TWL.exe` で IS-TWL-DEBUGGER で `*.srl` を実行する。

## 説明

デモ名 | ディレクトリ | 動作
--- | --- | ---
`alarm-1` | `demos` | ワンショットのアラームを１つ使用します。
`alarm-2` | `demos` | 周期的なアラームと、ワンショットのアラームを使用します。
`arena-1` | `demos` | アリーナを設定しメモリを取得します。
`argument-1` | `demos` | 引数データをROMイメージに埋め込み表示します。
`argument-2` | `demos` | 文字列からその場で引数データを作成して設定します。
`callTrace-1` | `demos` | スレッドシステムを使用せずに、関数コールトレース表示を行います。
`callTrace-2` | `demos` | スレッドシステムを使用して、関数コールトレース表示を行います。
`consoleType-1` | `demos` | 動作環境情報を画面に表示します。
`cplusplus-1` | `demos` | C++の実装のためにスタティックイニシャライザを呼ぶ前にメモリ管理の初期化を行います。
`cpuSpeed-1` | `demos.TWL` | CPU速度を倍速と等速で切り替えます。
`entropy-1` | `demos` | `OS_GetLowEntropyData()` を使用します。
`event-1` | `demos` | イベントによってスレッドを起こします。
`exceptionDisplay-1` | `demos` | 例外表示を行い、例外コールバックを使用します。 (IS-TWL-DEBUGGER では例外コールバックを使用しません)
`exceptionDisplay-2` | `demos` | 0除算で擬似的に例外を発生させます。
`exceptionDisplay-3` | `demos` | 例外発生時に、関数コールトレース情報を表示します。 (IS-TWL-DEUBGGER では関数コールトレース情報を表示しません)
`exceptionDisplay-4` | `demos` | 例外発生時に、画面に例外時コンテキストを表示します。 (IS-TWL-DEBUGGER では画面にコンテキストを表示しません)
`forChina-1` | `demos` | 中国向けアプリケーションを作成する簡易サンプルです。
`forKorea-1` | `demos` | 韓国向けアプリケーションを作成する簡易サンプルです。
`functionCost-1` | `demos` | 関数のコストを計測して表示します。
`functionCost-2` | `demos` | 複数のスレッドで関数のコストを計測して表示します。
`functionCost-3` | `demos` | 複数のスレッドで計測した関数コストを全体で集計して表示します。
`heap-1` | `demos` | ヒープを作成して領域を確保したり解放したりします。
`message-1` | `demos` | メッセージでスレッドを起こします。
`mutex-1` | `demos` | 複数のスレッドから1つの関数をアクセスする際にmutexで排他制御します。
`mutex-2` | `demos` | スレッドが終了するときに mutex をアンロックします。
`os_jump` | `demos.TWL` | `OS_JumpToSystemMenu()` や `OS_RebootSystem()` などハードウェアリセットを介する関数の動作デモです。
`reset-1` | `demos` | ソフトウェアリセットをかけます。
`simple-1` | `demos` | 最もシンプルな動作デモです。
`sleep-1` | `demos` | 一定時間スレッドをスリープします。
`spinwait-1` | `demos` | `OS_SpinWait()` で一定時間ウェイトします。
`thread-1` | `demos` | ２つのスレッドを作成し、一方がもう一方を直接起こします。
`thread-2` | `demos` | ２つのスレッドを作成し、割り込みハンドラからそれぞれを起こします。
`thread-3` | `demos` | `OS_JoinThread()` を使用する例です。
`threadQueue-1` | `demos` | スレッドキューを用いてスレッドを起こします。
`threadYield-1` | `demos` | `OS_YieldThread()` を使用する例です。
`tick-1` | `demos` | システムのtick値を取得します。
`timer-1` | `demos` | 16bitタイマと32bitタイマを使用します。
`valarm-1` | `demos` | Vカウントを用いたアラームを使用します。
`waitIrq-1` | `demos` | 別スレッドを動作させながらVブランクの発生を待ちます。
`waitIrq-2` | `demos` | `OS_WaitIrq()` と `OS_WaitAnyIrq()` の動作の違いを示します。

## 動作

`exceptionDisplay-*, reset-1 は ensata では正常動作をしません。`

`IS-TWL-DEBUGGER では、exceptionDisplay-* は例外が発生したコードで停止します。`

`arbitrary_jump は TwlNmenu.srl を使って本体保存メモリに tad をインポートしてから実行してください。`

デモのいくつかは `OS_Printf()` で情報をデバッグコンソールに表示しているものがあります。しかしFINALROM版のROMでは `OS_Printf()` が無効化されるので、そういうものに関しては FINALROM版での確認が出来ません。

## 参照

`OS関数一覧`

## 履歴

2009/09/10 forChina-fsサンプルを廃止
2009/07/01 exceptionDisplay-* について説明を修正
2009/06/17 exceptionDisplay-4 デモの説明追記
2008/07/09 一旦削除していた argument-1, argument-2 を追加
2008/04/25 表を一新。TWL用の一覧に変更。
2006/10/19 forKorea-1 サンプルの説明を追加。
2005/09/09 argument-2 を追加
2005/07/22 functionCost-1 の記載漏れを修正
2005/07/21 argument-1 を追加
2005/07/14 thread-10 を追加
2005/07/13 thread-6, thread-7, thread-8, thread-9 を追加。
2005/07/11 forChina-1、forChina-fsサンプルの説明を追加。
2005/05/10 favorite-colorサンプルの説明を追加。
2005/03/02 記述内容を現在のサポート環境の状況に合うよう修正。
2004/12/08 interrupt-key-1 を削除。動作を修正。
2004/09/01 reset-1 を追加。
2004/08/17 IS-NITRO-EMULATORについての表記を統一。
2004/07/10 .bin から .srl へ変更。
2004/06/25 thread-5を追加。
2004/06/08 profile関連のデモをデフォルトでMakefileに入れるようにした。
2004/05/24 functionCost-1,2,3, waitIrq-1,2 を追加。必要なprofile機能についての記述を追加。
2004/04/15 callTrace-1, callTrace-2, cplusplus-1, exceptionDisplay-3 の記述を追加。
2004/04/05 mutex-2, sleep-1, timer-1 の記述を追加。systemClock-1 を tick-1 に修正。
2004/03/17 exceptionDisplay-2, valarm-1, spinWait-1 の記述を追加。
2004/02/05 alarm-1,alarm-2,exceptionDisplay-1,systemClock-1 の記述を追加。
2004/01/18 interrupt-dma-1 サンプルはdmaCallback-1 としてMIに移した。
2004/01/09 初版