rtk_kernelユーザアプリケーション ========================== rtk_kernelから呼ばれるユーザアプリケーションには以下の2種類がある。 1. T-Kernelと一緒にリンクしたアプリケーションプログラム。 2. T-Kernelとは別オブジェクトで作成されたアプリケーションプログラム。 概要 ---- T-Kernelが起動すると、`opt_main()`タスクが実行され(`tkernel_source/kernel/sysmain/src/opt_main.c`)、rominfoで指定(`userinit`)した開始番地からのヘッダ情報をチェックしてOKなら開始番地の外部アプリに分岐する。 開始番地が未定義(`0`)かヘッダ情報が不正の場合は、ワーニング表示して`opt_main()`に記述してあるサンプルアプリを実行する。 1.T-Kernelとリンクするアプリ -------------------------- T-Kernelとリンクしたユーザアプリプログラムを使いたい場合は、`opt_main()`から呼ばれる同梱のサンプルアプリ(T2EXの簡易ショル)の代わりにユーザ定義のプログラムが実行されるように直接記述していく。 2.T-Kernelとは別オブジェクトの外部アプリ ------------------------------------- 外部アプリは、本`rtk_kernel`プロジェクトを直接変更して利用する事もできるが、アプリプロジェクト内にGitサブモジュール機能でサブディレクトリとして登録して使う事を想定。 又、別プロジェクトで動かす外部アプリのサンプルプロジェクトも公開していく予定。 ### 外部アプリの開始番地 コンフィグファイル(`rominfo_rom.c`)の、「`RI_USERINIT`」に外部アプリの実行開始アドレスを指定する。yt-kernelでの外部アプリの推奨開始番地は機種によって異なる ^ 機種 ^ 推奨開始番地 ^ 備考 ^ | Raspberry Pi | `0x00080000` | | | RZ/T1 | `0x30080000` | | * OS領域と重複しなければ違う番地でも大丈夫。 ### 外部アプリのヘッダ情報 rtk_kernelでは不正なプログラムを実行しないように、開始番地からヘッダ情報(下記)をチェックし、整合が確認できたら開始番地に分岐する。 ^ 相対番地 ^ 名称 ^ 説明 ^ 備考 ^ | +0x0 | (分岐命令) | ユーザプログラムへの分岐命令 | +0x20番地以降に分岐 | | +0x4 | ApSignature | `0x12345678` | 固定値 | | +0x8 | StartAddress | アプリの開始番地 | ロード位置確認の為 | | +0xC | ApType | `0` | 現在は`=0`のみ | | +0x10 | (Reserved) | `0`にしておく | 予約 | | +0x14 | (Reserved) | `0`にしておく | 予約 | | +0x18 | (Reserved) | `0`にしておく | 予約 | | +0x1C | (Reserved) | `0`にしておく | 予約 | 外部アプリ作成要領 ----------------- 外部アプリは、全く独立した実行モジュールなので、C言語などで動かす場合はスタートアップルーチンから記述する。T-Kernel機能の呼び出しはサービスコールにより行い、T-Kernelサービスコールのライブラリをリンクする必要がある。 別モジュールなので自由にプログラムでき、[[wpjp>Newlib]] のC標準ライブラリなども利用する事も可能。 {{tag>rtk_kernel}}