mtkernel_3

μT-Kernel3.0 共通実装仕様書

Version.02.00.00

2023.12.01

Copyright © 2019-2023 TRON Forum. All rights reserved.

目次

1. 概要

1.1. 目的

本仕様書は、μT-Kernel3.0の実装仕様を記す。 対象は、トロンフォーラムから公開されているμT-Kernel 3.0 (V3.00.07)のソースコードの実装とする。 なお、本仕様書はハードウェアに依存しない共通仕様のみを記載する。ハードウェアに依存する実装仕様は、各ハードウェア向けのμT-Kernel3.0実装仕様書を参照のこと。

以降、単にOSと称する場合はμT-Kenrel3.0を示し、本実装と称する場合は前述のソースコードの実装を示す。

1.2. 基本事項

1.2.1. 実装の基本方針

本実装の基本方針を以下に示す。

  • OSのプログラムは極力C言語で記述し、またC言語処理系以外の特定の開発ツールの使用を前提としない。
  • OSは特定のハードウェアにできる限り依存しないこととし、ハードウェアに依存するソースコードはそれ以外と明確に分離する。
  • OSおよびOS上で実行されるプログラムは、単一のアドレス空間で動作する。このアドレス空間は物理アドレスとし、MMUを用いた仮想アドレスやメモリ保護などには対応しない。
  • OSおよびOS上で実行されるプログラムは、実行モードを特権モードのみとし、静的にリンクされた一つの実行オブジェクトとする。これを前提にAPIは関数呼び出しのみとする。

1.2.2. バージョン情報

本実装のバージョン情報を以下に示す。この情報はtk_ref_verコールで取得される。

種別 変数 備考
メーカコード maker 0x0000 トロン
識別番号 prid 0x0000 トロンフォーラムの番号
仕様書バージョン番号 spver 0x6300 μT-Kenrel仕様書3.00
カーネルバージョン番号 prver 0x0006 リリースバージョン
製品管理情報 prno[4] -  

1.2.3. 対象ハードウェア

本実装が対象とするマイコンを以下に示す。なお、対象システムが空欄のものはマイコンのみに対応している。

対象マイコン マイコンメーカ 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

1.2.4. OS共通部とハードウェア依存部

OSは特定のハードウェアにできる限り依存しない方針で設計されているが、ハードウェアに依存するプログラムも一部存在する。ハードウェアに依存しないOSのプログラムをOS共通部と呼び、ハードウェアに依存するOSのプログラムをハードウェア依存部と呼ぶ。 ハードウェア依存部はさらに以下の階層に分ける。階層の数字が小さいほど上位の階層である、

階層 名称 意味
0 システム依存部 マイコンより上位のハードウェア仕様に依存するプログラムである。
具体的にはマイコンを搭載しているボード等の仕様やアプリケーションによるマイコンの使用方法により決まる仕様である。
1 マイコン依存部 マイコンの仕様に依存するプログラムである。
なお同一のシリーズなど基本仕様が共通するマイコンを一つにまとめて扱う場合もある。
2 CPUコア依存部 マイコンに内蔵されたCPUコアに依存するプログラムである。
異なったマイコンで共通のCPUコアを使用している場合にその共通部をまとめる階層である。

OS共通部とハードウェア依存部、および依存部の階層によって、ソースコードはディレクトリの単位で分離されている。

1.2.5. ターゲット名

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_

1.3. 関連ドキュメント

以下の関連するドキュメントを記す。

分類 名称 番号 発行
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コア依存部については独立の実装仕様書とする場合がある。

1.4. ソースコード構成

本実装のディレクトリ構成を以下に示す。 なお名称に(*)の点いたディレクトリは、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依存部

2. 基本実装仕様

2.1. マイコン関連

2.1.1. 対象とするマイコン

本実装は、対象とするマイコンとして、単一の物理アドレス空間をもった32ビットまたは16ビットのマイコンを想定している。MMU(メモリ管理ユニット)は無し、または使用しない。

2.1.2. 実行モードと保護レベル

本実装では、マイコンの実行モードは特権モードのみを使用し、非特権(ユーザ)モードは使用しない。よって、プログラムを実行するモードは基本的に同一である。 具体的なマイコンの実行モードは、実装するマイコンに依存する。各ハードウェア用の実装仕様書を参照のこと。

OSが提供する保護レベルは、マイコンの実行モードが特権モードのみなので、すべて保護レベル0と同等となる。カーネルオブジェクトに対して保護レベル1~3を指定しても、メモリ保護は保護レベル0を指定されたものと同じ動作となる。 プロファイルTK_MEM_RNG0~TK_MEM_RNG3はすべて0が返される。

2.1.3. CPUレジスタ

OSが扱うレジスタは、実装するマイコンに依存する。各ハードウェア用の実装仕様書を参照のこと。 特別なレジスタとして、taskmodeレジスタを定義する。taskmodeレジスタは、メモリへのアクセス権限(保護レベル)を保持する仮想レジスタである。マイコンの物理的なレジスタを割り当てるのではなく、OS内の仮想的なレジスタとして実装する場合もある。 なお、本実装ではプログラムは特権モードでのみ実行されるので、常に値は0となる。

2.1.4. 省電力機能

省電力機能は、実装するマイコンに依存する。各ハードウェア向けの実装仕様書を参照のこと。

2.1.5. コプロセッサ対応

コプロセッサ対応は、実装するマイコンに依存する。各ハードウェア向けの実装仕様書を参照のこと。

2.2. メモリ関連

2.2.1. メモリモデル

本実装では、単一の物理アドレス空間を前提とする。アドレス空間上にはプログラムから使用可能なROMおよびRAMが存在する。 プログラムは、静的にリンクされた一つの実行オブジェクトを前提とする。OSとユーザプログラム(アプリケーションなど)は静的にリンクされており、関数呼び出しが可能とする。

2.2.2. マイコンのアドレス・マップ

マイコンのアドレス・マップは、実装するマイコンに依存する。各ハードウェア向けの実装仕様書を参照のこと。

2.2.3. OSのメモリマップ

本実装では、プログラムコードはROMに置くことを想定している。ただし、初期化処理においてROM上に置いたプログラムコードをRAMに転送して使用することは可能である。 以下に本実装における一般的なROMおよびRAMの内容(用途)を示す。具体的なメモリマップおよびその内容は、各ハードウェア向けの実装仕様書を参照のこと。

(1) ROMの用途

種別 内容 備考
ベクタテーブル 例外や割込みのベクタテーブル 通常は初期化時にのみ使用
プログラムコード C言語のプログラムコードが配置される  
定数データ C言語の定数データなどが配置される  

(2) RAMの用途

種別 内容 備考
ベクタテーブル 例外や割込みのベクタテーブル 通常はOS実行中に使用
プログラムデータ C言語の変数等が配置される  
システムメモリ領域 動的メモリ管理に使用される  

2.2.4. スタック

本実装では以下の種類のスタックを使用する。なお、具体的なスタックの仕様は、各ハードウェア向けの実装仕様書を参照のこと。

(1) タスクスタック タスクが使用するスタックであり、タスク毎に存在する。各タスクの生成時に指定され、OSが管理するシステムメモリ領域から動的に確保される。ただし、ユーザが確保した領域を使用することも可能である。 本実装では、すべてのプログラムは特権モードで実行しているので、システムスタックとユーザスタックの分離は行わない。一つのタスクに一つのタスクスタックが存在する。プロファイルTK_HAS_SYSSTACKはFALSEである。

(2) 例外スタック 例外処理およびOS初期化処理の実行中に使用するスタックである。 コンフィギュレーション情報(EXC_STACK_SIZE)にてサイズが指定され、メモリマップ上に静的に領域が確保される。

(3) テンポラリスタック OSの内部処理(タスクディスパッチ処理など)で使用されるスタックである。 コンフィギュレーション情報(TMP_STACK_SIZE)にてサイズの指定が指定され、メモリマップ上に静的に領域が確保される。

2.2.5. 動的メモリ管理

プログラムのコードやデータが割り当てられていない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属性(ユーザ指定のメモリ領域を使用)を指定しなくてはならない。

2.2.6. システムメモリ管理機能

本実装では、システムメモリ管理機能は有効であり、μT-Kernel/SMのメモリ割り当てライブラリ関数(Kmalloc/Kcalloc/Krealloc/Kfree)が提供される。プロファイルTK_SUPPORT_MEMLIBはTRUEとなる。 ただし、システムメモリ管理機能は、前述の動的メモリ管理により実現しているため、動的メモリ管理を無効(コンフィギュレーションUSE_IMALLOCを0)とした場合は、使用不可能となる。プロファイルTK_SUPPORT_MEMLIBはFALSEとなる。

本実装ではメモリ保護には対応していないため、システムメモリはすべての保護レベルからアクセス可能である。

2.3. 割込みおよび例外関連

2.3.1. マイコンの割込みおよび例外

マイコンには各種の割込みおよび例外が存在する。OSの仕様上は割込み、例外をまとめて割込みと称する。 各割込みには割込み番号が割り当てられる。 具体的な割込みの種類や割込み番号は対象マイコンの仕様に依存する、各ハードウェア向けの実装仕様書を参照のこと。

2.3.2. OS内部で使用する割込み

OS内部の処理において使用する割込みの種類を以下に示す。ただし、ハードウェア毎の実装によっては使用しない割込みもある。

種類 説明
SVC割込み(スーパーバイザコール) システムコールまたは拡張SVCの呼び出しに使用するソフトウェア割込み
システムタイマ割込み システムタイマによるハードウェア割込み
ディスパッチ要求 ディスパッチを要求する割込み
強制ディスパッチ要求 強制ディスパッチを要求する割込み

SVC割込みは、システムコールや拡張SVCを発行する際に使用されるソフトウェア割込みである。ただし、本実装ではシステムコールは関数呼び出しのみであり、SVCには対応しない。拡張SVCの機能は無い。よってSVC割込みは使用しない。

システムタイマ割込みは、システムタイマにより周期的に発生するハードウェア割込みである。これによりOSの時間管理機能が実行される。

ディスパッチ要求は、タスクのディスパッチを発生させるために使用される割込みである。OSのAPI処理にて、タスクのディスパッチが必要となった場合(実行タスクが変更になった場合)に発行される。

強制ディスパッチ要求は、OSの処理にて強制ディスパッチを発生させるために使用される割込みである。強制ディスパッチは、ディスパッチ元のタスクが存在しない場合に行われる特別なディスパッチである。具体的にはOSの起動時とタスクの終了時のみに行われる。

OS内部で使用する割込みには、対象マイコンの仕様に基づき、具体的な割込みが割り当てられる。詳細は各ハードウェア向けの実装仕様書を参照のこと。

2.3.3. クリティカルセクション

OS内部処理において不可分に実行しなければならない箇所をクリティカルセクションと呼ぶ。クリティカルセクションでは原則割込みは禁止である。一般にクリティカルセクション中は、割込みのマスクレベルを最高に設定することにより実現される。 具体的な実装は、各ハードウェア向けの実装仕様書を参照のこと。

2.3.4. OS管理外割込み

OSが管理する割込みよりも優先度の高い割込みをOS管理外割込みと呼ぶ。 OS管理外割込みはクリティカルセクションにおいても受け付けられる。つまり、管理外割込みの処理は、OS自体の動作よりも優先して実行される。このため、OS管理外割込みの中でOSのAPIなどの機能を使用することも原則としてできない。 OS管理外割込みは、高い応答性を要求される割込みなどに使用される。具体的な実装は、各ハードウェア向けの実装仕様書を参照のこと。

2.3.5. その他の実装仕様

以下の割込み関連の実装仕様は、対象マイコンの仕様に依存する。各ハードウェア向けの実装仕様書を参照のこと。

  • ベクタテーブル
  • 割込み優先度
  • 多重割込み対応
  • μT-Kernel/OSの割込み管理機能
  • μT-Kernel/SMの割込み管理機能

3. システムの起動

3.1. 起動処理

3.1.1. リセットハンドラ

電源投入またはリセットなどにより、リセットハンドラが実行され、以下に示すシステムの起動処理が行われる。 具体的な処理内容は、ハードウェアおよびユーザプログラムに依存する。詳細は、各ハードウェア向けの実装仕様書を参照のこと。

(1) ハードウェアの初期化 リセットハンドラより実行されるknl_startup_hw関数により、必要最小限のハードウェアの初期化を行う。 主に以下の処理が行われる。ユーザは必要に応じてknl_startup_hw関数の内容を変更してよい。

  • CPUクロックの設定
  • I/O端子の機能設定
  • 使用する周辺デバイスの有効化

(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)を実行し、リセットハンドラは終了する。

3.1.2. OS初期化処理

リセットハンドラから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は起動処理を終え通常の動作となる。

3.2. 初期タスク

3.2.1. 初期タスクの設定

初期タスクはOS初期化の終了後に最初に実行されるタスクである。 初期タスクの生成情報knl_init_ctskは/include/sys/inittask.hで以下のように定義されている。

  • 動的メモリ管理を使用する場合(USE_IMALLOC = 1)
項目 定義名
拡張情報 INITTASK_EXINF 0
タスク属性 INITTASK_TSKATR TA_HLNG | TA_RNG0
タスク起動時優先度 INITTASK_ITSKPRI 1
スタックサイズ INITTASK_STKSZ 1024
DSオブジェクト名称 INITTASK_DSNAME “inittsk”(※)
ユーザバッファポインタ INITTASK_STACK NULL
  • 動的メモリ管理を使用しない場合(USE_IMALLOC = 0)
項目 定義名
拡張情報 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属性を指定すること。

3.2.2. 初期タスクの処理

初期タスクの実行関数は、/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) ユーザプログラムが終了するとシステムの終了処理を実行する。 処理内容は後述の「システムの終了と再起動」を参照のこと。

3.2.3. ユーザ定義メイン関数

ユーザ定義メイン関数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関数が実行される。

3.2.4. ユーザ定義初期化プログラム

ユーザ定義初期化プログラムは、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の戻り値と同じ定義)

4. システムの終了と再起動

4.1. 終了処理と再起動処理

ユーザプログラム(userinitまたはusermain)の実行が終了すると、初期タスクの実行関数init_task_mainから、システム終了処理shutdown_systemを実行する。 shutdown_system関数はユーザプログラム(userinitまたはusermain)の戻り値に応じて、システム終了またはシステム再起動を行う。

ただし、組込みシステムでは、システムの終了や再起動の処理を必要としない場合もありうる。コンフィギュレーションUSE_SHUTDOWNにより、システム終了処理の有無を指定できる。 USE_SHUTDOWNに1(終了処理有り)を指定した場合は、ユーザプログラム(userinitまたはusermain)の戻り値に応じて、システムの終了または再起動を行う。 USE_SHUTDOWNに0(終了処理無し)を指定した場合は、システム終了処理は実装されず、実行されることもない。よって、ユーザプログラムは終了してはならない。ユーザプログラムが終了した場合はshoutdown_system関数内で無限ループを行う。 コンフィギュレーションの初期値はシステム終了処理有り(1)である。

4.2. 終了処理の手順

本実装では以下の処理手順でシステム終了を行う。

(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と対となる終了処理である。 詳細は各ハードウェア向けの実装仕様書を参照のこと。

4.3. 再起動処理の手順

本実装では以下の処理手順でシステム再起動処理を行う。

(1) デバイス終了処理(knl_finish_device) knl_start_deviceと対となる周辺デバイスの終了処理を実行する。詳細は各ハードウェア向けの実装仕様書を参照のこと。

(2) ハードウェア再起動(knl_restart_hw) ハードウェアの再起動処理を行う。よってknl_restart_hw関数から戻ることはない。ただし、再起動が出来なかった場合のみknl_restart_hw関数から戻る。この場合は、カーネル終了処理(knl_tkernel_exit)が実行され、システムを終了する。 knl_restart_hw関数の引数として、usermain関数の戻り値が渡され、その値に応じた再起動処理を行う。 詳細は各ハードウェア向けの実装仕様書を参照のこと。

5. タスク

5.1. タスク属性

本実装における各タスク属性の設定の可否を以下に記す。設定不可のタスク属性を指定した場合は、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 - 同上

5.2. タスク優先度

設定可能なタスク優先度priは以下となる。

 1 ≦ pri ≦ 最大優先度TK_MAX_TSKPRI

タスク最大優先度TK_MAX_PRIは、コンフィギュレーションCNF_MAX_TSKPRIで設定される16以上の値である。 コンフィギュレーションの初期設定は以下である。

 #define	CNF_MAX_PRI		32

5.3. タスクの処理ルーチン

タスクの処理ルーチンは、以下の形式のC言語の関数である。

void task ( INT stacd , void * exinf )
{
     /* 処理 */
     tk_ext_tsk () ; またはtk_exd_tsk () ;	/* タスクの終了*/
}

タスクの終了には、tk_ext_tsk() または tk_exd_tsk() いずれかのAPIを使用する必要がある。これらのAPIを呼びことなく、タスクの処理関数が終了した場合の動作は保証しない。

タスクの処理ルーチンの実行開始時のマイコンの状態は、各ハードウェアの実装仕様書を参照のこと。

5.4. タスクのスタック

本OSでは、すべてのタスクは特権モードで実行されるので、保護レベル0とみなし、タスクのスタックはタスク毎に一つとする。ユーザスタックとシステムスタックは独立には実装されない(プロファイルTK_HAS_SYSSTACKはFALSEとなる)。 スタックのサイズは、タスク生成時にユーザから指定される。

5.5. タスクのコンテキスト情報

タスクの実行がプリエンプトされると、タスクのスタック上にコンテキスト情報が保存される。具体的な内容は各ハードウェアの実装仕様書を参照のこと。

6. 時間管理機能

6.1. システム時刻管理

6.1.1. システムタイマ

本実装ではシステム時刻管理のために、マイコン内蔵のタイマの一つをシステムタイマとして使用する。 システムタイマのティック時間は、コンフィグレーションCNF_TIMER_PERIODで設定する。単位は1ミリ秒であり、設定範囲はハードウェア依存である。ティック時間の標準の設定値は10ミリ秒である。 本実装ではマイクロ秒の時間管理には対応しない。プロファイルTK_SUPPORT_USECはFALSEである。 システムタイマの具体的な実装は、各ハードウェアの実装仕様書を参照のこと。

6.2. タイムイベントハンドラ

6.2.1. タイムイベントハンドラ属性

ハンドラはC言語で記述されていることを前提とし、タイムイベントハンドラのハンドラ属性にTA_ASM属性を指定することはできない。TA_HLNG属性のみを許す。ハンドラ生成時にTA_ASM属性が指定された場合はエラーE_RSATRとする。

6.2.2. タイムイベントハンドラの実行状態

タイムイベントハンドラは、OSのシステムタイマの割込み処理から実行される。よって、タイムイベントハンドラは非タスク部のコンテキストで実行される。

タイムイベントハンドラの実行中は、原則として、タスクと同様にすべての割込みを受け付ける。ただし、TA_STA属性の周期ハンドラで周期起動位相(cycphs)が0の場合は、API(tk_cre_cyc)の処理内で、最初の周期ハンドラの実行が行われる。この場合は、OSのクリティカルセクション内でハンドラが実行されるため、割込みは禁止となる。 具体的な実装は、各ハードウェアの実装仕様書を参照のこと。

7. その他の実装仕様

7.1. システムコール

本実装では、システムコールの呼び出し形式は、C言語の関数呼び出しのみとする。ソフトウェア例外(SVC例外)による呼出しには対応しない。 プロファイルTK_TRAP_SVCはFALSEである。

7.2. マイクロ秒のサポート

本実装では、マイクロ秒単位の時間指定可能なAPIはサポートしない。 プロファイルTK_SUPPORT_USECはFALSEである。

7.3. サブシステム

本実装では、サブシステムはサポートされない。 プロファイルTK_SUPPORT_SUBSYSTEMおよびTK_SUPPORT_SSYEVENTはFALSEである。

7.4. μT-Kernel2.0互換機能

本実装では、μT-Kernel3.0仕様からは除外されたランデブ機能を、μT-Kernel2.0互換機能としてソースコードに残す。ただし、今後実装から削除される可能性があるので、使用は推奨しない。 μT-Kernel2.0互換機能は、コンフィギュレーションのUSE_LEGACY_APIを1に設定すると有効となる。コンフィグレーションの初期設定は0(無効)である。

7.5. 物理タイマ機能

物理タイマ機能は、コンフィギュレーションのUSE_PTMRを1に設定すると有効となる。コンフィグレーションの初期設定は1(有効)である。 ただし、物理タイマ機能の対応は各ハードウェアへの実装に依存する。詳細は各ハードウェアの実装仕様書を参照のこと。

7.6. デバイスドライバ

本実装では、基本的なデバイスドライバをサンプルコードとして提供する。詳細は「μT-Kernel 3.0デバイスドライバ説明書」を参照のこと。

7.7. T-Monitor互換ライブラリ

7.7.1. 概要

T-Monitorは、T-Kernel1.0の標準開発環境であったT-Engineのモニタプログラムである。μT-Kernel2.0以降の開発環境にはT-Engineを使用せず、またT-MonitorはμT-Kernelの仕様には含まれていない。 本実装ではT-Monitorの一部の機能を主にデバッグ用途として、T-Monitor互換ライブラリの形で提供する。

7.7.2. ライブラリの有効化

T-Monitor互換ライブラリは、コンフィグレーションUSE_TMONITORを有効(1)に設定すると使用可能となる。OSの起動処理の中でライブラリの初期化が行われる。 また、コンフィグレーションUSE_SYSTEM_MESSAGEを(1)に設定すると、OSの起動メッセージなどが、T-Monitorのコンソールに出力される。 コンフィグレーションUSE_EXCEPTION_DBG_MSG を有効(1)に設定すると、暫定的な例外ハンドラのデバッグ出力が、T-Monitorのコンソールに出力される。 コンフィグレーションの初期設定はすべて有効(1)である。

7.7.3. 対応API

以下の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仕様には存在せず、本ライブラリにて追加したものである。

7.7.4. コンフィギュレーション

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を指定した場合はバッファを確保しない

7.7.5. コンソール入出力

APIによるコンソール入出力の具体的な仕様は、各ハードウェアの実装仕様書を参照のこと。

8. コンフィギュレーション

8.1. 基本コンフィグレーション

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: 有)

8.2. 機能コンフィギュレーション

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

9. デバッグサポート機能

9.1. デバッグサポート機能の有効化

デバッグサポート機能は、コンフィギュレーションのUSE_DBGSPTを1に設定すると有効となる。コンフィグレーションの初期設定は0(無効)である。 また、DSオブジェクト名を使用するにはコンフィギュレーションUSE_OBJECT_NAMEを1(有効)に設定する。コンフィグレーションの初期設定は0(無効)である。

9.2. 対応するデバッグ機能

本実装はμ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を有効にした場合のみ使用可能となる。

10. 変更履歴

版数 日付 内容
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 ・初版

以上