Copyright © 2019-2023 TRON Forum. All rights reserved.
本仕様書は、μT-Kernel3.0の実装仕様を記す。 対象は、トロンフォーラムから公開されているμT-Kernel 3.0 (V3.00.07)のソースコードの実装とする。 なお、本仕様書はハードウェアに依存しない共通仕様のみを記載する。ハードウェアに依存する実装仕様は、各ハードウェア向けのμT-Kernel3.0実装仕様書を参照のこと。
以降、単にOSと称する場合はμT-Kenrel3.0を示し、本実装と称する場合は前述のソースコードの実装を示す。
本実装の基本方針を以下に示す。
本実装のバージョン情報を以下に示す。この情報はtk_ref_verコールで取得される。
種別 | 変数 | 値 | 備考 |
---|---|---|---|
メーカコード | maker | 0x0000 | トロン |
識別番号 | prid | 0x0000 | トロンフォーラムの番号 |
仕様書バージョン番号 | spver | 0x6300 | μT-Kenrel仕様書3.00 |
カーネルバージョン番号 | prver | 0x0006 | リリースバージョン |
製品管理情報 | prno[4] | - |
本実装が対象とするマイコンを以下に示す。なお、対象システムが空欄のものはマイコンのみに対応している。
対象マイコン | マイコンメーカ | CPUコア | 対象システム |
---|---|---|---|
TMPM367FDFG | 東芝デバイス&ストレージ | ARM Cortex-M3 | TX03 M367 IoT-Engine |
STM32L486VG | STマイクロエレクトロニクス | ARM Cortex-M4 | STM32L4 IoT-Engine |
STM32H723ZG | STマイクロエレクトロニクス | ARM Cortex-M4 | |
RX231 R5F52318ADFL | ルネサス エレクトロニクス | RXv2 | RX231 IoT-Engine |
RX65N R5F565NE | ルネサス エレクトロニクス | RXv2 | |
RZ/A2M R7S921053VCBG | ルネサス エレクトロニクス | ARM Cortex-A9 | RZ/A2M IoT-Engine |
OSは特定のハードウェアにできる限り依存しない方針で設計されているが、ハードウェアに依存するプログラムも一部存在する。ハードウェアに依存しないOSのプログラムをOS共通部と呼び、ハードウェアに依存するOSのプログラムをハードウェア依存部と呼ぶ。 ハードウェア依存部はさらに以下の階層に分ける。階層の数字が小さいほど上位の階層である、
階層 | 名称 | 意味 |
---|---|---|
0 | システム依存部 | マイコンより上位のハードウェア仕様に依存するプログラムである。 具体的にはマイコンを搭載しているボード等の仕様やアプリケーションによるマイコンの使用方法により決まる仕様である。 |
1 | マイコン依存部 | マイコンの仕様に依存するプログラムである。 なお同一のシリーズなど基本仕様が共通するマイコンを一つにまとめて扱う場合もある。 |
2 | CPUコア依存部 | マイコンに内蔵されたCPUコアに依存するプログラムである。 異なったマイコンで共通のCPUコアを使用している場合にその共通部をまとめる階層である。 |
OS共通部とハードウェア依存部、および依存部の階層によって、ソースコードはディレクトリの単位で分離されている。
OSを構築するあたって、対象ハードウェアについて固有のターゲット名および派生する識別名を定める。これらは、機種依存部の条件コンパイルの識別子として使用される。
ターゲット名は対象ハードウェアを示す。ターゲット名はソースコード中には記載されない。開発ツールにおいて指定する必要がある。たとえば、コンパイラのオプションや、統合開発環境の設定においてターゲット名を指定する。 ソースコードでは、ターゲット名から派生して他の識別名が定義される。この定義は/include/sys/machine.hに記述される。 本実装では以下のターゲット名が定められている。他のハードウェアに実装する場合は、同様にターゲット名の定義を追加していく。
対象ハードウェア | ターゲット名 |
---|---|
TX03 M367 IoT-Engine | _IOTE_M367_ |
STM32L4 IoT-Engine | _IOTE_STM32L4_ |
RX231 IoT-Engine | _IOTE_RX231_ |
RZ/A2M IoT-Engine | _IOTE_RZA2M_ |
以下の関連するドキュメントを記す。
分類 | 名称 | 番号 | 発行 |
---|---|---|---|
OS仕様 | μT-Kernel 3.0仕様書(Ver.3.00.01) | TEF020-S004-3.00.01 | トロンフォーラム |
ハードウェア依存の実装仕様 | 各μT-Kernel実装仕様書(※) | - | トロンフォーラム |
T-Monitor | T-Monitor仕様書 | TEF-020-S002-01.00.01 | トロンフォーラム |
デバイスドライバ仕様 | μT-Kernel 3.0 デバイスドライバ説明書(Ver.1.00.2) | TEF033-W007-210331 | トロンフォーラム |
(※) 各μT-Kernel実装仕様書は、対象とするハードウェア毎に作成させる。単位は対象とするマイコン、またはマイコンを含むシステムとする。また、CPUコア依存部については独立の実装仕様書とする場合がある。
本実装のディレクトリ構成を以下に示す。 なお名称に(*)の点いたディレクトリは、OSのソースコードに含まれない。
┬ config コンフィギュレーション
├ include インクルードファイル
│ ├ sys システム定義
│ │ └ sysdepend ハードウェア依存部
│ ├ tk OS関連定義
│ │ └ sysdepend ハードウェア依存部
│ ├ lib ライブラリ関連定義
│ └ tm T-Monitor関連定義
├ kernel OSソースコード
│ ├ knlinc OS内共通定義
│ ├ tstdlib OS内共通ライブラリ
│ ├ sysinit 初期化処理
│ ├ inittask 初期タスク
│ ├ tkernel OS機能
│ ├ sysdepend ハードウェア依存部
│ └ usermain ユーザメイン処理
├ lib ライブラリ
│ ├ libtk μT-Kernelライブラリ
│ └ libtm (*)T-Monitorライブラリ
├ device (*)デバイスドライバ(サンプル)
├ app_sample (*)アプリケーション(サンプル)
├ build_make (*)Make用ビルドディレクトリ
├ docs (*)ドキュメント
└ etc (*)その他
ハードウェア依存部のソースコードは、sysdepedディレクトリ下におかれる。 sysdepedディレクトリは、前述の階層に基づき、以下のように構成される。具体的な名称は各ハードウェアの実装仕様書を参照のこと。
─ sysdepend ハードウェア依存部
├ <ターゲット名1> ターゲット名1のシステム依存部
├ :
├ <ターゲット名n> ターゲット名nのシステム依存部
└ cpu CPU依存部
├ <CPU1> CPU1依存部
├ :
└ <CPUn> CPUn依存部
└ core CPUコア依存部
├ <core1> コア1依存部
├ :
└ <core n> コアn依存部
本実装は、対象とするマイコンとして、単一の物理アドレス空間をもった32ビットまたは16ビットのマイコンを想定している。MMU(メモリ管理ユニット)は無し、または使用しない。
本実装では、マイコンの実行モードは特権モードのみを使用し、非特権(ユーザ)モードは使用しない。よって、プログラムを実行するモードは基本的に同一である。 具体的なマイコンの実行モードは、実装するマイコンに依存する。各ハードウェア用の実装仕様書を参照のこと。
OSが提供する保護レベルは、マイコンの実行モードが特権モードのみなので、すべて保護レベル0と同等となる。カーネルオブジェクトに対して保護レベル1~3を指定しても、メモリ保護は保護レベル0を指定されたものと同じ動作となる。 プロファイルTK_MEM_RNG0~TK_MEM_RNG3はすべて0が返される。
OSが扱うレジスタは、実装するマイコンに依存する。各ハードウェア用の実装仕様書を参照のこと。 特別なレジスタとして、taskmodeレジスタを定義する。taskmodeレジスタは、メモリへのアクセス権限(保護レベル)を保持する仮想レジスタである。マイコンの物理的なレジスタを割り当てるのではなく、OS内の仮想的なレジスタとして実装する場合もある。 なお、本実装ではプログラムは特権モードでのみ実行されるので、常に値は0となる。
省電力機能は、実装するマイコンに依存する。各ハードウェア向けの実装仕様書を参照のこと。
コプロセッサ対応は、実装するマイコンに依存する。各ハードウェア向けの実装仕様書を参照のこと。
本実装では、単一の物理アドレス空間を前提とする。アドレス空間上にはプログラムから使用可能なROMおよびRAMが存在する。 プログラムは、静的にリンクされた一つの実行オブジェクトを前提とする。OSとユーザプログラム(アプリケーションなど)は静的にリンクされており、関数呼び出しが可能とする。
マイコンのアドレス・マップは、実装するマイコンに依存する。各ハードウェア向けの実装仕様書を参照のこと。
本実装では、プログラムコードはROMに置くことを想定している。ただし、初期化処理においてROM上に置いたプログラムコードをRAMに転送して使用することは可能である。 以下に本実装における一般的なROMおよびRAMの内容(用途)を示す。具体的なメモリマップおよびその内容は、各ハードウェア向けの実装仕様書を参照のこと。
(1) ROMの用途
種別 | 内容 | 備考 |
---|---|---|
ベクタテーブル | 例外や割込みのベクタテーブル | 通常は初期化時にのみ使用 |
プログラムコード | C言語のプログラムコードが配置される | |
定数データ | C言語の定数データなどが配置される |
(2) RAMの用途
種別 | 内容 | 備考 |
---|---|---|
ベクタテーブル | 例外や割込みのベクタテーブル | 通常はOS実行中に使用 |
プログラムデータ | C言語の変数等が配置される | |
システムメモリ領域 | 動的メモリ管理に使用される |
本実装では以下の種類のスタックを使用する。なお、具体的なスタックの仕様は、各ハードウェア向けの実装仕様書を参照のこと。
(1) タスクスタック タスクが使用するスタックであり、タスク毎に存在する。各タスクの生成時に指定され、OSが管理するシステムメモリ領域から動的に確保される。ただし、ユーザが確保した領域を使用することも可能である。 本実装では、すべてのプログラムは特権モードで実行しているので、システムスタックとユーザスタックの分離は行わない。一つのタスクに一つのタスクスタックが存在する。プロファイルTK_HAS_SYSSTACKはFALSEである。
(2) 例外スタック 例外処理およびOS初期化処理の実行中に使用するスタックである。 コンフィギュレーション情報(EXC_STACK_SIZE)にてサイズが指定され、メモリマップ上に静的に領域が確保される。
(3) テンポラリスタック OSの内部処理(タスクディスパッチ処理など)で使用されるスタックである。 コンフィギュレーション情報(TMP_STACK_SIZE)にてサイズの指定が指定され、メモリマップ上に静的に領域が確保される。
プログラムのコードやデータが割り当てられていないRAMの領域が、OSが動的メモリ管理を行う領域に割り当てられる。これをシステムメモリと呼ぶ。 通常は、すべてのRAMの空き領域をシステムメモリとする。ただし、コンフィギュレーションのCNF_SYSTEMAREA_TOPとCNF_SYSTEMAREA_ENDにより、システムメモリの先頭アドレスと最終アドレスを指定することにより、調整が可能である。また、値に0を指定することにより、デフォルトの設定とすることができる。 システムメモリのアドレスを調整することにより、OS管理外のメモリ領域をつくることができる。OS管理外のメモリ領域は、OSからは使用されないので、ユーザプログラムで自由に使用することができる。 システムメモリの具体的な仕様は、各ハードウェア向けの実装仕様書を参照のこと。
OSは必要に応じて、システムメモリから必要なメモリを確保し、また使用後にメモリを返却する。 OSのAPI実行時に以下のメモリが動的に管理される。
動的メモリ管理は、コンフィギュレーションのUSE_IMALLOCを1に設定することにより有効となる。初期値は有効(1)である。。 コンフィギュレーションにてUSE_IMALLOCを0(無効)に設定した場合、動的メモリ管理は使用できなくなる。この場合、タスクやメモリプール、メッセージバッファの生成の際には、TA_USERBUF属性(ユーザ指定のメモリ領域を使用)を指定しなくてはならない。
本実装では、システムメモリ管理機能は有効であり、μT-Kernel/SMのメモリ割り当てライブラリ関数(Kmalloc/Kcalloc/Krealloc/Kfree)が提供される。プロファイルTK_SUPPORT_MEMLIBはTRUEとなる。 ただし、システムメモリ管理機能は、前述の動的メモリ管理により実現しているため、動的メモリ管理を無効(コンフィギュレーションUSE_IMALLOCを0)とした場合は、使用不可能となる。プロファイルTK_SUPPORT_MEMLIBはFALSEとなる。
本実装ではメモリ保護には対応していないため、システムメモリはすべての保護レベルからアクセス可能である。
マイコンには各種の割込みおよび例外が存在する。OSの仕様上は割込み、例外をまとめて割込みと称する。 各割込みには割込み番号が割り当てられる。 具体的な割込みの種類や割込み番号は対象マイコンの仕様に依存する、各ハードウェア向けの実装仕様書を参照のこと。
OS内部の処理において使用する割込みの種類を以下に示す。ただし、ハードウェア毎の実装によっては使用しない割込みもある。
種類 | 説明 |
---|---|
SVC割込み(スーパーバイザコール) | システムコールまたは拡張SVCの呼び出しに使用するソフトウェア割込み |
システムタイマ割込み | システムタイマによるハードウェア割込み |
ディスパッチ要求 | ディスパッチを要求する割込み |
強制ディスパッチ要求 | 強制ディスパッチを要求する割込み |
SVC割込みは、システムコールや拡張SVCを発行する際に使用されるソフトウェア割込みである。ただし、本実装ではシステムコールは関数呼び出しのみであり、SVCには対応しない。拡張SVCの機能は無い。よってSVC割込みは使用しない。
システムタイマ割込みは、システムタイマにより周期的に発生するハードウェア割込みである。これによりOSの時間管理機能が実行される。
ディスパッチ要求は、タスクのディスパッチを発生させるために使用される割込みである。OSのAPI処理にて、タスクのディスパッチが必要となった場合(実行タスクが変更になった場合)に発行される。
強制ディスパッチ要求は、OSの処理にて強制ディスパッチを発生させるために使用される割込みである。強制ディスパッチは、ディスパッチ元のタスクが存在しない場合に行われる特別なディスパッチである。具体的にはOSの起動時とタスクの終了時のみに行われる。
OS内部で使用する割込みには、対象マイコンの仕様に基づき、具体的な割込みが割り当てられる。詳細は各ハードウェア向けの実装仕様書を参照のこと。
OS内部処理において不可分に実行しなければならない箇所をクリティカルセクションと呼ぶ。クリティカルセクションでは原則割込みは禁止である。一般にクリティカルセクション中は、割込みのマスクレベルを最高に設定することにより実現される。 具体的な実装は、各ハードウェア向けの実装仕様書を参照のこと。
OSが管理する割込みよりも優先度の高い割込みをOS管理外割込みと呼ぶ。 OS管理外割込みはクリティカルセクションにおいても受け付けられる。つまり、管理外割込みの処理は、OS自体の動作よりも優先して実行される。このため、OS管理外割込みの中でOSのAPIなどの機能を使用することも原則としてできない。 OS管理外割込みは、高い応答性を要求される割込みなどに使用される。具体的な実装は、各ハードウェア向けの実装仕様書を参照のこと。
以下の割込み関連の実装仕様は、対象マイコンの仕様に依存する。各ハードウェア向けの実装仕様書を参照のこと。
電源投入またはリセットなどにより、リセットハンドラが実行され、以下に示すシステムの起動処理が行われる。 具体的な処理内容は、ハードウェアおよびユーザプログラムに依存する。詳細は、各ハードウェア向けの実装仕様書を参照のこと。
(1) ハードウェアの初期化 リセットハンドラより実行されるknl_startup_hw関数により、必要最小限のハードウェアの初期化を行う。 主に以下の処理が行われる。ユーザは必要に応じてknl_startup_hw関数の内容を変更してよい。
(2) 割込みベクタテーブルの作成 ROM上の割込みベクターテーブルをRAM上にコピーし、以降はRAM上のベクターテーブルを使用する。 ただし、コンフィグレーションUSE_STATIC_IVTが1に設定されている場合は、ROM上のベクターテーブルが使用され続ける。USE_STATIC_IVTの初期値は0である。
(3) 変数領域(data, bss)の初期化 C言語のグローバル変数領域の初期化を行い、初期値付き変数の設定および、その他の変数のゼロクリアを行う。
(4) システムメモリ領域の確保 RAM上にシステムメモリ領域を確保する。 ただし、コンフィギュレーションUSE_IMALLOCが0に設定されている場合は本処理は行われない。USE_IMALLOCの初期値は1である。
(5) 割込みの基本設定 CPU、割込みコントローラなどの基本設定を行う。
(6) OS初期化処理(main)の実行 OSの初期化処理(main)を実行し、リセットハンドラは終了する。
リセットハンドラからOS初期化処理が実行される。 OS初期化処理は、以下のファイルののmain関数として実装される。
/kernel/sysinit/sysinit.c
OS初期化処理では以下の処理が実行される。ただし、コンフィギュレーションなどにより実行されない処理もある。また、OS初期化処理中は、原則OSのAPIなどの機能は利用できない。
(3-1) T-Monitor互換ライブラリの初期化 (libtm_init) T-Monitor互換ライブラリの初期化を行う。
(3-2) 動的管理メモリの初期化(knl_init_Imalloc) 動的メモリ管理の初期化を行う。
(3-3) デバイス初期化 (knl_init_device) デバイスドライバの登録に先立ち、必要なハードウェアの初期化を行う。ユーザは使用するデバイスに応じてknl_init_device関数の内容を記述する必要がある。詳細は各ハードウェア向けの実装仕様書を参照のこと。
(3-4) 割込み初期化 (knl_init_interrupt) OSが使用する割込みの初期化を行う。詳細は各ハードウェア向けの実装仕様書を参照のこと。
(3-5) カーネルオブジェクト初期化 (knl_init_object) タスクなどの各カーネルオブジェクトの初期化を行う。
(3-6) システムタイマ初期化 (knl_timer_startup) システムタイマの初期化および実行を開始する。なお、ハードウェアに依存する処理は、knl_start_hw_timer関数として定義され、本処理から呼び出される。詳細は各ハードウェア向けの実装仕様書を参照のこと。
(3-7) 初期タスクの生成 初期タスクの生成およびその実行を開始する。初期タスクについては後述する。 初期タスクの実行後は、OSは起動処理を終え通常の動作となる。
初期タスクはOS初期化の終了後に最初に実行されるタスクである。 初期タスクの生成情報knl_init_ctskは/include/sys/inittask.hで以下のように定義されている。
項目 | 定義名 | 値 |
---|---|---|
拡張情報 | INITTASK_EXINF | 0 |
タスク属性 | INITTASK_TSKATR | TA_HLNG | TA_RNG0 |
タスク起動時優先度 | INITTASK_ITSKPRI | 1 |
スタックサイズ | INITTASK_STKSZ | 1024 |
DSオブジェクト名称 | INITTASK_DSNAME | “inittsk”(※) |
ユーザバッファポインタ | INITTASK_STACK | NULL |
項目 | 定義名 | 値 |
---|---|---|
拡張情報 | INITTASK_EXINF | 0 |
タスク属性 | INITTASK_TSKATR | TA_HLNG | TA_RNG0 | TA_USERBUF |
タスク起動時優先度 | INITTASK_ITSKPRI | 1 |
スタックサイズ | INITTASK_STKSZ | 1024 |
DSオブジェクト名称 | INITTASK_DSNAME | “inittsk”(※) |
ユーザバッファポインタ | INITTASK_STACK | init_task_stackへのポインタ(OS内部変数) |
(※) TA_DSNAME属性が指定されていないので実質無効である。使用する場合はTA_DSNAME属性を指定すること。
初期タスクの実行関数は、/kernel/inittask/inittask.cのinit_task_main関数として定義される。実行関数init_task_mainの処理を以下に記す。
(1) システム起動処理(start_system) (1-1) サブシステムの実行 サブシステムの実行を開始する。ただし、本実装ではサブシステムには対応していないため、この処理は行われない。 例外としてOS内で使用されるデバイス管理サブシステムの実行が開始される。なお、デバイス管理サブシステムは本実装では、サブシステムではなく、通常のOSの処理の一つとして実装されている。
(1-2) デバイスドライバの実行(knl_start_device) デバイスドライバの登録、実行を行う。詳細は各ハードウェア向けの実装仕様書を参照のこと。
(2) ユーザプログラムの実行 (2-2) ユーザ定義初期化プログラムの実行(userinit) ユーザ定義初期化プログラムuserinitが設定されていれば実行する。userinit関数については後述する。
(2-3) ユーザ定義メイン関数の実行(usermain) ユーザプログラム(アプリケーション)のメイン関数usermainを実行する。usermain関数については後述する。
(3) システム終了処理(shutdown_system) ユーザプログラムが終了するとシステムの終了処理を実行する。 処理内容は後述の「システムの終了と再起動」を参照のこと。
ユーザ定義メイン関数usermainは、ユーザプログラム(アプリケーション)のメイン関数である。よって、ユーザは作成するプログラムに応じて任意の内容を記述することができる。一般的には、作成するユーザプログラムのタスクやその他のカーネルオブジェクトの生成、実行などを記述する。 usermain関数が終了すると、本OSは終了または再起動を行う。よって、アプリケーションプログラムの実行中にusermain関数は終了してはならない。
usermain関数の以下の形式のC言語の関数である。
INT usermain( void );
usermain関数の戻り値は、以下のように定義されている。ただし、システムの再起動に関して本OSは実行の枠組みのみを提供する。よって、再起動の処理コードはユーザが必要に応じて実装しなければならない。
戻り値 | 意 味 |
---|---|
0以上 | システム終了 |
-1 | システム再起動(ハードウェアのリセットを実行する) |
-2 | システム高速再起動(OSの再起動) |
-3 | システム再起動(ハードウェアはリセットせず、OS含むコードの初期化) |
usermain関数は/kernel/usermain/usermain.cに記述されている。ただし、weak属性の関数として定義されているので、ユーザプログラムにてusermain関数を定義すれば、上書きされてユーザ定義のusermain関数が実行される。
ユーザ定義初期化プログラムは、usermain関数(ユーザ定義メイン関数)の実行の前後で呼び出されるプログラムである。一般的には、ユーザプログラムの初期化処理や終了処理を、OSを含むシステムプログラムのオブジェクトと独立(静的なリンクを行わない)に実装する場合に使用する。 なお、本OSはAPIの呼び出し方式に関数呼び出しのみ対応しているため、独立したオブジェクトからのAPI呼出しは出来ない。つまり、userinit関数からOSのAPIを呼出しことはできない。
userinit関数は、コンフィギュレーションUSE_USERINITが有効(1)の場合に使用可能となる。初期値は無効(0)である。 USE_USERINITが有効(1)の場合、コンフィギュレーションRI_USERINITに定義されたアドレスを、userinit関数の実行開始アドレスとし実行する。 userinit関数は以下の形式のC言語の関数として、ユーザが実装すること。
typedef INT (*MAIN_FP)(INT, UB **);
userinit関数がusermain関数の実行の前に呼ばれた場合は、その戻り値によりOSは以下のように動作する。
戻り値 | usermain関数 | OSの動作 |
---|---|---|
正の値 | 実行する | usermain関数の実行 |
0 | 実行しない | システム終了 |
負の値 | 実行しない | システム再起動(usermainの戻り値と同じ定義) |
ユーザプログラム(userinitまたはusermain)の実行が終了すると、初期タスクの実行関数init_task_mainから、システム終了処理shutdown_systemを実行する。 shutdown_system関数はユーザプログラム(userinitまたはusermain)の戻り値に応じて、システム終了またはシステム再起動を行う。
ただし、組込みシステムでは、システムの終了や再起動の処理を必要としない場合もありうる。コンフィギュレーションUSE_SHUTDOWNにより、システム終了処理の有無を指定できる。 USE_SHUTDOWNに1(終了処理有り)を指定した場合は、ユーザプログラム(userinitまたはusermain)の戻り値に応じて、システムの終了または再起動を行う。 USE_SHUTDOWNに0(終了処理無し)を指定した場合は、システム終了処理は実装されず、実行されることもない。よって、ユーザプログラムは終了してはならない。ユーザプログラムが終了した場合はshoutdown_system関数内で無限ループを行う。 コンフィギュレーションの初期値はシステム終了処理有り(1)である。
本実装では以下の処理手順でシステム終了を行う。
(1) デバイス終了処理(knl_finish_device) knl_start_deviceと対となる周辺デバイスの終了処理を実行する。詳細は各ハードウェア向けの実装仕様書を参照のこと。
(2) カーネル終了(knl_tkernel_exit) OS自体の終了処理を実行する。本処理のあと、OSは実行を停止する。
(2-1) システムタイマ終了(knl_timer_shoutdown) システムタイマを停止する。knl_timer_initializeと対となる終了処理である。 なお、ハードウェアに依存する処理は、knl_terminate_hw_timer関数として定義され、本処理から呼び出される。詳細は各ハードウェア向けの実装仕様書を参照のこと。
(2-2) ハードウェア停止(knl_shutdown_hw) ハードウェアをすべて停止し、マイコンの動作が終了した状態とする。knl_startup_hwと対となる終了処理である。 詳細は各ハードウェア向けの実装仕様書を参照のこと。
本実装では以下の処理手順でシステム再起動処理を行う。
(1) デバイス終了処理(knl_finish_device) knl_start_deviceと対となる周辺デバイスの終了処理を実行する。詳細は各ハードウェア向けの実装仕様書を参照のこと。
(2) ハードウェア再起動(knl_restart_hw) ハードウェアの再起動処理を行う。よってknl_restart_hw関数から戻ることはない。ただし、再起動が出来なかった場合のみknl_restart_hw関数から戻る。この場合は、カーネル終了処理(knl_tkernel_exit)が実行され、システムを終了する。 knl_restart_hw関数の引数として、usermain関数の戻り値が渡され、その値に応じた再起動処理を行う。 詳細は各ハードウェア向けの実装仕様書を参照のこと。
本実装における各タスク属性の設定の可否を以下に記す。設定不可のタスク属性を指定した場合は、TA_RSATRエラーとなる。
属性 | 可否 | 説明 |
---|---|---|
TA_HLNG | 〇 | |
TA_ASM | ✕ | 本実装は高級言語(C言語)のみ対応 |
TA_SSTKSZ | ✕ | 独立したシステムスタックとユーザスタックを持たない為、非対応 |
TA_USERSTACK | ✕ | 同上 |
TA_USERBUF | 〇 | |
TA_DSNAME | △ | コンフィギュレーションにて使用可否を設定する |
TA_RNG0 | 〇 | 実行モードは特権モードのみのため、いずれを指定してもメモリ保護はレベル0(RNG0)と同等に扱われる |
TA_RNG1 | 〇 | 同上 |
TA_RNG2 | 〇 | 同上 |
TA_RNG3 | 〇 | 同上 |
TA_COPn | - | マイコンの仕様に依存する。各ハードウェアの実装仕様書を参照のこと |
TA_FPU | - | 同上 |
設定可能なタスク優先度priは以下となる。
1 ≦ pri ≦ 最大優先度TK_MAX_TSKPRI
タスク最大優先度TK_MAX_PRIは、コンフィギュレーションCNF_MAX_TSKPRIで設定される16以上の値である。 コンフィギュレーションの初期設定は以下である。
#define CNF_MAX_PRI 32
タスクの処理ルーチンは、以下の形式のC言語の関数である。
void task ( INT stacd , void * exinf )
{
/* 処理 */
tk_ext_tsk () ; またはtk_exd_tsk () ; /* タスクの終了*/
}
タスクの終了には、tk_ext_tsk() または tk_exd_tsk() いずれかのAPIを使用する必要がある。これらのAPIを呼びことなく、タスクの処理関数が終了した場合の動作は保証しない。
タスクの処理ルーチンの実行開始時のマイコンの状態は、各ハードウェアの実装仕様書を参照のこと。
本OSでは、すべてのタスクは特権モードで実行されるので、保護レベル0とみなし、タスクのスタックはタスク毎に一つとする。ユーザスタックとシステムスタックは独立には実装されない(プロファイルTK_HAS_SYSSTACKはFALSEとなる)。 スタックのサイズは、タスク生成時にユーザから指定される。
タスクの実行がプリエンプトされると、タスクのスタック上にコンテキスト情報が保存される。具体的な内容は各ハードウェアの実装仕様書を参照のこと。
本実装ではシステム時刻管理のために、マイコン内蔵のタイマの一つをシステムタイマとして使用する。 システムタイマのティック時間は、コンフィグレーションCNF_TIMER_PERIODで設定する。単位は1ミリ秒であり、設定範囲はハードウェア依存である。ティック時間の標準の設定値は10ミリ秒である。 本実装ではマイクロ秒の時間管理には対応しない。プロファイルTK_SUPPORT_USECはFALSEである。 システムタイマの具体的な実装は、各ハードウェアの実装仕様書を参照のこと。
ハンドラはC言語で記述されていることを前提とし、タイムイベントハンドラのハンドラ属性にTA_ASM属性を指定することはできない。TA_HLNG属性のみを許す。ハンドラ生成時にTA_ASM属性が指定された場合はエラーE_RSATRとする。
タイムイベントハンドラは、OSのシステムタイマの割込み処理から実行される。よって、タイムイベントハンドラは非タスク部のコンテキストで実行される。
タイムイベントハンドラの実行中は、原則として、タスクと同様にすべての割込みを受け付ける。ただし、TA_STA属性の周期ハンドラで周期起動位相(cycphs)が0の場合は、API(tk_cre_cyc)の処理内で、最初の周期ハンドラの実行が行われる。この場合は、OSのクリティカルセクション内でハンドラが実行されるため、割込みは禁止となる。 具体的な実装は、各ハードウェアの実装仕様書を参照のこと。
本実装では、システムコールの呼び出し形式は、C言語の関数呼び出しのみとする。ソフトウェア例外(SVC例外)による呼出しには対応しない。 プロファイルTK_TRAP_SVCはFALSEである。
本実装では、マイクロ秒単位の時間指定可能なAPIはサポートしない。 プロファイルTK_SUPPORT_USECはFALSEである。
本実装では、サブシステムはサポートされない。 プロファイルTK_SUPPORT_SUBSYSTEMおよびTK_SUPPORT_SSYEVENTはFALSEである。
本実装では、μT-Kernel3.0仕様からは除外されたランデブ機能を、μT-Kernel2.0互換機能としてソースコードに残す。ただし、今後実装から削除される可能性があるので、使用は推奨しない。 μT-Kernel2.0互換機能は、コンフィギュレーションのUSE_LEGACY_APIを1に設定すると有効となる。コンフィグレーションの初期設定は0(無効)である。
物理タイマ機能は、コンフィギュレーションのUSE_PTMRを1に設定すると有効となる。コンフィグレーションの初期設定は1(有効)である。 ただし、物理タイマ機能の対応は各ハードウェアへの実装に依存する。詳細は各ハードウェアの実装仕様書を参照のこと。
本実装では、基本的なデバイスドライバをサンプルコードとして提供する。詳細は「μT-Kernel 3.0デバイスドライバ説明書」を参照のこと。
T-Monitorは、T-Kernel1.0の標準開発環境であったT-Engineのモニタプログラムである。μT-Kernel2.0以降の開発環境にはT-Engineを使用せず、またT-MonitorはμT-Kernelの仕様には含まれていない。 本実装ではT-Monitorの一部の機能を主にデバッグ用途として、T-Monitor互換ライブラリの形で提供する。
T-Monitor互換ライブラリは、コンフィグレーションUSE_TMONITORを有効(1)に設定すると使用可能となる。OSの起動処理の中でライブラリの初期化が行われる。 また、コンフィグレーションUSE_SYSTEM_MESSAGEを(1)に設定すると、OSの起動メッセージなどが、T-Monitorのコンソールに出力される。 コンフィグレーションUSE_EXCEPTION_DBG_MSG を有効(1)に設定すると、暫定的な例外ハンドラのデバッグ出力が、T-Monitorのコンソールに出力される。 コンフィグレーションの初期設定はすべて有効(1)である。
以下のT-MonitorのAPIを提供する。なお、APIの仕様は「T-Monitor仕様書」を参照のこと。 入出力の対象となる通信ポートは、後述のコンフィギュレーションで設定可能である。
API名 | 機能 |
---|---|
tm_getchar | コンソールから1文字入力 |
tm_putchar | コンソールへの1文字出力 |
tm_getline | コンソールから1行入力 |
tm_putstring | コンソールへの文字列出力 |
tm_printf | コンソールへの書式付文字列出力(*) |
tm_sprintf | 文字列変数への書式付文字列出力(*) |
(*) 本APIはT-Monitor仕様には存在せず、本ライブラリにて追加したものである。
T-Monitor互換ライブラリの各種機能は、コンフィギュレーションファイル(/config/comfig_tm.h)にて設定される。設定値を変更しOSを再構築することにより、T-Monitor互換機能の設定を変更することができる。
T-Monitor互換ライブラリのコンフィグレーションの一覧を以下に示す。
(1) 通信ポート設定 APIが対象とする通信ポートを指定する。以下の項目のいずれか一つのみを有効(1)とする。
名称 | 初期値 | 説明 |
---|---|---|
TM_COM_SERIAL_DEV | 1 | シリアル通信デバイスを通信ポートに使用する(1: 有効 0: 無効) |
TM_COM_NO_DEV | 0 | 通信ポート無し(入出力は行われない)(1: 有効 0: 無効) |
(2) tm_printf関連設定 tm_printfおよびtm_sprintf APIに関する設定を指定する。
名称 | 初期値 | 説明 |
---|---|---|
USE_TM_PRINTF | 1 | tm_printfおよびtm_sprinf APIを使用する(1: 使用する 0: 使用しない) |
TM_OUTBUF_SZ | 0 | API実行時にスタック上に確保する出力バッファのサイズ(単位:バイト) 0を指定した場合はバッファを確保しない |
APIによるコンソール入出力の具体的な仕様は、各ハードウェアの実装仕様書を参照のこと。
OSの変更可能な各種設定値は、コンフィギュレーションファイル(/config/comfig.h)にて設定される。設定値を変更しOSを再構築することにより、OSの設定を変更することができる。
以下にコンフィグレーションの一覧を示す。値は初期値であり、変更可能である。ただし、オブジェクトの数などはその値に応じてメモリなどの資源が確保されるので、ユーザのシステムに応じた使用可能な資源から適切な値とする必要がある。
(1) カーネル基本設定
名称 | 初期値 | 説明 |
---|---|---|
CNF_SYSTEMAREA_TOP | 0 | システムメモリ領域の開始アドレス 0を指定した場合はシステムのデフォルト値を使用する |
CNF_SYSTEMAREA_END | 0 | システムメモリ領域の終了アドレス 0を指定した場合はシステムのデフォルト値を使用する |
CNF_MAX_TSKPRI | 32 | タスク優先度の最大値 |
CNF_TIMER_PERIOD | 10 | システムタイマの割込み周期(単位ミリ秒) |
(2) カーネルオブジェクト設定
名称 | 初期値 | 説明 |
---|---|---|
CNF_MAX_TSKID | 32 | 最大タスク数 |
CNF_MAX_SEMID | 16 | 最大セマフォ数 |
CNF_MAX_FLGID | 16 | 最大イベントフラグ数 |
CNF_MAX_MBXID | 8 | 最大メールボックス数 |
CNF_MAX_MTXID | 4 | 最大ミューテックス数 |
CNF_MAX_MBFID | 8 | 最大メッセージバッファ数 |
CNF_MAX_MPLID | 4 | 最大可変長メモリプール数 |
CNF_MAX_MPFID | 8 | 最大固定長メモリプール数 |
CNF_MAX_CYCID | 4 | 最大周期ハンドラ数 |
CNF_MAX_ALMID | 8 | 最大アラームハンドラ数 |
(3) デバイス情報
名称 | 初期値 | 説明 |
---|---|---|
CNF_MAX_REGDEV | 8 | デバイスの最大登録数 |
CNF_MAX_OPNDEV | 16 | デバイスの最大同時オープン数 |
CNF_MAX_REQDEV | 16 | デバイスの最大要求数 |
CNF_DEVT_MBFSZ0 | -1 | デバイスイベント用メッセージバッファのバッファサイズ -1を指定した場合はデバイスイベント用メッセージバッファは無効 |
CNF_DEVT_MBFSZ1 | -1 | デバイスイベント用メッセージバッファの最大メッセージサイズ 使用する場合は適切な値を設定すること |
(4) バージョン情報 本情報はカーネルのバージョン情報として、tk_ref_verコールで取得できる。
名称 | 初期値 | 説明 |
---|---|---|
CNF_VER_MAKER | 0 | カーネルのメーカコード (0: トロンフォーラム) |
CNF_VER_PRID | 0 | カーネルの識別番号 (0: トロンフォーラム) |
CNF_VER_PRVER | 3 | カーネルのバージョン番号 |
CNF_VER_PRNO1 | 0 | 製品管理情報1 |
CNF_VER_PRNO2 | 0 | 製品管理情報2 |
CNF_VER_PRNO3 | 0 | 製品管理情報3 |
CNF_VER_PRNO4 | 0 | 製品管理情報4 |
(5) OS内部設定
名称 | 初期値 | 説明 |
---|---|---|
USE_LEGACY_API | 0 | μT-Kernel2.0互換API (0: 使用しない 1: 使用する) |
CNF_MAX_PORID | 0 | 最大ランデブ数 (USE_LEGACY_APIが1の場合に有効) |
CNF_EXC_STACK_SIZE | 2048 | 初期化スタックのサイズ |
CNF_TMP_STACK_SIZE | 256 | テンポラリスタックのサイズ |
USE_NOINIT | 0 | 初期値をもたない静的変数領域(BSS)の初期化(ゼロクリア)の指定 (0: 初期化する 1: 初期化しない) |
USE_IMALLOC | 1 | OS内部の動的メモリ管理の指定 (0: 使用しない 1: 使用する) |
USE_SHUTDOWN | 1 | OS終了処理の指定 (0: 使用しない 1: 使用する) |
USE_STATIC_IVT | 0 | 静的割込みベクタテーブルの指定 (0: 使用しない 1: 使用する) |
(6) APIのパラメータチェック APIの呼出し時のパラメータチェックの有無を指定する(0: チェック無 1:チェック有)。 チェック無に指定した場合、誤ったパラメータが渡された場合のOSの動作は保証されない。
名称 | 初期値 | 説明 |
---|---|---|
CHK_NOSPT | 1 | エラー E_NOSPTのチェック |
CHK_RSATR | 1 | エラー E_RSATRのチェック |
CHK_PAR | 1 | エラー E_PARのチェック |
CHK_ID | 1 | エラー E_IDのチェック |
CHK_OACV | 1 | エラー E_OACVのチェック |
CHK_CTX | 1 | エラー E_CTXのチェック |
CHK_CTX1 | 1 | エラー E_CTX(ディスパッチ禁止中)のチェック |
CHK_CTX2 | 1 | エラー E_CTX(タスク独立部実行中)のチェック |
CHK_SELF | 1 | エラー E_OBJ(自タスクを指定場合)のチェック |
CHK_TKERNEL_CONST | 1 | CONST指定のチェック |
(7) ユーザ定義初期化プログラム
名称 | 初期値 | 説明 |
---|---|---|
USE_USERINIT | 0 | ユーザ定義初期化プログラムの有無 (0: 無 1: 有) |
RI_USERINIT | 0 | ユーザ定義初期化プログラムの開始アドレス 使用する場合は適切な値を設定すること |
(8) デバッグサポート機能
名称 | 初期値 | 説明 |
---|---|---|
USE_DBGSPT | 1 | デバッグサポート機能の指定(0: 無 1: 有) |
USE_OBJECT_NAME | 0 | オブジェクト名機能の指定(0: 無 1: 有) |
OBJECT_NAME_LENGTH | 8 | オブジェクト名の最大長 |
USE_TMONITOR | 1 | T-Monitor互換ライブラリの使用 (0: 使用しない 1: 使用する) |
USE_SYSTEM_MESSAGE | 1 | OSからのメッセージ(T-Monitor出力)(0: 無 1: 有) |
USE_EXCEPTION_DBG_MSG | 1 | 例外ハンドラメッセージ(T-Monitor出力)(0: 無 1: 有) |
(9) コプロセッサ制御 対象のハードウェアがFPUやDSPを有するか、およびOSの機種依存の実装により指定可能か否かが決まる。各ハードウェアの実装仕様書を参照のこと。
名称 | 初期値 | 説明 |
---|---|---|
USE_FPU | 0 | FPU対応 (0: 無 1: 有) |
USE_DSP | 0 | DSP対応 (0: 無 1: 有) |
(10) 物理タイマ機能 物理タイマの有無はハードウェア依存の実装により決まる。各ハードウェアの実装仕様書を参照のこと。
名称 | 初期値 | 説明 |
---|---|---|
USE_PTMR | 1 | 物理タイマ対応(※)(0: 無 1: 有) |
(11) デバイスドライバ デバイスドライバについては「μT-Kernel 3.0デバイスドライバ説明書」を参照のこと。
名称 | 初期値 | 説明 |
---|---|---|
USE_SDEV_DRV | 0 | サンプルデバイスドライバの使用 (0: 無 1: 有) |
OSの取り外しが可能な機能は、機能コンフィグレーションとして、有効・無効の指定ができる。無効とした機能は、プログラムコードも生成されない。本機能は、使用しない機能を取り外すことにより、OSのプログラムコードのサイズを小さくすることが主な目的である。 機能コンフィギュレーションは、機能単位とAPI単位で有効・無効の指定ができる。機能単位で無効化した場合、関連するAPIはすべて使用できなくなる。API単位の指定は、その機能単位が有効な場合に指定可能である。
機能コンフィグレーションは、すべての機能に対して指定できるわけではない。OSとして必須の機能や、ある機能単位で必須のAPIなどが指定できない。
機能コンフィグレーションは、機能コンフィグレーションファイル(/config/ config_func.h)に記述する。
(1) 機能単位 機能単位はそれぞれに有効(1)、無効(0)を設定する。初期値ではすべての機能は有効(1)である。 以下にコンフィグレーションの一覧を示す。
名称 | 機能単位 |
---|---|
USE_SEMAPHORE | セマフォ |
USE_MUTEX | ミューテックス |
USE_EVENTFLAG | イベントフラグ |
USE_MAILBOX | メールボックス |
USE_MESSAGEBUFFER | ミューテックス |
USE_RENDEZVOUS | ランデブ |
USE_MEMORYPOOL | 可変長メモリプール |
USE_FIX_MEMORYPOOL | 固定長メモリプール |
USE_TIMEMANAGEMENT | 時間管理 |
USE_CYCLICHANDLER | アラームハンドラ |
USE_ALARMHANDLER | 周期ハンドラ |
USE_DEVICE | アラームハンドラ |
USE_FAST_LOCK | 高速ロック |
USE_MULTI_LOCK | 高速マルチロック |
(2) API単位 API単位の指定は、以下の形式で記述される。
#define USE_FUNC_XX_YYY_ZZZ
XX_YYY_ZZZは対応するAPI名を大文字としたものである。 たとえば、tk_del_tskは以下のように定義される。
#define USE_FUNC_TK_DEL_TSK
定義が存在する場合、対応するAPIは有効となる。定義がない場合は対応するAPIは無効である。
以下に全定義を示す。ここにないAPIは無効化ができない。
種別 | 定義 |
---|---|
タスク管理 | USE_FUNC_TK_DEL_TSK USE_FUNC_TK_EXT_TSK USE_FUNC_TK_EXD_TSK USE_FUNC_TK_TER_TSK USE_FUNC_TK_CHG_PI USE_FUNC_TK_REL_WAI USE_FUNC_TK_GET_REG USE_FUNC_TK_SET_REG USE_FUNC_TK_REF_TSK USE_FUNC_TK_SUS_SK USE_FUNC_TK_RSM_TSK USE_FUNC_TK_FRSM_TSK USE_FUNC_TK_SLP_TSK USE_FUNC_TK_WUP_TSK USE_FUNC_TK_CA_WUP USE_FUNC_TK_DLY_TSK USE_FUNC_TD_LST_TSK USE_FUNC_TD_REF_TSK USE_FUNC_TD_INF_TSK USE_FUNC_TD_GT_REG USE_FUNC_TD_SET_REG |
セマフォ管理 | USE_FUNC_TK_DEL_SEM USE_FUNC_TK_REF_SEM USE_FUNC_TD_LST_SEM USE_FUNC_TD_REF_SEM USE_FUNC_TD_SEM_QUE |
ミューテックス管理 | USE_FUNC_TK_DEL_MTX USE_FUNC_TK_REF_MTX USE_FUNC_TD_LST_MTX USE_FUNC_TD_REF_MTX USE_FUNC_TD_MTX_QUE |
イベントフラグ管理 | USE_FUNC_TK_DEL_FLG USE_FUNC_TK_REF_FLG USE_FUNC_TD_LST_FLG USE_FUNC_TD_REF_FLG USE_FUNC_TD_FLG_QUE |
メールボックス管理 | USE_FUNC_TK_DEL_MBX USE_FUNC_TK_REF_MBX USE_FUNC_TD_LST_MBX USE_FUNC_TD_REF_MBX USE_FUNC_TD_MBX_QUE |
メッセージバッファ管理 | USE_FUNC_TK_DEL_MBF USE_FUNC_TK_REF_MBF USE_FUNC_TD_LST_MBF USE_FUNC_TD_REF_MBF USE_FUNC_TD_SMBF_QUE USE_FUNC_TD_RMBF_QUE |
ランデブ管理 | USE_FUNC_TK_DEL_POR USE_FUNC_TK_FWD_POR USE_FUNC_TK_REF_POR USE_FUNC_TD_LST_POR USE_FUNC_TD_REF_POR USE_FUNC_TD_CAL_QUE USE_FUNC_TD_ACP_QUE |
可変長メモリプール管理 | USE_FUNC_TK_DEL_MPL USE_FUNC_TK_REF_MPL USE_FUNC_TD_LST_MPL USE_FUNC_TD_REF_MPL USE_FUNC_TD_MPL_QUE |
固定長メモリプール管理 | USE_FUNC_TK_DEL_MPF USE_FUNC_TK_REF_MPF USE_FUNC_TD_LST_MPF USE_FUNC_TD_REF_MPF USE_FUNC_TD_MPF_QUE |
時間管理 | USE_FUNC_TK_SET_UTC USE_FUNC_TK_GET_UTC USE_FUNC_TK_SET_TIM USE_FUNC_TK_GET_TIM USE_FUNC_TK_GET_OTM USE_FUNC_TD_GET_TIM USE_FUNC_TD_GET_OTM |
周期ハンドラ管理 | USE_FUNC_TK_DEL_CYC USE_FUNC_TK_STA_CYC USE_FUNC_TK_STP_CYC USE_FUNC_TK_REF_CYC USE_FUNC_TD_LST_CYC USE_FUNC_TD_REF_CYC |
アラームハンドラ管理 | USE_FUNC_TK_DEL_ALM USE_FUNC_TK_STP_ALM USE_FUNC_TK_REF_ALM USE_FUNC_TD_LST_ALM USE_FUNC_TD_REF_ALM |
システム情報管理 | USE_FUNC_TK_ROT_RDQ USE_FUNC_TK_GET_TID USE_FUNC_TK_DIS_DSP USE_FUNC_TK_ENA_DSP USE_FUNC_TK_REF_SYS USE_FUNC_TK_REF_VER USE_FUNC_TD_REF_SYS USE_FUNC_TD_RDY_QUE |
デバッグサポート機能は、コンフィギュレーションのUSE_DBGSPTを1に設定すると有効となる。コンフィグレーションの初期設定は0(無効)である。 また、DSオブジェクト名を使用するにはコンフィギュレーションUSE_OBJECT_NAMEを1(有効)に設定する。コンフィグレーションの初期設定は0(無効)である。
本実装はμT-Kernel/DSのAPIに対応するが、マイクロ秒単位のAPIには対応しない。サービスプロファイルTK_SUPPORT_USECはFALSEである。また、実行トレース機能には対応していない。 以下に本OSにおけるμT-Kernel/DSのAPIの対応を示す。
API名 | 対応 | 説明 |
---|---|---|
td_lst_tsk | 〇 | |
td_lst_sem | 〇 | |
td_lst_flg | 〇 | |
td_lst_mbx | 〇 | |
td_lst_mtx | 〇 | |
td_lst_mbf | 〇 | |
td_lst_mpf | 〇 | |
td_lst_mpl | 〇 | |
td_lst_cyc | 〇 | |
td_lst_alm | 〇 | |
td_lst_por | 〇 | μT-Kernel3.0仕様ではない(*) |
td_lst_ssy | 〇 | |
td_rdy_que | 〇 | |
td_sem_que | 〇 | |
td_flg_que | 〇 | |
td_mbx_que | 〇 | |
td_mtx_que | 〇 | |
td_smbf_que | 〇 | |
td_rmbf_que | 〇 | |
td_mpf_que | 〇 | |
td_mpl_que | 〇 | |
td_cal_que | 〇 | μT-Kernel3.0仕様ではない(*) |
td_acp_que | 〇 | μT-Kernel3.0仕様ではない(*) |
td_ref_tsk | 〇 | |
td_ref_sem | 〇 | |
td_ref_flg | 〇 | |
td_ref_mbx | 〇 | |
td_ref_mtx | 〇 | |
td_ref_mbf | 〇 | |
td_ref_mpf | 〇 | |
td_ref_mpl | 〇 | |
td_ref_cyc | 〇 | |
td_ref_alm | 〇 | |
td_ref_por | 〇 | μT-Kernel3.0仕様ではない(*) |
td_ref_sys | 〇 | |
td_ref_ssy | 〇 | |
td_get_reg | 〇 | |
td_set_reg | 〇 | |
td_get_tim | 〇 | |
td_get_utc | 〇 | |
td_get_otm | 〇 | |
td_ref_dsname | 〇 | |
td_set_dsname | 〇 | |
td_hok_svc | ✕ | 実行トレースには対応しない |
td_hok_dsp | ✕ | 実行トレースには対応しない |
gd_hok_int | ✕ | 実行トレースには対応しない |
(*) μT-Kernel2.0互換仕様である。コンフィグレーションUSE_LEGACY_APIを有効にした場合のみ使用可能となる。
版数 | 日付 | 内容 |
---|---|---|
2.00.00 | 2023.12.01 | ・内容および構成の全面見直し |
1.00.08 | 2021.11.15 | ・1.5 関連ドキュメント バージョン番号等を更新 ・5.2.1 初期タスクの設定 注釈追加 ・誤記修正 (正)CNF_(誤)CFN_ (正)RNG (誤)RING |
1.00.07 | 2021.08.27 | ・1.5 関連ドキュメントを更新 |
1.00.06 | 2021.05.17 | ・1.3 バージョン情報 バージョン番号等を更新 ・10. T-Monitor互換ライブラリ ・コンフィギュレーション関連の記載を追加 ・11.3 その他のコンフィギュレーション (新規) |
1.00.05 | 2020.12.09 | ・1.3 バージョン情報 バージョン番号等を更新 ・1.5 関連ドキュメント バージョン番号等を更新 ・11.コンフィギュレーション (4) バージョン情報< 誤記修正(削除)「ただし、本実装では tk_ref_ver コールは未対応である」 (5) OS内部設定 誤記修正 (誤)T-Kernel2.0 (正)μT-Kernel2.0 (11) デバイスドライバ 新規 |
1.00.04 | 2020.10.21 | ・ 1.3 バージョン情報 バージョン番号等を更新 ・1.5 関連ドキュメント バージョン番号等を更新 ・9.1 デバッグサポート機能の有効化 コンフィグレーションUSE_OBJECT_NAMEのデフォルトを無効に変更 ・11.1 基本コンフィグレーション 「オブジェクト名機能の指定」のデフォルト値を0に変更 |
1.00.03 | 2020.07.13 | ・1.5 関連ドキュメント 「デバイスドライバ説明書」追加 ・1.6 ソースコード構成 「device」追加 ・3.6 システムメモリ管理機能 変更 ・8.4 物理タイマ機能 新規 ・8.5 デバイスドライバ 新規 ・11.1 基本コンフィグレーション 物理タイマ対応を追加 |
1.00.02 | 2020.05.29 | ・1.3 バージョン情報 バージョン番号等を更新 ・1.5 関連ドキュメント バージョン番号等を更新 ・1.6 ソースコード構成 Make用ビルドディレクトリの追加 ・11.1 基本コンフィギュレーション (4) バージョン情報バージョン番号等を更新 ・4.4 OS内部で使用される割込み 実装依存に関する説明の見直し |
1.00.01 | 2020.03.13 | ・1.4ターゲット名 ターゲット名はソースコード中には記述せず、開発ツールにて指定するように変更。 ・1.5 関連ドキュメント 更新 ・5.1 システム起動処理 説明分の見直し、修正 ・「5.4 ハードウェアの初期化および終了処理」および「5.5 デバイスドライバの実行および終了」 ハードウェアの周辺デバイスと、OSが管理するデバイスドライバが、デバイスという同一の名称で一緒に説明されていたので、節を分けるように修正。また、後者をデバイスと呼び前者はハードウェアと呼ぶこととした。 ・11. コンフィギュレーション 「(9) コプロセッサ対応」をの項目を追加 |
1.00.00 | 2019.12.11 | ・初版 |
以上