= TOPPERS/JSPカーネル ユーザズマニュアル = (M16C ターゲット依存部) (Release 1.4.4対応,最終更新: 20-May-2011) ------------------------------------------------------------------------ TOPPERS/JSP Kernel Toyohashi Open Platform for Embedded Real-Time Systems/ Just Standard Profile Kernel Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory Toyohashi Univ. of Technology, JAPAN Copyright (C) 2003-2004,2007,2010,2011 by Naoki Saito Nagoya Municipal Industrial Research Institute, JAPAN Copyright (C) 2003-2004 by Platform Development Center RIOCH COMPANY,LTD. JAPAN 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation によって公表されている GNU General Public License の Version 2 に記 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 利用と呼ぶ)することを無償で許諾する. (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 権表示,この利用条件および下記の無保証規定が,そのままの形でソー スコード中に含まれていること. (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 の無保証規定を掲載すること. (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 用できない形で再配布する場合には,次のいずれかの条件を満たすこ と. (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 作権表示,この利用条件および下記の無保証規定を掲載すること. (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 報告すること. (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 本ソフトウェアは,無保証で提供されているものである.上記著作権者お よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. ------------------------------------------------------------------------ 1. M16C ターゲット依存部の概要 1.1 ターゲットシステム M16C ターゲット依存部は,ターゲットシステムとして オークス電子株式会社の OASKS16 及び OAKS16-MINI をサポートしている. OAKS16 はプロセッサとして M30620FCAFP-CPU を,OAKS16-MINI は M30262F8FG-CPUを搭載している. 1.2 開発環境と実行環境 開発環境は,ルネサスエレクトロニクス社製の開発ツールを使用する. ビルド管理の方法として,2つの形態を用意している. ひとつは,ルネサスエレクトロニクス社製の統合開発環境 TM を使用して 開発を行う方法である. もうひとつは,DOS窓から make コマンドを用いて開発を行う方法である. ただし,この方法は以下の条件が必要である. ・OAKS16 ターゲット依存部で開発を行う場合にのみ利用可能 ・開発ツール NC30WA がライブラリアンを利用可能な版であること  (最近の無償評価版コンパイラはこの条件を満たしている) ・perl が利用できること 開発環境の詳細に関しては,tools/M16C-RENESAS ディレクトリ中の README.txt を参照のこと. 実行環境は Windows がインストールされていて,かつ,シリアルポートを 搭載したPC があれば,プログラムのビルドおよびボード上での実行が可能である. 1.3 サポートする機能の概要 ターゲット依存とされている機能に対するサポート状況は以下の通り. ・性能評価用システム時刻参照機能 (vxget_tim) : サポート ・割込みマスクの変更・参照 (chg_ixx, get_ixx):未サポート ・割り込みの禁止と許可(dis_int,ena_int):未サポート 1.4 他のターゲットへのポーティング M16C は CPU上に多くのデバイスが実装されており,SFR という形式で 統一化されている.そのため M16C シリーズの CPU を搭載するボードであれば, ポーティングは容易に出来ると思われる. 1.5 シリアルポート ターゲットボードには UART1 ポートが実装されており,また UART0 ポートが 拡張可能となっている.ターゲット依存部のシリアルドライバでは 2つのポート が必要に応じて利用可能となっている. なお,OAKS16-MINI 版のシリアルドライバは,RAMサイズが 2KBという制約のため XON/XOFF 及びエコー等の機能には対応していない. シリアルポートの設定を以下に示す. ・ボーレイト,19200[bps]. ・データ長,8 ビット. ・ストップビット,1 ビット. ・パリティなし. 1.6 対象とするソースコードの文字コード TOPPERSプロジェクトから公開される TOPPERS/JSP カーネルのパッケージは, 文字コード及び改行コードが EUC+LF 及び SJIS+CRLF の 2つのパターンの パッケージが存在する.EUC+LF版のパッケージでもダウンロードして展開後, 文字コード変換すれば使用可能と思われるが,M16C依存部を利用する場合は, SJIS+CRLF のパッケージをダウンロードすることを推奨する. 2. M16C プロセッサ依存部の機能 この節では,カーネルおよびシステムサービスの機能の中で,M16C依存の部分 について解説する. 2.1 データ型 int 型と unsigned int 型のサイズは 16ビットである.また,_int64_ には 対応していない. ポインタに関して,M16C では16ビット長の near ポインタ及び 32ビット長の far ポインタが存在する.near ポインタは RAM 及びデバイスのポート領域である SFR(Special Function Register) をアクセスする為のポインタである. 一方,far ポインタは near ポインタでアクセス可能な領域に加え ROM 領域までアクセスが可能なポインタである. このようにサイズが異なる2種類のポインタが存在するため,ユーザプログラム を作成する場合,ポインタのサイズを意識する必要がある. μITRON 4.0 仕様のデータ型の定義に関し,今回のポーティングでは VP を near ポインタ,VP_INT を far ポインタとしている. また,size_t 型のデータサイズについては,ルネサスエレクトロニクス製 Cコンパイラ NC30WA V.5.40 Release00 以降の版では32ビットであるが, それより前の版のコンパイラでは16ビットと,既定サイズが異なるため, 注意が必要である. 2.2 割込み管理機能と割込みハンドラ M16C のCPUロック状態の実装はフラグレジスタ中の割込み許可フラグ(Iフラグ) を用いて行う.CPUロック状態では Iフラグが 0 に設定され,ハードウェア マスカブル割込みは禁止(受付が保留)される.CPUロック解除状態では Iフラグ が 1 に設定され,(割込み優先度レベル(IPL)の値にもよるが,)マスク可能な 割込み要求の受付が可能となる. M16C 依存部におけるカーネル管理外の割込みは,NMI のみである. DEF_INH で指定する割込みハンドラ番号(inhno)は,M16Cでのソフトウェア 割込み番号を表し,そのデータ型(INHNO)は char型に定義されている. M16C プロセッサでは,割込みの入口処理のアドレスを割込みベクタで指定する. 割込みベクタは可変ベクタ及び固定ベクタから構成され,そのうち可変ベクタ については VECTOR_ADR (start.a30) で指定されたアドレスへ静的に配置される. 本開発環境では,コンフィギュレーションにより生成された kernel_cfg.c の 内容を解析し,割込みベクタを生成するユーティリティを用意している. このユーティリティは m16cvec.exe という名称で utils/m16c-renesas ディレクトリに置かれ,前処理された kernel_cfg.c の内容を解析して 割込みベクタ定義ファイル m16cvec.incを生成する. m16cvec.inc ファイルは CPU のスタートアップモジュールである start.a30 からインクルードされる. なお,DEF_INH の割込みハンドラ番号として未定義の範囲の値を指定した場合, その DEF_INH で指定した関数が,定義されていない割込み用の割込みハンドラ として使われるように,設定される. そのため,この方法を使えば,ユーザは未定義の(つまり,DEF_INH で定義して いない)割込みが発生した場合のハンドラを設定することができる. 2.3 CPU 例外管理機能と CPU 例外ハンドラ DEF_EXC で指定する例外ハンドラ番号(excno)は,M16Cでのソフトウェア割込み 番号を表し,そのデータ型(EXCNO)は char 型に定義されている. CPU例外として,ハードウェアノンマスカブル割込みとソフトウェアノンマスカ ブル割込みがある.ハードウェアノンマスカブル割込みについては, リセットを除き,割込みベクタの設定が可能である. CPU例外ハンドラに対応するベクタは,割込みハンドラの際と同様に m16cvec.exe を用いて m16cvec.inc に設定する. なお,CPU例外ハンドラ番号として未定義の値を設定した場合は, 定義されていないCPU例外ハンドラのハンドラとして設定される. そのため,ユーザは未定義のCPU例外が発生した場合のハンドラを 設定することができる. 2.4 スタートアップモジュール M16C 依存部のスタートアップモジュール (start.a30) は次に示す初期化を実行 した後,カーネル (kernel_start) を起動する.ただし,kernel_start から 戻ってくることは想定していない.電源投入直後に起動されるスタートアップ モジュールの開始番地は m16cvec.inc のベクタ定義より _hardware_start と されているが,それが配置されるアドレス値はリンク時に決定される. (1) スタックポインタの設定 (2) CPU関連の初期設定 プロセッサモードの設定とクロックの設定を行う. (3) hardware_init_hook の呼出し(未実行) M16Cアセンブラは,C言語コンパイラと同期を取ったプリコンパイル処理がで きない.hardware_init_hook の判定ができないため対応していない. 実際,M16Cのハードウェア設定に関しては,sys_initialize()関数中で行って も十分に対応できると考えられるのでそちらで対応していただきたい. (4) bssセクションと dataセクションの初期化 bssセクションをゼロクリアする.また,dataセクションを初期化する. (5) software_init_hook の呼出し software_init_hook の値が 0 でなければ,software_init_hook を呼び出す. software_init_hook はカーネル起動前に,ソフトウェア環境 (ライブラリ等) 依存の初期化を行うために用意されている. software_init_hook の定義は cpu_config.c 中で行う.既定では 0 に仮設定 されている.独自に別の場所で software_init_hook を定義する場合,マクロ として EXTERNAL_SOFT_HOOK を定義する.そのようにすれば,元の変数定義は 含まれなくなるため,外部での設定が可能となる. 例えば,ライブラリの初期設定などを行いたい場合は,外部からの変数定義を 行うことが可能となる. (6) カーネルの起動 kernel_start へ分岐し,カーネルを起動する.kernel_start からリターンし てくることは想定していない. 2.5 割込み発生時のスタック使用量について カーネル起動,及び,割込み発生時はタスク用のスタックとは別の割込み専用の スタックを使用している.このスタック領域は RAMEND というマクロで 指定されたアドレスから低位方向に向かうメモリ上の領域に確保される. そのため,システム起動時にはこの領域を確保する必要がある. 割込みネストレベルが 0(つまり,タスク実行中)で割込みが発生すると, タスクコンテキスト用スタックにレジスタを保存した後,割込み用スタックに スタックを切り替える.そのため,タスクコンテキスト用スタックには 汎用レジスタ,フラグ,PC など 20バイトの領域が余分に必要となる. 割込みネストレベルが 1 以上の状態 (つまり,非タスクコンテキスト)で 割込み要求が受け付けられた場合,割込みスタックにレジスタが保存される. これには割込み発生毎に20バイトずつ必要である.それに加え,それぞれの 割込み処理ルーチンで使用されるスタックサイズが必要となる. 3. システム依存部の機能 3.1 システムクロックドライバ システムクロックドライバが isig_tim を呼び出す周期は,sys_defs.h の中の TIC_NUME と TIC_DENO で定義されている(標準は 1ミリ秒周期). この定義を変更することで,isig_tim を呼び出す周期を変更することができる. ただし,タイマの精度が1μ秒であるため,1μ秒単位で端数になる値を設定した 場合には,isig_timの呼出し周期に誤差が生じることになる. 3.2 性能評価用システム時刻参照機能 M16Cでは,性能評価用システム時刻参照機能 (vxget_tim) をサポートしている. OAKS16 では精度 0.0625[us],OAKS16-MINIでは精度 1.6[us]である.SYSUTIM 型は UW 型 (32 ビット符号なし整数型) である. 3.3 シリアルインタフェースドライバ OAKS16,OAKS16-MINI では UART0 と UART1 の 2つのシリアルポートが ボード上に実装できる.このうちコネクタが実装された UART1 を ログ出力用に使用している. 3.4 メモリマップ 3.4.1 OAKS16のメモリマップ (1) 実行環境 0x00000 - 0x003ff SFR領域 0x00400 - 0x02bff 内臓 RAM,data_NE,data_NO,bss_NE,bss_NO 0xe0000 - 0xffdff 内蔵 ROM,program,rom_FE,rom_FO,data_NEI, data_NOI 0xffe00 - 0xfffdb 内蔵 ROM,ハード,ソフト割込みベクタ領域 (vector) 0xfffdc - 0xfffff 内蔵 ROM,ハードCPU例外ベクタ領域(fvector) 3.4.2 OAKS16-MINIのメモリマップ (1) 実行環境 0x00000 - 0x003ff SFR領域 0x00400 - 0x00bff 内臓 RAM,data_NE,data_NO,bss_NE,bss_NO 0xe0000 - 0xffdff 内蔵 ROM,program,rom_FE,rom_FO,data_NEI, data_NOI 0xffe00 - 0xfffdb 内蔵 ROM,ハード,ソフト割込みベクタ領域 (vector) 0xfffdc - 0xfffff 内蔵 ROM,ハードCPU例外ベクタ領域(fvector) 4. 開発 4.1 開発環境の構築 開発環境は,Windows XP (Service Pack 3)で動作確認した. 構築環境はルネサスエレクトロニクス社製の開発環境を用いる. ビルド管理方法として,以下の 2つがある. (1) ルネサスエレクトロニクス社製の統合開発環境 TM を使用した環境 対象:OAKS16ボード,OAKS16-MINIボード 方式:ルネサスエレクトロニクス社の統合開発環境 TM V3.20 を用いて構築する. その際,カーネル部をライブラリ化せず構築する 動作確認コンパイラ: NC30WA Version 5.45 Release 1 無償評価版 NC30WA Version 5.10 Release 1 Entry版 注)2011年5月時点での最新版(NC30WA Version 6.00 Release 00) は ツールの仕様変更により現時点では対応していない. (2) DOS窓から make コマンドを用いて開発を行う環境 対象:OAKS16 ボード 方式:DOS窓からmakeを使って構築 カーネル部をライブラリ化して構築する 動作確認コンパイラ: NC30WA Version 5.45 Release 1 無償評価版 その他必要ツール GNU make (version 3.80 で動作確認済) Perl (動作確認は Active Perl v5.6.1 及び v5.12.2で行った) ただし,いずれの場合も NC30WA のインストール先には注意が必要である. 最近の版では規定値として C:\Program Files 以下にインストールされるが, TM 及び make はパス文字列中に空白が含まれる場合,正しく動作しない. そのため,インストール先パスが空白を含まないようにする必要がある. また,ソースの展開位置とツールのインストール先とが異なるドライブに 配置されている構成も,正常に動作しない場合があるため,推奨しない. 4.2 統合開発環境TMを用いた構築 OAKS16 フルキットまたは OAKS16 MINI フルキットに添付の開発環境を用いて M16C用の TOPPERS/JSP カーネルを構築する.実行は,FlashROM 書き込み ツール FlashSta を用い,構築した MOT ファイルをボード上のフラッシュ ROM へ書き込むことにより行う. したがって,統合開発環境 TM,コンパイラ NC30WA,フラッシュROM 書き込み ツール FlashSta もインストールする必要がある. また,ターゲットプログラムの構築には,開発ホスト上で動作する, コンフィギュレータ cfg/cfg.exe 及び M16Cターゲット特有のユーティリティ プログラム utils/m16c-renesas/{m16cvec.exe, m16coffset.exe} も用いる. これらのプログラムはコンパイル済みのものが用意されているが, プログラムを変更したい場合は再構築する必要がある. 4.2.1 ツールの構築 cfg.exe の構築については user.txt などを参照のこと. utils/m16c-renesas 上のツール m16coffset.exe と m16cvec.exe を 構築する場合,MinGW (Minimalist GNU for Windows)を使用する. (ちなみに,cfg.exe のビルドも MinGW で対応可能である) 通常は既にコンパイル済みのものが用意されているため,そちらを 利用すればよい. MinGW (Minimalist GNU for Windows) http://www.mingw.org/ http://sourceforge.net/projects/mingw/ (インストーラの入手先) 4.2.2 TM にプロジェクトを選択しビルドする. (1) プロジェクト設定ファイルの変更 注:場合によっては本節(1)の書き換えを行わなくてもツールがパスの設定を 自動的に行う場合があるため,問題が生じたときに書き換えを行えばよい. tools/M16C-RENESAS 以下にある,TM のプロジェクト設定ファイル Jsp14sample1.tmi,Jsp14sample1.tmk,Jsp14sample1m.tmi,Jsp14sample1m.tmk の設定内容には絶対パス指定が行われている箇所がある. その部分が現在の tools/M16C-RENESAS ディレクトリの絶対パスと異なる場合は, TM を使ってプロジェクトの設定を行う前に,エディタを使って絶対パスの設定を 書き換える.以下にJsp14sample1.tmiとJsp14sample1.tmkの例を示す. ---Jsp14sample1.tmi --- [PROJECT] ProjectName=Jsp14sample1 WorkingDirectory=C:\usr\TOPPERS\jsp-1.4\tools\R16C-RENESAS <-絶対パス OutputDirectory=. ProjectFile=C:\usr\TOPPERS\jsp-1.4\tools\R16C-RENESAS\Jsp14sample1.tmk <-絶対パス ProjectInfoFile=C:\usr\TOPPERS\jsp-1.4\tools\R16C-RENESAS\Jsp14sample1.tmi <-絶対パス TargetName=M16C Family Type=1 GoalFile=C:\usr\TOPPERS\jsp-1.4\tools\R16C-RENESAS\Jsp14sample1.x30 <-絶対パス [NC] Name=NC30WA Version=V.4.00 Release 2 : ---Jsp14sample1.tmk --- #################################################################### # Makefile for TM V.3.20 # Copyright 1998-2002 MITSUBISHI ELECTRIC CORPORATION # AND MITSUBISHI ELECTRIC SEMICONDUCTOR APPLICATION ENGINEERING CORPORATION # All Rights Reserved. # # Notice : Don't edit. # Date : 2004 01(January) 10(Saturday) PM.03.11 # Project : Jsp14sample1 #################################################################### DELETE = @-del LNLIST = $(PROJECT).cmd PRJDIR = C:\usr\TOPPERS\jsp-1.4\tools\R16C-RENESAS <-絶対パス LMC = LMC30 CC = NC30 : (2) プロジェクトのオープン (2-1) Windows メニューから TM を起動する. (2-2) TM が起動したら「Open Project」メニューを開く. (2-3) tools/M16C-RENESAS ディレクトリ中の Jsp14sample1.tmk または Jsp14sample1m.tmk を選択する. OAKS16用の構築を行う場合は,Jsp14sample1.tmkを,OAKS16 MINI用の構築を 行う場合は,Jsp14sample1m.tmk を選択する. (2-4) 選択時,コンパイラの違いにより設定メニューが表示される場合がある. この環境は,NC30WA コンパイラの Version 5.10 Entry 版及び Version 5.45 にて評価を行っている.現在の環境にしたがって設定する. (3) プリプロセッサの指定 ビルド過程でプリプロセッサを使用するため,開発環境がインストールされた 場所に応じて CPP という名前のマクロを変更する. (3-1) TM から Project Editor を起動する. (3-2) 表示されるウィンドウのメニューで「プロジェクト → マクロブラウザ」 を選択する. (3-3) CPP という名前のマクロを,開発環境のインストール先に応じて編集する. ここには cpp30.exe という実行ファイルのフルパス名を設定する. (4) プロジェクトのビルド (4-1) 設定後,「リビルド」メニューを選択しビルドを行う. ビルドが完了すると,このディレクトリ中に Jsp14sample1.mot または Jsp14sample1m.mot という名称のファイルが生成される. TMの設定としてソースファイルの依存性の設定を行っていないので, 構築時は「リビルド」でビルドすることを推奨する. 4.2.3 FlashStaを用いてフラッシュROMに書き込む 開発用のパソコンとボードとを,RS-232Cケーブルを使って接続する. CNVSS ピンをジャンパーピンを使ってショートさせる. 電源を接続し,電源スイッチをオンにする.そして FlashStaを起動する. Select Programメニューにてポートを選択して「OK」ボタンを押下する. ID Checkメニューが表示されたら「Refer..」ボタンを押下し, 生成したMOTファイルを選択する. Select Program に戻ったら,「OK」ボタンを押下し M16C Flash Start メニューが表示する. まず,「Erase」ボタンを押下し,フラッシュROMをクリアする. その後,「Program..」ボタンを押下しプログラムの書き込みを行う. 書き込みが終了したら,「Exit」ボタンを押下しFlashStaを終了させる. 電源を切り,CNVSSピンからジャンパーピンを外す. 4.2.4. sample1の実行 パソコンにシリアル・ターミナルを立ち上げる. 設定は以下の通り. Baud rate:19200 Data:8 bit Parity:none Stop:1 bit Flow controlはOAKS16 MINIではnone,OAKS16ではnoneでもXob/Xoffのどちらかに 設定すること.電源を入れると,sample1が実行される. 4.3 DOS窓からmakeコマンドを用いた構築 GNU make を用いてM16C用のTOPPERS/JSPを構築する方法を示す. この方法は OAKS16 の場合のみ対応している. コンパイラはライブラリアンを含む NC30WAの版を前提としている. 現在では,ルネサスエレクトロニクスのウェブサイトから無償評価版が入手可能である. 過去のコンパイラの Entry版ではライブラリアン lb30.exe が含まれないことが あるため,そのままビルドすることが出来ない.その場合はライブラリ化 しないように Makefile (実際のファイル名は sample ディレクトリの Makefile.m16c-oaks16 ) を書き換える必要がある. 構築にあたっては,コンフィギュレータ cfg.exe が cfg ディレクトリに, 4.2.1 で示したツール,すなわち m16coffset.exe および m16cvec.exe が utils/m16c-renesas ディレクトリに,それぞれ存在していることが前提となる. 通常は用意されているものを利用すればよい. また,開発ツール NC30WAはあらかじめインストールしておくことが必要である. 4.3.1 開発ツールの入手 ツールは以下のサイトから入手可能. GNU Make http://www.mingw.org/ Active Perl http://www.activestate.com/ 4.3.2 サンプルプログラムの構築方法について サンプルプログラムの構築方法は基本的に doc/user.txt の 「7.4 サンプル プログラムの構築」で示された方法に準拠している.ただし,コンフィギュレ ーションスクリプト等の perl で書かれたスクリプトはそのまま Windows の DOS窓(WindowsXPでは「コマンドプロンプト」)の上では使用することが できない.そのため,utils/m16c-renesas ディレクトリに用意された, 専用の Perlスクリプトを使用する. 4.3.3 コンフィギュレーションスクリプトの実行 > mkdir OBJ > cd OBJ > perl ..\utils\m16c-renesas\configure.m16c 何も引数を指定しない場合は -C m16c -S oaks16 -T renesas -p \perl\bin\perl というオプションを指定して configure を実行した場合と同じ動作を行う. この処理により,カレントディレクトリには以下のファイルが生成される ・Makefile ・サンプルプログラム用のコンフィギュレーションファイル(sample1.cfg) ・サンプルプログラム本体(sample1.hおよびsample1.c) ここでMakefileの修正が必要ならば,修正を行うのは他のターゲットの場合と同じである. 4.3.4 依存関係ファイルの生成およびサンプルプログラムのロードモジュール作成 依存関係ファイル Makefile.depend およびロードモジュール jsp.mot を作成する には次のように実行する.MinGW の make を利用する場合,make の代わりに mingw32-make を実行する必要があるかもしれない. > make depend > make make depend の実行過程においてプリプロセッサ(cpp30.exe)を用いるが, ツールのインストール先に応じて,プリプロセッサコマンドのフルパス名を 適切に設定する必要がある. 設定はプロセッサ依存部ディレクトリ(config/m16c-renesas)にある Makefile.config の中の CPP という変数で行っている.この部分をインストール場所に応じて書き換える. 4.3.5 フラッシュROM への書き込みおよびサンプルプログラムの実行 構築した MOTファイルを FlashSta コマンド用いて,ボード上のフラッシュROMに 書き込む手順から先は上記 4.2.3,4.2.4で説明した内容と同じである. 4.3.6 OAKS16-MINIの対応について OAKS16-MINI 用のカーネルを構築する場合は,Makefile.m16c-oaks16_mini を 使用する.OAKS16-MINI版のカーネルでは,メモリサイズ削減の為に, ログ機能はタスク化していない.そのため,コンフィギュレーション・ファイルを 修正する必要がある.sample1.cfg 中の28行目の 「#include "@(SRCDIR)/systask/logtask.cfg"」のの行を削除するか, またはコメント化してログ機能がタスク化しないよう修正を行った後,ビルドする. 他の手順はOAKS16版と同様である. 4.4 デバッガ OAKS16 および OAKS16-MINI には,KD30 デバッガが添付されている. このデバッガはフラッシュ ROM 上の KD30 モニターと UART1 を用いて 通信を行いデバッグ機能を実現する.本カーネルはフラッシュROM 上に 書き込みを行い実行する.カーネルを書き込む際,既存のモニタープログラムを 上書きする為,カーネル実行時は KD30 デバッカは使用できない. 再び KD30 を使いたい場合は,KD30 付属のモニタプログラムをフラッシュ ROM へ書き込む必要がある. なお,本カーネルは TOPPERS 教育 WG で開発された「TOPPERS初級実装セミナー」 の教材に対応している.その為,教材で使用している「タスク・モニター」と 併用することにより,TOPPERS/JSP 実行中のメモリ及び SFR の参照や設定, タスクの管理や状態表示が可能となる.必要な場合は「タスク・モニター」との 併用を勧める. 4.5 コンパイルスイッチ 以下のコンパイルスイッチの設定が可能である. (1) NEED_API コンパイル時,NEED_API をマクロ定義すると api.h が cpu_config.h にインクルード される.これにより,ライブラリ化の為の分割コンパイルを抑止することができる. (2) EXTERNAL_SOFT_HOOK コンパイル時,EXTERNAL_SOFT_HOOKをマクロすると software_init_hook が ターゲット依存部で定義されなくなる.従って,ユーザ側でsoftware_init_hook の定義を与えることができる. (3) MON アセンブル時に値の定義を行う.通常は MON=0 として構築する. MON=1 とするとタスク切り替え時にタスクモニタリング用の関数呼び出しを行う ようになる.これは教育用のタスクモニタと併用する場合にこの設定を行う. 5. ファイル構成 5.1 ディレクトリ・ファイル構成 (1) config/m16c-renesas api.h 非ライブラリ化時のAPI定義 cpu_config.c M16Cプロセッサ依存部の C 関数 cpu_config.h M16Cプロセッサ依存部の構成定義 cpu_context.h M16Cプロセッサ依存部のコンテキスト操作 cpu_defs.h M16Cプロセッサ依存部のアプリケーション用定義 cpu_insn.h M16Cプロセッサのアセンブリ inline 関数 cpu_rename.def カーネルの内部識別名のリネームとその解除の定義リスト cpu_rename.h カーネルの内部識別名のリネームの定義 cpu_support.a30 M16Cプロセッサのアセンブリ関数 cpu_unrename.h カーネルの内部識別名のリネーム解除の定義 Makefile.config Makefile の M16C依存定義 makeoffset.c offset.inc 生成サポート関数 start.a30 スタートアップモジュール tool_config.h M16Cプロセッサの開発環境依存モジュール定義 tool_defs.h M16Cプロセッサの開発環境依存定義 (2) config/m16c-renesas/oak16/ hw_serial.cfg SIOドライバのコンフィギュレーションファイル hw_serial.h OAKS16用SIOドライバのヘッダファイル hw_timer.h OAKS16用タイマ操作ルーチン Makefile.config Makefile の OAKS16ボード依存定義 Makefile.kernel カーネルのファイル構成の定義(M16C用) oaks16.h M30620FCAFPプロセッサの定義 sfr_uart.c OAKS16用SIOドライバのC関数 sfr_uart.h OAKS16用SIOドライバのヘッダファイル sys_config.c OAKS16ボード依存部の C 関数 sys_config.h OAKS16ボード依存部の構成定義 sys_defs.h OAKS16ボード依存部のアプリケーション用定義 sys_rename.def カーネルの内部識別名のリネームとその解除の定義リスト sys_rename.h カーネルの内部識別名のリネームの定義 sys_unrename.h カーネルの内部識別名のリネーム解除の定義 (3) config/m16c-renesas/oaks16_mini/ hw_serial.cfg SIOドライバのコンフィギュレーションファイル hw_serial.h OAKS16-MINI用SIOドライバ hw_timer.h OAKS16-MINI用タイマ操作ルーチン Makefile.config Makefile の OAKS16-MINIボード依存定義 Makefile.kernel カーネルのファイル構成の定義(M16C用) oaks16mini.h M30262F8FGプロセッサの定義 serial_mini.c 簡略型OAKS16-MINI用シリアルドライバー sys_config.c OAKS16-MINIボード依存部の C 関数 sys_config.h OAKS18-MINIボード依存部の構成定義 sys_defs.h OAKS16-MINIボード依存部のアプリケーション用定義 sys_rename.def カーネルの内部識別名のリネームとその解除の定義リスト sys_rename.h カーネルの内部識別名のリネームの定義 sys_unrename.h カーネルの内部識別名のリネーム解除の定義 syslog_mini.c 簡易型システムログプログラム (4) sample/ Makefile.m16c-oaks16 ライブラリ型 OAKS16用JSP を構築するための make ファイル (5) その他 tools/M16C-RENESAS/ utils/m16c-renesas/ これらについては,tools/M16C-RENESAS/README.txt を参照のこと.