OSDN Git Service

カーネルのターゲット非依存部1.7.0およびCFGをマージ
authorsuikan <suikan@users.sourceforge.jp>
Mon, 11 Jul 2011 14:57:48 +0000 (14:57 +0000)
committersuikan <suikan@users.sourceforge.jp>
Mon, 11 Jul 2011 14:57:48 +0000 (14:57 +0000)
14 files changed:
asp/doc/asp_spec.odt [deleted file]
asp/doc/asp_spec.txt
asp/doc/configurator.odt [deleted file]
asp/doc/configurator.txt
asp/doc/design.odt [deleted file]
asp/doc/design.txt
asp/doc/extension.txt
asp/doc/extention.odt [deleted file]
asp/doc/migration.txt [deleted file]
asp/doc/porting.odt [deleted file]
asp/doc/porting.txt
asp/doc/user.odt [deleted file]
asp/doc/user.txt
asp/doc/version.txt

diff --git a/asp/doc/asp_spec.odt b/asp/doc/asp_spec.odt
deleted file mode 100644 (file)
index 222d4c6..0000000
Binary files a/asp/doc/asp_spec.odt and /dev/null differ
index 239fcbc..2ee3657 100644 (file)
@@ -1,8 +1,8 @@
 
                TOPPERS/ASPカーネルの仕様概要
 
-               対応バージョン: Release 1.6
-               最終更新: 2010年7月25
+               対応バージョン: Release 1.7
+               最終更新: 2011年3月31
 
 このドキュメントは,TOPPERS/ASPカーネルの仕様概要について説明したもので
 ある.μITRON4.0仕様のスタンダードプロファイルに対する拡張および変更箇
@@ -13,7 +13,7 @@
      Toyohashi Open Platform for Embedded Real-Time Systems/
      Advanced Standard Profile Kernel
 
- Copyright (C) 2005-2010 by Embedded and Real-Time Systems Laboratory
+ Copyright (C) 2005-2011 by Embedded and Real-Time Systems Laboratory
              Graduate School of Information Science, Nagoya Univ., JAPAN
  
  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
@@ -45,7 +45,7 @@
  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
  の責任を負わない.
  
- $Id: asp_spec.txt 1862 2010-07-25 11:49:51Z ertl-hiro $
+ $Id: asp_spec.txt 2050 2011-04-03 02:37:44Z ertl-hiro $
 ----------------------------------------------------------------------
 
 ○前提となる文書
@@ -58,9 +58,6 @@
 [3] TOPPERSプロジェクト: TOPPERS/JSPカーネル ユーザズマニュアル
        Release 1.4.3対応, 最終更新: 2007年4月23日.
 
-[4] TOPPERSプロジェクト: TOPPERS標準割込み処理モデル, 最終更新: 2008年
-       4月11日.
-
 ○仕様の概略
 
 TOPPERS/ASPカーネルの仕様は,μITRON4.0仕様のスタンダードプロファイルを
@@ -224,6 +221,11 @@ sta_cycを呼び出した後,最初に周期ハンドラが起動される時
 した相対時間後としているが,ASPカーネルでは,起動位相で指定した相対時間
 後とする.
 
+(10) タスク例外処理ルーチンの実行開始条件の変更
+
+割込み優先度マスク全解除状態でない場合には,タスク例外処理ルーチンの実
+行が開始されないという仕様に変更した.
+
 ○JSPカーネルにおける独自の拡張機能
 
 JSPカーネルにおける独自の拡張機能の中で,以下の機能を実装する.
@@ -405,6 +407,8 @@ ASPカーネルでは,いくつかの拡張機能を実装するために,
 ・ミューテックス機能拡張パッケージ(優先度継承ミューテックスを除く)
 ・オーバランハンドラ機能拡張パッケージ
 ・タスク優先度拡張パッケージ
+・制約タスク拡張パッケージ
+・動的生成機能拡張パッケージ
 
 ○TOPPERS組込みコンポーネントシステム(TECS)の導入
 
@@ -412,7 +416,7 @@ ASPカーネルでは,いくつかの拡張機能を実装するために,
 システム(TECS)を導入する.また,カーネルオブジェクトをTECSのコンポー
 ネントとして扱えるようにする.
 
-なお,Release 1.6の時点では,TECSに対応するための修正は,TECSの配布パッ
+なお,Release 1.7の時点では,TECSに対応するための修正は,TECSの配布パッ
 ケージに含まれており,ASPカーネルの配布パッケージには含まれていない.
 
 以上
diff --git a/asp/doc/configurator.odt b/asp/doc/configurator.odt
deleted file mode 100644 (file)
index 3a9ac2e..0000000
Binary files a/asp/doc/configurator.odt and /dev/null differ
index 014336a..c3d32f1 100644 (file)
@@ -2,8 +2,8 @@
                TOPPERS/ASPカーネル
                コンフィギュレータ仕様
 
-               対応バージョン: Release 1.6.0
-               最終更新: 2010年6月27
+               対応バージョン: Release 1.7.0
+               最終更新: 2010年11月20
 
 このドキュメントは,TOPPERS/ASPカーネルのコンフィギュレータが標準的に生
 成すべきファイルの内容について解説したものである.ターゲット依存に生成
@@ -46,7 +46,7 @@
  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
  の責任を負わない.
  
- $Id: configurator.txt 1862 2010-07-25 11:49:51Z ertl-hiro $
+ $Id: configurator.txt 1960 2010-11-20 02:20:40Z ertl-hiro $
 ----------------------------------------------------------------------
 
 ○目次
@@ -428,7 +428,7 @@ CRE_DTQ(dtqid, { dtqatr, dtqcnt, dtqmb });
 体的には,上記の静的APIに対して,次の定義を生成する.
 
 *dtqcntが0でない場合のみ生成
-static intptr_t _kernel_dtqmb_<データキュー名>[dtqcnt];
+static DTQMB _kernel_dtqmb_<データキュー名>[dtqcnt];
 
 (4-4-2) データキューの初期化情報
 
@@ -727,7 +727,7 @@ _kernel_inthdr_<intno>(void)
        isr_1((intptr_t)(exinf_1));
        LOG_ISR_LEAVE(intno);
 
-       if (i_sense_loc()) {            /* ISRの呼出し前の状態に戻す */
+       if (i_sense_lock()) {           /* ISRの呼出し前の状態に戻す */
                i_unlock_cpu();
        }
        i_set_ipm(saved_ipm);
@@ -736,7 +736,7 @@ _kernel_inthdr_<intno>(void)
        isr_2((intptr_t)(exinf_2));
        LOG_ISR_LEAVE(intno);
 
-       if (i_sense_loc()) {            /* ISRの呼出し前の状態に戻す */
+       if (i_sense_lock()) {           /* ISRの呼出し前の状態に戻す */
                i_unlock_cpu();
        }
        i_set_ipm(saved_ipm);
@@ -864,16 +864,13 @@ const INHINIB _kernel_inhinib_table[TNUM_INHNO] = {
 ・カーネル管理外に固定されているinhnoに対して,inhatrにTA_NONKERNELが指
  定されていない場合(E_RSATR)
 ・inhnoに対応するintnoに対するCFG_INTがない場合(E_OBJ)
-       ※ inhnoに対応するintnoがないか,inhnoに対応するintnoがCFG_INTに対
-         する割込み番号として正しくない場合には,このチェックを行わない
+       ※ inhnoに対応するintnoがない場合には,このチェックを行わない
 ・inhatrにTA_NONKERNELが指定されておらず,inhnoに対応するintnoに対して
  CFG_INTで設定された割込み優先度がTMIN_INTPRIよりも小さい場合(E_OBJ)
-       ※ inhnoに対応するintnoがないか,inhnoに対応するintnoがCFG_INTに対
-         する割込み番号として正しくない場合には,このチェックを行わない
+       ※ inhnoに対応するintnoがない場合には,このチェックを行わない
 ・inhatrにTA_NONKERNELが指定されており,inhnoに対応するintnoに対して
  CFG_INTで設定された割込み優先度がTMIN_INTPRI以上である場合(E_OBJ)
-       ※ inhnoに対応するintnoがないか,inhnoに対応するintnoがCFG_INTに対
-         する割込み番号として正しくない場合には,このチェックを行わない
+       ※ inhnoに対応するintnoがない場合には,このチェックを行わない
 
 *必要に応じてターゲット依存部で検出するもの
 ・inthdrがプログラムの開始番地として正しくない場合(E_PAR)
diff --git a/asp/doc/design.odt b/asp/doc/design.odt
deleted file mode 100644 (file)
index b775529..0000000
Binary files a/asp/doc/design.odt and /dev/null differ
index c09d6dc..2eafa44 100644 (file)
@@ -2,8 +2,8 @@
                TOPPERS/ASPカーネル
                設計メモ
 
-               対応バージョン: Release 1.6.0
-               最終更新: 2010年8月1日(作成中)
+               対応バージョン: Release 1.7.0
+               最終更新: 2011年3月31日(作成中)
 
 このドキュメントは,TOPPERS/ASPカーネルの設計メモである.作成中のもので
 あり,網羅的ではない.
@@ -13,7 +13,7 @@
      Toyohashi Open Platform for Embedded Real-Time Systems/
      Advanced Standard Profile Kernel
 
- Copyright (C) 2005-2010 by Embedded and Real-Time Systems Laboratory
+ Copyright (C) 2005-2011 by Embedded and Real-Time Systems Laboratory
              Graduate School of Information Science, Nagoya Univ., JAPAN
  
  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
@@ -45,7 +45,7 @@
  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
  の責任を負わない.
  
- $Id: design.txt 1877 2010-08-01 06:49:12Z ertl-hiro $
+ $Id: design.txt 2068 2011-05-06 13:39:26Z ertl-hiro $
 ----------------------------------------------------------------------
 
 ○目次
 
 ○TOPPERS/ASPカーネルの実装設計方針
 
-TOPPERS/ASPã\82«ã\83¼ã\83\8dã\83«ï¼\88以ä¸\8bï¼\8cASPã\82«ã\83¼ã\83\8dã\83«ï¼\89ã\81¯ï¼\8cTOPPERSæ\96°ä¸\96代ã\82«ã\83¼ã\83\8dã\83«ã\81®å\9fºç\9b¤
-となるリアルタイムカーネルである.TOPPERS新世代カーネル仕様の設計方針と,
-ASPカーネルの適用対象領域と設計方針については,TOPPERS新世代カーネル統
-合仕様書に述べられている.
+TOPPERS/ASPã\82«ã\83¼ã\83\8dã\83«ï¼\88以ä¸\8bï¼\8cASPã\82«ã\83¼ã\83\8dã\83«ï¼\89ã\81¯ï¼\8cTOPPERSæ\96°ä¸\96代ã\82«ã\83¼ã\83\8dã\83«ã\81®å\87ºç\99º
+点となるリアルタイムカーネルである.TOPPERS新世代カーネル仕様の設計方針
+と,ASPカーネルの適用対象領域と設計方針については,TOPPERS新世代カーネ
+ル統合仕様書に述べられている.
 
 以下では,ASPカーネルの実装設計方針について述べるが,仕様設計方針とも関
 連しており,明確に分離できない部分もある.
@@ -159,7 +159,7 @@ TOPPERS/ASPカーネルの実装設計を行うにあたり,次の方針を設
 
 具体的には,アプリケーションとカーネルを1つのロードモジュールにリンクす
 る方法(1リンクモデル)を想定し,カーネルを関数単位でライブラリ化して,
-使ç\94¨ã\81\99ã\82\8bé\96¢æ\95°ã\81®ã\81¿ã\81\8cã\83ªã\83³ã\82¯ã\81\95ã\82\8cる構造とする.これは一種のコンフィギュレー
+使ç\94¨ã\81\99ã\82\8bé\96¢æ\95°ã\81®ã\81¿ã\82\92ã\83ªã\83³ã\82¯ã\81§ã\81\8dる構造とする.これは一種のコンフィギュレー
 ションであるが,この方法は,条件コンパイルによるコンフィギュレーション
 とは違い,検証工数に与える影響が小さい.
 
@@ -221,6 +221,18 @@ CPUロックフラグの管理はターゲット依存部に委ね,CPUロッ
 (t_get_ipm/i_get_ipm/x_get_ipm)は,ターゲット依存部で用意することと
 する.
 
+ただし,タスクコンテキストの実行中に,割込み優先度マスク全解除状態であ
+ることを効率的に判断するために,割込み優先度マスク全解除状態であること
+を示すフラグ(ipmflg)を用意する.
+
+ipmflgは,カーネルの初期化時にfalseに初期化する.非タスクコンテキストで
+は,割込み優先度マスク全解除状態になることはないため,このフラグを用い
+る必要はなく,フラグの更新も行わない.
+
+----------------------------------------
+bool_t ipmflg;
+----------------------------------------
+
 ●ディスパッチ禁止状態とディスパッチ許可状態
 
 ディスパッチ禁止フラグを管理するために,フラグ(disdsp)を用意する.
@@ -230,17 +242,24 @@ disdspは,カーネルの初期化時にfalseに初期化する.
 bool_t disdsp;
 ----------------------------------------
 
+※ disdspではなく,それを論理反転したenadspを用意した方が,ipmflgや
+dspflgとの整合性の観点からは良かった.
+
 ●ディスパッチ保留状態
 
-ディスパッチ保留状態は,非タスクコンテキストの実行中,全割込みロック状
-態,CPUロック状態,割込み優先度マスクが全解除でない状態,ディスパッチ禁
-止状態のいずれか(または,それらが重なった状態)である.
+ディスパッチ保留状態は,非タスクコンテキストの実行中,CPUロック状態,割
+込み優先度マスクが全解除でない状態,ディスパッチ禁止状態のいずれか(ま
+たは,それらが重なった状態)である.
 
-ディスパッチ保留状態でないことを効率的に判別するために,割込み優先度マ
-スク全解除状態であり,ディスパッチ許可状態である(ディスパッチ禁止状態
-でない)ことを示すフラグ(dspflg)を用意する.dspflgは,カーネルの初期
-化時にtrueに初期化する.また,割込み優先度マスクの値が変更されるか,割
-込み禁止フラグが変更される度に更新する.
+タスクコンテキストの実行中に,ディスパッチ保留状態でないことを効率的に
+判別するために,割込み優先度マスク全解除状態であり,ディスパッチ許可状
+態である(ディスパッチ禁止状態でない)ことを示すフラグ(dspflg)を用意
+する.すなわち,常に「dspflg == (ipmflg && !disdsp)」に設定する.
+
+dspflgは,カーネルの初期化時にtrueに初期化する.また,タスクコンテキス
+トにおいて割込み優先度マスクの値が変更されるか,割込み禁止フラグが変更
+される度に更新する.非タスクコンテキストでは,常にディスパッチ保留状態
+であるため,このフラグを用いる必要はなく,フラグの更新も行わない.
 
 ----------------------------------------
 bool_t dspflg;
@@ -359,7 +378,7 @@ CPUロック状態においては,上記の(1)や(2)の状況を作り出す
 スパッチ許可状態になる場合があり,その場合には,タスクディスパッチ処理
 を行う必要がある.
 
-これに加えて,カーネルの動作開始時にも,タスクディスパッチ処理を呼び出
+以上に加えて,カーネルの動作開始時にも,タスクディスパッチ処理を呼び出
 す.
 
 ●タスクディスパッチャの構造
@@ -407,12 +426,13 @@ CPUロック状態においては,上記の(1)や(2)の状況を作り出す
 
 ●タスク例外処理ルーチンの実行開始条件とシステム状態(仕様の確認)
 
-タスク例外処理ルーチンは,次の5つの条件が揃った場合に実行が開始される.
+タスク例外処理ルーチンは,次の6つの条件が揃った場合に実行が開始される.
 
  ・タスク例外処理許可状態である
  ・保留例外要因が0でない
  ・タスクが実行状態である
  ・タスクコンテキストが実行されている
+ ・割込み優先度マスク全解除状態である
  ・CPUロック状態でない
 
 また,タスク例外処理ルーチンの起動/リターン時のシステム状態に関する仕
@@ -422,10 +442,10 @@ CPUロック状態においては,上記の(1)や(2)の状況を作り出す
                                フラグ                       マスク                       禁止フラグ
 ------------------------------------------------------------
 【タスク例外処理ルーチン】
-実行開始条件     解除                  任意                  任意
+実行開始条件     解除                  全解除                       任意
 実行開始時処理  そのまま            そのまま            そのまま
\83ªã\82¿ã\83¼ã\83³å\89\8d                å\8e\9få\89\87解é\99¤(*1)        å\8e\9få\89\87å\85\83ã\81«(*1)        å\8e\9få\89\87å\85\83ã\81«(*1)
\83ªã\82¿ã\83¼ã\83³æ\99\82å\87¦ç\90\86  è§£é\99¤ã\81\99ã\82\8b            å\85\83ã\81«æ\88»ã\81\99(*4)        元に戻す(*4)
\83ªã\82¿ã\83¼ã\83³å\89\8d                å\8e\9få\89\87解é\99¤(*1)        å\8e\9få\89\87å\85¨è§£é\99¤(*1)     å\85\83ã\81«æ\88»ã\81\99
\83ªã\82¿ã\83¼ã\83³æ\99\82å\87¦ç\90\86  è§£é\99¤ã\81\99ã\82\8b            å\85¨è§£é\99¤ã\81\99ã\82\8b         元に戻す(*4)
 ------------------------------------------------------------
 
 ●タスク例外処理ルーチンの呼出し処理
@@ -444,13 +464,12 @@ call_texrtn(void)
 
        タスク例外処理禁止状態にする
        ディスパッチ禁止フラグを保存する
-       割込み優先度マスクを保存する
 
        CPUロック解除状態にする
        タスク例外処理ルーチンを呼び出す
        CPUロック状態にする
 
-       割込み優先度マスクを元に戻す
+       割込み優先度マスク全解除状態にする
        ディスパッチ禁止フラグを元に戻す
        タスク例外処理禁止状態にする … (*2)
 
@@ -460,9 +479,9 @@ call_texrtn(void)
 }
 ----------------------------------------
 
-(*1)ã\81«ã\81\8aã\81\84ã\81¦ï¼\8cå¿\85è¦\81ã\81ªå ´å\90\88ã\81«ã\82¿ã\82¹ã\82¯å\88\87æ\8f\9bã\81\88ã\82\92è¡\8cã\81\86ã\81®ã\81¯ï¼\8cå\89²è¾¼ã\81¿å\84ªå\85\88度ã\83\9eã\82¹ã\82¯ã\81¨
-ディスパッチ禁止フラグを元に戻した結果,ディスパッチ保留状態が解除され,
-ディスパッチが必要になる場合があるためである.
+(*1)ã\81«ã\81\8aã\81\84ã\81¦ï¼\8cå¿\85è¦\81ã\81ªå ´å\90\88ã\81«ã\82¿ã\82¹ã\82¯å\88\87æ\8f\9bã\81\88ã\82\92è¡\8cã\81\86ã\81®ã\81¯ï¼\8cå\89²è¾¼ã\81¿å\84ªå\85\88度ã\83\9eã\82¹ã\82¯ã\82\92
+全解除にし,ディスパッチ禁止フラグを元に戻した結果,ディスパッチ保留状
+態が解除され,ディスパッチが必要になる場合があるためである.
 
 また,ディスパッチを行う前にタスク例外処理禁止状態にする(*2)理由につい
 ては,「call_texrtnからdispatchを呼び出す処理について」の節を参照するこ
@@ -470,11 +489,11 @@ call_texrtn(void)
 
 ●タスク例外処理ルーチンの実行開始が必要なタイミング
 
-タスク例外処理ルーチンは,前述の5つの条件が揃った場合に実行開始すべきで
-あるため,5つの条件のいずれかを新たに満たすようになる可能性のあるタイミ
+タスク例外処理ルーチンは,前述の6つの条件が揃った場合に実行開始すべきで
+あるため,6つの条件のいずれかを新たに満たすようになる可能性のあるタイミ
 ングで,タスク例外処理ルーチンの実行開始が必要になる.
 
-以下では,5つの条件のいずれかを新たに満たすようになるタイミングについて
+以下では,6つの条件のいずれかを新たに満たすようになるタイミングについて
 検討する.
 
 (1) タスク例外処理許可状態である
@@ -499,7 +518,20 @@ call_texrtn(void)
 割込みハンドラおよびCPU例外ハンドラからのリターンによって,タスクコンテ
 キストに戻る場合がある.
 
-(5) CPUロック状態でない
+(5) 割込み優先度マスク全解除状態である
+
+割込み優先度マスクの変更(chg_ipm)によって,割込み優先度マスクが全解除
+になる.
+
+また,タスクの終了,タスク例外処理ルーチンからのリターン,割込みハンド
+ラからのリターン,CPU例外ハンドラからのリターンによっても,割込み優先度
+マスクが全解除される場合もある.
+
+ただし,タスクの終了時については,タスクの終了後は別のタスクへ切り換わ
+るため,切り換わった後のタスクに対するタスク例外処理ルーチンの実行開始
+を,タスクディスパッチ後の処理で行えばよい.
+
+(6) CPUロック状態でない
 
 CPUロック状態の解除(unl_cpu,iunl_cpu)によって,CPUロック状態でなくな
 る.ただし,非タスクコンテキストでのCPUロック状態の解除(iunl_cpu)では,
@@ -522,30 +554,32 @@ CPUロック状態の解除(unl_cpu,iunl_cpu)によって,CPUロック
 が必要になる可能性があるのは,以下の処理である.
 
 (a) タスク例外処理の許可(ena_tex)… (1)
-(b) タスク例外処理ルーチンの出口処理 … (1)(5)
+(b) タスク例外処理ルーチンの出口処理 … (1)(5)(6)
 (c) タスク例外処理の要求(ras_tex)… (2)
-(d) タスクディスパッチ後の処理 … (3)(5)
+(d) タスクディスパッチ後の処理 … (3)(5)(6)
        (d-1) dispatch_r
        (d-2) ret_int_r
        (d-3) ret_exc_r
        (d-4) start_r
-(e) 割込みハンドラの出口処理 … (4)(5)
-(f) CPU例外ハンドラの出口処理 … (4)(5)
-(g) CPUロック状態の解除(unl_cpu)… (5)
+(e) 割込みハンドラの出口処理 … (4)(5)(6)
+(f) CPU例外ハンドラの出口処理 … (4)(5)(6)
+(g) 割込み優先度マスクの変更(chg_ipm)… (5)
+(h) CPUロック状態の解除(unl_cpu)… (6)
 
 この中で(d-4)に関しては,タスクの実行開始直後はタスク例外処理禁止状態で
 あり(自タスクがena_texするまでは,タスク例外が許可されない),(1)の条
 件が満たされないため,タスク例外処理ルーチンの実行開始は必要ない.
 
-また(g)に関しては,次に述べる理由により,CPUロック状態が継続している間
-に他の4つの条件が新たに満たされることはないため,タスク例外処理ルーチン
+また(h)に関しては,次に述べる理由により,CPUロック状態が継続している間
+に他の5つの条件が新たに満たされることはないため,タスク例外処理ルーチン
 の実行開始は必要ない.
 
-CPUロック状態では,まず,タスク例外処理の許可(ena_tex)とタスク例外処
-理の要求(ras_tex,iras_tex)を行うことはできず,タスクディスパッチも起
-こらない.CPUロック状態でタスク例外処理ルーチンからリターンすることはで
-きるが,この場合はCPUロック状態も解除され,CPUロック状態が継続しない.
-CPUロック状態で割込みハンドラからリターンした場合も,これと同様である.
+CPUロック状態では,まず,タスク例外処理の許可(ena_tex),タスク例外処
+理の要求(ras_tex,iras_tex),割込み優先度マスクの変更(chg_ipm)を行
+うことはできず,タスクディスパッチも起こらない.CPUロック状態でタスク例
+外処理ルーチンからリターンすることはできるが,この場合はCPUロック状態も
+解除され,CPUロック状態が継続しない.CPUロック状態で割込みハンドラから
+リターンした場合も,これと同様である.
 
 最後に,CPUロック状態でCPU例外ハンドラからリターンした場合が問題になる.
 これについては,CPU例外が発生した時に,CPUロック状態であった場合と,
@@ -553,9 +587,9 @@ CPUロック解除状態であった場合に分けて考える.CPUロック
 場合には,CPU例外ハンドラからのリターンにより,CPUロック状態が解除され
 るため,割込みハンドラからリターンした場合と同様である.CPUロック状態で
 あった場合には,起動されるCPU例外ハンドラはカーネル管理外のCPU例外ハン
-ドラであるため,その中で(1)〜(3)の条件が新たに満たされることはない.
\83\89ã\83©ã\81§ã\81\82ã\82\8bã\81\9fã\82\81ï¼\8cã\81\9dã\81®ä¸­ã\81§(1)ã\80\9c(3)ã\81¨(5)ã\81®æ\9d¡ä»¶ã\81\8cæ\96°ã\81\9fã\81«æº\80ã\81\9fã\81\95ã\82\8cã\82\8bã\81\93ã\81¨ã\81¯ã\81ªã\81\84ï¼\8e
 CPU例外ハンドラの実行前後で(4)の条件は保存されることから,CPU例外ハンド
-ラからのリターンによって,(1)〜(4)の条件はCPU例外の発生前に戻り,新たに
+ラからのリターンによって,(1)〜(5)の条件はCPU例外の発生前に戻り,新たに
 満たされることはない.
 
 ●タスク例外処理ルーチンの実行開始処理
@@ -568,14 +602,16 @@ CPU例外ハンドラの実行前後で(4)の条件は保存されることか
 ena_texがタスクから呼び出された場合には,自タスクに対して「タスクが実行
 状態である」「タスクコンテキストが実行されている」の2条件は満たされてお
 り,「タスク例外処理許可状態である」の条件はena_texの処理により満たされ
-る.そのため,「保留例外要因が0でない」が満たされている場合には,タスク
-例外処理ルーチンを呼び出す.
+る.また,「CPUロック状態でない」の条件はena_texの入口でチェックしてい
+る.そのため,「保留例外要因が0でない」と「割込み優先度マスク全解除状態
+である」の2条件が満たされている場合には,タスク例外処理ルーチンを呼び出
+す.
 
 ena_texの本体の処理(エラー処理を除く)は次の通り.
 
 ----------------------------------------
                p_runtsk->enatex = true;
-               if (p_runtsk->texptn != 0U) {
+               if (p_runtsk->texptn != 0U && ipmflg) {
                        call_texrtn();
                }
 ----------------------------------------
@@ -584,9 +620,10 @@ ena_texの本体の処理(エラー処理を除く)は次の通り.
 
 タスク例外処理ルーチンの出口処理(call_texrtnの後半)では,自タスクに対
 して「タスクが実行状態である」「タスクコンテキストが実行されている」の
-2条件は満たされており,「タスク例外処理許可状態である」の条件が出口処理
-で満たされる.そのため,「保留例外要因が0でない」が満たされている場合に
-は,タスク例外処理ルーチンを呼び出す必要がある.
+2条件は満たされており,「タスク例外処理許可状態である」「割込み優先度マ
+スク全解除状態である」「CPUロック状態でない」の3条件が出口処理で満たさ
+れる.そのため,「保留例外要因が0でない」が満たされている場合には,タス
+ク例外処理ルーチンを呼び出す必要がある.
 
 ただし,タスク例外処理ルーチンの出口処理で単純にcall_texrtnを呼び出すと,
 call_texrtnの中からcall_texrtnを呼び出すことになり,タスク例外処理が繰
@@ -603,7 +640,6 @@ call_texrtn(void)
        TEXPTN  texptn;
 
        ディスパッチ禁止フラグを保存する … (*3)
-       割込み優先度マスクを保存する … (*3)
        タスク例外処理禁止状態にする … (*6)
 
        do {
@@ -614,7 +650,7 @@ call_texrtn(void)
                タスク例外処理ルーチンを呼び出す
                CPUロック状態にする
 
-               割込み優先度マスクを元に戻す … (*4)
+               割込み優先度マスク全解除状態にする
                ディスパッチ禁止フラグを元に戻す … (*4)
                タスク例外処理禁止状態にする … (*2)
 
@@ -625,14 +661,14 @@ call_texrtn(void)
 }
 ----------------------------------------
 
-タスク例外処理ルーチンの呼出し前にディスパッチ禁止フラグと割込み優先度
-マスクを保存する処理は,(*4)においてそれらを元の状態に戻すことから,ルー
-プの外(*3)で行うのが効率がよい.また,タスク例外処理ルーチンの呼出し前
-にタスク例外処理禁止状態にする処理は,(*2)においてタスク例外処理禁止状
-態にすることから,ループ外(*6)で行うのが効率がよい.
+タスク例外処理ルーチンの呼出し前にディスパッチ禁止フラグを保存する処理
+は,(*4)において元の状態に戻すことから,ループの外(*3)で行うのが効率が
+よい.
 
-また,タスク例外処理ルーチンの呼出し後にタスク例外処理許可状態にする処
-理も,ループの外(*5)で行う方が効率がよい.
+タスク例外処理ルーチンの呼出し前にタスク例外処理禁止状態にする処理は,
+(*2)においてタスク例外処理禁止状態にすることから,ループ外(*6)で行うの
+が効率がよい.また,タスク例外処理ルーチンの呼出し後にタスク例外処理許
+可状態にする処理も,ループの外(*5)で行う方が効率がよい.
 
 (c) タスク例外処理の要求(ras_tex)
 
@@ -640,15 +676,16 @@ ras_texがタスクから呼び出された場合で,対象タスクが自タ
 自タスクに対して「タスクが実行状態である」「タスクコンテキストが実行さ
 れている」の2条件は満たされており,「保留例外要因が0でない」の条件は
 ras_texの処理により満たされる(ras_texのパラメータrasptnが0の場合はエラー
-となるため).そのため,対象タスクが自タスクであり,「タスク例外処理許
-可状態である」が満たされている場合には,タスク例外処理ルーチンを呼び出
-す.
+となるため).また,「CPUロック状態でない」の条件はras_texの入口でチェッ
+クしている.そのため,対象タスクが自タスクであり,「タスク例外処理許可
+状態である」と「割込み優先度マスク全解除状態である」の2条件が満たされて
+いる場合には,タスク例外処理ルーチンを呼び出す.
 
 ras_texの本体の処理(エラー処理を除く)は次の通り.
 
 ----------------------------------------
                p_tcb->texptn |= rasptn;
-               if (p_tcb == p_runtsk && p_runtsk->enatex) {
+               if (p_tcb == p_runtsk && p_runtsk->enatex && ipmflg) {
                        call_texrtn();
                }
 ----------------------------------------
@@ -657,9 +694,11 @@ ras_texの本体の処理(エラー処理を除く)は次の通り.
 
 dispatch_rにおいては,dispatch_rからのリターン先のタスクに対して,「タ
 スクが実行状態である」「タスクコンテキストが実行されている」の2条件は満
-たされている.そのため,「タスク例外処理許可状態である」「保留例外要因
-が0でない」の2条件が満たされている場合には,タスク例外処理ルーチンを呼
-び出す必要がある.
+たされている.また,CPUロック状態でdispatch_rに来ることはないため,
+「CPUロック状態でない」の条件も成立している.そのため,「タスク例外処理
+許可状態である」「保留例外要因が0でない」「割込み優先度マスク全解除状態
+である」の3条件が満たされている場合には,タスク例外処理ルーチンを呼び出
+す必要がある.
 
 これを実現するために,タスクコンテキストからのディスパッチ処理を次のよ
 うに修正する.
@@ -677,31 +716,31 @@ dispatch(void)
 ----------------------------------------
 
 ここでcalltexは,「タスク例外処理許可状態である」「保留例外要因が0でな
-い」の2条件が満たされている場合にcall_texrtnを呼び出す関数である.
+い」「割込み優先度マスク全解除状態である」の3条件が満たされている場合に
+call_texrtnを呼び出す関数である.
 
 ----------------------------------------
 void
 calltex(void)
 {
-       if (p_runtsk->enatex && p_runtsk->texptn != 0U) {
+       if (p_runtsk->enatex && p_runtsk->texptn != 0U && ipmflg) {
                call_texrtn();
        }
 }
 ----------------------------------------
 
 (d-2) ret_int_r
-(d-3) ret_exc_r
 
-ret_int_r/ret_exc_rは,割込みハンドラ/CPU例外ハンドラの出口処理でディ
-スパッチを行ったタスクが,実行を再開する際の処理である.そのため,
-ret_int_r/ret_exc_rからのリターン先のタスクに対して,「タスクが実行状
-態である」「タスクコンテキストが実行されている」の2条件は満たされている.
-そのため,「タスク例外処理許可状態である」「保留例外要因が0でない」の2
-条件が満たされている場合には,タスク例外処理ルーチンを呼び出す必要があ
-る.
+ret_int_rは,割込みハンドラの出口処理でディスパッチを行ったタスクが,実
+行を再開する際の処理である.そのため,ret_int_rからのリターン先のタスク
+に対して,「タスクが実行状態である」「タスクコンテキストが実行されてい
+る」の2条件は満たされている.また,CPUロック状態でret_int_rに来ることは
+ないため,「CPUロック状態でない」の条件も成立している.そのため,「タス
+ク例外処理許可状態である」「保留例外要因が0でない」「(割込みハンドラか
+らのリターン後に)割込み優先度マスク全解除状態である」の3条件が満たされ
+ている場合には,タスク例外処理ルーチンを呼び出す必要がある.
 
-これを実現するために,割込みハンドラ/CPU例外ハンドラの出入口処理を次の
-ように修正する.
+これを実現するために,割込みハンドラの出入口処理を次のように修正する.
 
 ----------------------------------------
 void
@@ -716,6 +755,23 @@ void
                ………
 }
 ----------------------------------------
+
+(d-3) ret_exc_r
+
+ret_exc_rは,CPU例外ハンドラの出口処理でディスパッチを行ったタスクが,
+実行を再開する際の処理である.
+
+カーネル管理のCPU例外ハンドラの出口処理(ret_exc)は,割込みハンドラの
+出口処理(ret_int)と同様である.これは,CPUロック状態でCPU例外が発生し
+た場合には,カーネル管理外のCPU例外ハンドラとなり,CPU例外ハンドラの出
+口処理でディスパッチを行うことはなく,ret_excにも来ないためである.その
+ため,ret_exc_rからのリターン先のタスクに対して,「CPUロック状態でない」
+の条件が成立している.
+
+このことから,CPU例外ハンドラの出入口処理についても,割込みハンドラの出
+入口処理と同様に,次のように修正すればよい.
+
+----------------------------------------
 void
 <CPU例外の出入口処理>(void)
 {
@@ -731,27 +787,28 @@ void
 ----------------------------------------
 
 (e) 割込みハンドラの出口処理
-(f) CPU例外ハンドラの出口処理
 
-割込みハンドラ/CPU例外ハンドラからタスクへリターンする場合には,リター
-ン先のタスクに対して,「タスクが実行状態である」「タスクコンテキストが
-実行されている」の2条件は満たされている.そのため,「タスク例外処理許可
-状態である」「保留例外要因が0でない」の2条件が満たされている場合には,
-タスク例外処理ルーチンを呼び出す必要がある.
+割込みハンドラからタスクへリターンする場合には,リターン先のタスクに対
+して,「タスクが実行状態である」「タスクコンテキストが実行されている」
+の2条件は満たされている.また,CPUロック状態で割込みハンドラが実行され
+ることはないため,「CPUロック状態でない」の条件も成立している.そのため,
+「タスク例外処理許可状態である」「保留例外要因が0でない」「(割込みハン
+ドラからのリターン後に)割込み優先度マスク全解除状態である」の3条件が満
+たされている場合には,タスク例外処理ルーチンを呼び出す必要がある.
 
-割込みハンドラ/CPU例外ハンドラの呼出し前と呼出し後でこれらの条件が変化
-するのは,実行状態のタスクが変化した時と,割込みハンドラ/CPU例外ハンド
\83©ä¸­ã\81§iras_texã\81\8cå\91¼ã\81³å\87ºã\81\95ã\82\8cã\81\9få ´å\90\88ã\81§ã\81\82ã\82\8bï¼\8eå\89²è¾¼ã\81¿ã\83\8fã\83³ã\83\89ã\83©ï¼\8fCPUä¾\8bå¤\96ã\83\8fã\83³ã\83\89ã\83©
\81\8bã\82\89ã\81¯ena_texã\82\92å\91¼ã\81³å\87ºã\81\9bã\81ªã\81\84ã\81\9fã\82\81ï¼\8cã\80\8cã\82¿ã\82¹ã\82¯ä¾\8bå¤\96å\87¦ç\90\86許å\8f¯ç\8a¶æ\85\8bã\81§ã\81\82ã\82\8bã\80\8dã\81®æ\9d¡ä»¶
-が変化することはない.
+割込みハンドラの呼出し前と呼出し後でこれらの条件が変化するのは,実行状
+態のタスクが変化した時と,割込みハンドラ中でiras_texが呼び出された場合
\81§ã\81\82ã\82\8bï¼\8eå\89²è¾¼ã\81¿ã\83\8fã\83³ã\83\89ã\83©ã\81\8bã\82\89ã\81¯ena_texã\81¨chg_ipmã\81¯å\91¼ã\81³å\87ºã\81\9bã\81ªã\81\84ã\81\9fã\82\81ï¼\8cã\80\8cã\82¿ã\82¹
\82¯ä¾\8bå¤\96å\87¦ç\90\86許å\8f¯ç\8a¶æ\85\8bã\81§ã\81\82ã\82\8bã\80\8dã\81¨ã\80\8cï¼\88å\89²è¾¼ã\81¿ã\83\8fã\83³ã\83\89ã\83©ã\81\8bã\82\89ã\81®ã\83ªã\82¿ã\83¼ã\83³å¾\8cã\81«ï¼\89å\89²è¾¼
\81¿å\84ªå\85\88度ã\83\9eã\82¹ã\82¯å\85¨è§£é\99¤ç\8a¶æ\85\8bã\81§ã\81\82ã\82\8bã\80\8dã\81®2æ\9d¡ä»¶ã\81\8cå¤\89å\8c\96ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ã\81ªã\81\84ï¼\8e
 
-この2つの中で,実行状態のタスクが変化するケースは,ret_int_r/ret_exc_r
-で考慮済みである.割込みハンドラ/CPU例外ハンドラ中でiras_texが呼び出さ
-れた場合には,reqflgがtrueになるため,タスク例外処理ルーチンの実行開始
-処理は,reqflgがtrueの時にのみ行えばよい.
+この2つの状況の内,実行状態のタスクが変化するケースは,ret_int_rで考慮
+済みである.割込みハンドラ中でiras_texが呼び出された場合には,reqflgが
+trueになるため,タスク例外処理ルーチンの実行開始処理は,reqflgがtrueの
+時にのみ行えばよい.
 
-これを実現するために,上で修正した割込みハンドラ/CPU例外ハンドラの出入
-口処理を,さらに次のように修正する.
+これを実現するために,上で修正した割込みハンドラの出入口処理を,さらに
+次のように修正する.
 
 ----------------------------------------
 void
@@ -773,6 +830,21 @@ void
        ………
 }
 ----------------------------------------
+
+(f) CPU例外ハンドラの出口処理
+
+カーネル管理のCPU例外ハンドラの出口処理は,割込みハンドラの出口処理と同
+様である.
+
+カーネル管理外のCPU例外ハンドラの中では,実行状態のタスクが変化すること
+はなく,iras_texやena_texを呼び出すこともできないため,タスク例外処理ルー
+チンの実行開始条件が新たに満たされることはなく,タスク例外処理ルーチン
+の実行開始は必要ない.
+
+このことから,CPU例外ハンドラの出入口処理についても,割込みハンドラの出
+入口処理と同様に,次のように修正すればよい.
+
+----------------------------------------
 void
 <CPU例外の出入口処理>(void)
 {
@@ -792,6 +864,33 @@ void
 }
 ----------------------------------------
 
+(g) 割込み優先度マスクの変更
+
+chg_ipmがタスクから呼び出された場合には,自タスクに対して「タスクが実行
+状態である」「タスクコンテキストが実行されている」の2条件は満たされてい
+る.また,「CPUロック状態でない」の条件はchg_ipmの入口でチェックしてい
+る.そのため,パラメータintpriがTIPM_ENAALLであり,「タスク例外処理許可
+状態である」「保留例外要因が0でない」の2条件が満たされている場合には,
+タスク例外処理ルーチンを呼び出す.
+
+chg_ipmの関連部分の処理は次の通り.
+
+----------------------------------------
+       t_set_ipm(intpri);
+       if (intpri == TIPM_ENAALL) {
+               ipmflg = true;
+               ここにタスク切換え処理が入る
+               if (p_runtsk->enatex && p_runtsk->texptn != 0U) {
+                       call_texrtn();
+               }
+       }
+----------------------------------------
+
+dispatchを呼び出してタスク切換えを行う場合には,dispatchの出口でタスク
+例外処理ルーチンを呼び出すためここで呼出し処理を行う必要はないが,コー
+ドが複雑になるため,dispatchを呼び出した場合もここでタスク例外処理ルー
+チンの呼出し処理を行っている.
+
 ●call_texrtnからdispatchを呼び出す処理について
 
 dispatch_rから(ターゲットによってはcalltexを経由して)call_texrtnを呼
index bbb3614..f6d09b8 100644 (file)
@@ -2,8 +2,8 @@
                TOPPERS/ASPカーネル
                機能拡張・チューニングガイド
 
-               対応バージョン: Release 1.6.0
-               最終更新: 2010年2月9
+               対応バージョン: Release 1.7.0
+               最終更新: 2010年11月20
 
 このドキュメントは,TOPPERS/ASPカーネルを,機能拡張・チューニングするた
 めの方法(またはヒント)を説明するものである.
@@ -45,7 +45,7 @@
  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
  の責任を負わない.
  
- $Id: extension.txt 1862 2010-07-25 11:49:51Z ertl-hiro $
+ $Id: extension.txt 1964 2010-11-20 06:41:44Z ertl-hiro $
 ----------------------------------------------------------------------
 
 ○目次
 ・エラーチェックの省略
 ・タイムティックの周期の変更
 ・特殊目的のレジスタの扱い
-・ミューテックス機能拡張パッケージ
-・オーバランハンドラ機能拡張パッケージ
-・タスク優先度拡張パッケージ
+・拡張パッケージの使い方
+       - ミューテックス機能拡張パッケージ
+       - オーバランハンドラ機能拡張パッケージ
+       - タスク優先度拡張パッケージ
+       - 制約タスク拡張パッケージ
+       - 動的生成機能拡張パッケージ
 ・CPU例外ハンドラの直接呼出し
+       - TA_DIRECT属性の導入
+       - ターゲット依存部の修正箇所
 
 
 ○エラーチェックの省略
@@ -141,57 +146,193 @@ CPU例外ハンドラで特殊レジスタを使用する場合には,これ
 性能が高いと判断すれば,浮動小数点命令を生成する場合がある.
 
 
-○ミューテックス機能拡張パッケージ
+○拡張パッケージの使い方
 
-ASPカーネルに,ミューテックス機能を追加するための拡張パッケージを用意し
-ている.ただし,優先度逆転を制御するための仕組みとして,優先度上限ミュー
-テックス(TA_CEILING属性のミューテックス)のみをサポートし,優先度継承
-ミューテックス(TA_INHERIT属性のミューテックス)はサポートしていない.
+ASPカーネルでは,いくつかの拡張機能を実装するために,拡張パッケージをサ
+ポートしている.拡張パッケージは,extensionディレクトリに置いてある.
 
-拡張パッケージは,extension/mutexディレクトリに置いてある.拡張パッケー
-ジを使用する場合には,UNIXであれば,ASPカーネルのソースファイルのトップ
-ディレクトリで,
+拡張パッケージを使用する場合には,UNIXであれば,ASPカーネルのソースファ
+イルのトップディレクトリで,
 
-       % cp -r extension/mutex/* .
+       % cp -r extension/<拡張パッケージのディレクトリ名>/* .
 
 を実行する.この時,元の(拡張前の)ソースファイルは上書きされてしまう
 ため,拡張しないカーネルも使用したい場合には,別のディレクトリにソース
-ファイルを展開して,上のコマンドを実行すること.また,複数の拡張パッケー
-ジを使う場合には,それらが衝突する可能性があるので,注意が必要である.
+ファイルを展開して,上のコマンドを実行すること.
+
+複数の拡張パッケージを使うことは考慮していないが,以下に述べるケースを
+除いては,手作業により複数の拡張パッケージをマージすることは可能である.
+現時点では,ミューテックス機能拡張パッケージと制約タスク拡張パッケージ
+をマージすることはできない.また,動的生成機能拡張パッケージを他の拡張
+パッケージとマージすることは考慮していない.
+
+●ミューテックス機能拡張パッケージ
+
+ミューテックス機能拡張パッケージは,ミューテックス機能を追加するための
+拡張パッケージである.ただし,優先度逆転を制御するための仕組みとして,
+優先度上限ミューテックス(TA_CEILING属性のミューテックス)のみをサポー
+トし,優先度継承ミューテックス(TA_INHERIT属性のミューテックス)はサポー
+トしていない.ミューテックス機能拡張パッケージは,extension/mutexディレ
+クトリに置いてある.
 
 ミューテックス機能拡張パッケージでは,TOPPERS_SUPPORT_MUTEXがkernel.h中
 で定義されているので,これを用いてミューテックス機能を使用できるかどう
 かを判別することができる.
 
+●オーバランハンドラ機能拡張パッケージ
 
-○オーバランハンドラ機能拡張パッケージ
-
-ASPカーネルに,オーバランハンドラ機能を追加するための拡張パッケージを用
-意している.ただし,この拡張パッケージを使うためには,ターゲット依存部
-が対応している必要がある.
-
-拡張パッケージは,extension/ovrhdrディレクトリに置いてある.拡張パッケー
-ジの使用方法は,ミューテックス機能と同様である.
+オーバランハンドラ機能拡張パッケージは,オーバランハンドラ機能を追加す
+るための拡張パッケージである.ただし,この拡張パッケージを使うためには,
+ターゲット依存部が対応している必要がある.オーバランハンドラ機能拡張パッ
+ケージは,extension/ovrhdrディレクトリに置いてある.
 
 オーバランハンドラ機能拡張パッケージで,ターゲット依存部が拡張パッケー
 ジに対応している場合には,TOPPERS_SUPPORT_OVRHDRがkernel.h中で定義され
 るので,これを用いてオーバランタイマ機能が使用できるかどうかを判別する
 ことができる.
 
+●タスク優先度拡張パッケージ
 
-○タスク優先度拡張パッケージ
-
-タスク優先度を最大256段階に拡張するための拡張パッケージを用意している.
-この拡張パッケージは,タスク優先度に加えて,データ優先度,メッセージ優
-先度,割込みサービスルーチン優先度も256段階に拡張する.
-
-拡張パッケージは,extension/pri_levelディレクトリに置いてある.拡張パッ
-ケージの使用方法は,ミューテックス機能と同様である.
+タスク優先度拡張パッケージは,タスク優先度を最大256段階に拡張するための
+拡張パッケージである.この拡張パッケージは,タスク優先度に加えて,デー
+タ優先度,メッセージ優先度,割込みサービスルーチン優先度も256段階に拡張
+する.タスク優先度拡張パッケージは,extension/pri_levelディレクトリに置
+いてある.
 
 タスク優先度拡張パッケージでは,TOPPERS_SUPPORT_PRI_LEVELがkernel.h中で
 定義されているので,これを用いてタスク優先度の範囲が拡張されているかど
 うかを判別することができる.
 
+●制約タスク拡張パッケージ
+
+制約タスク拡張パッケージは,制約タスクの機能を追加するための拡張パッケー
+ジである.TOPPERS新世代カーネル統合仕様書に規定された制約タスクの機能に
+加えて,自タスクのベース優先度を変更するサービスコールras_priを実装して
+いる.制約タスク拡張パッケージは,extension/rstr_taskディレクトリに置い
+てある.
+
+制約タスク拡張パッケージでは,TOPPERS_SUPPORT_RSTR_TASKがkernel.h中で定
+義されているので,これを用いて制約タスクの機能が使用できるかどうかを判
+別することができる.
+
+----------------------------------------------------------------------
+ras_pri                自タスクのベース優先度の引き上げ〔T〕
+
+【C言語API】
+       ER ercd = ras_pri(PRI tskpri)
+
+【パラメータ】
+       PRI                     tskpri          ベース優先度
+
+【リターンパラメータ】
+       ER                      ercd            正常終了(E_OK)またはエラーコード
+
+【エラーコード】
+       E_CTX                   コンテキストエラー(非タスクコンテキストからの呼出
+                                       し,CPUロック状態からの呼出し)
+       E_PAR                   パラメータエラー(tskpriが不正)
+       E_ILUSE                 サービスコール不正使用(tskpriが,自タスクの起動時
+                                       優先度よりも低い場合)
+
+【機能】
+
+自タスクのベース優先度を,tskpriで指定した優先度に変更する.具体的な振
+舞いは以下の通り.
+
+自タスクのベース優先度が,tskpriで指定した優先度に変更される.それに伴っ
+て,自タスクの現在優先度も変更される.同じ優先度のタスクの中では,自タ
+スクが最高優先順位となる.
+
+tskpriにTPRI_INI(=0)を指定すると,自タスクのベース優先度が,起動時優
+先度に変更される.
+
+tskpriは,TPRI_INIであるか,TMIN_TPRI以上,TMAX_TPRI以下でなければなら
+ない.また,tskpriは,自タスクの起動時優先度と同じかそれよりも高くなけ
+ればならない.
+----------------------------------------------------------------------
+
+●動的生成機能拡張パッケージ
+
+動的生成機能拡張パッケージは,オブジェクトの動的生成機能を追加するため
+の拡張パッケージである.TOPPERS新世代カーネル統合仕様書に規定された以下
+のオブジェクト生成/削除のためのサービスコールに加えて,カーネルが割り
+付けるメモリ領域を設定する静的API DEF_KMMを実装している.動的生成機能拡
+張パッケージは,extension/dcreディレクトリに置いてある.
+
+ただし,カーネル内での動的メモリ管理に関しては,ターゲット非依存部では,
+メモリ領域を先頭から順に割り当て,解放されたメモリ領域を再利用しないメ
+モリ管理モジュールのみを実装している.本格的な動的メモリ管理を行いたい
+場合には,ターゲット依存部またはユーザ側で,そのための関数を用意する必
+要がある.用意する関数等については,「TOPPERS/ASPカーネル ターゲット依
+存部 ポーティングガイド」の「6.15 動的メモリ管理」の節を参照すること.
+
+動的機能拡張拡張パッケージでは,TOPPERS_SUPPORT_DYNAMIC_CREがkernel.h中
+で定義されているので,これを用いて動的生成機能が使用できるかどうかを判
+別することができる.
+
+動的生成機能拡張パッケージにより追加されるサービスコール
+
+       ER_ID tskid = acre_tsk(const T_CTSK *pk_ctsk)
+       ER ercd = del_tsk(ID tskid)
+       ER ercd = def_tex(ID tskid, const T_DTEX *pk_dtex)
+       ER_ID semid = acre_sem(const T_CSEM *pk_csem)
+       ER ercd = del_sem(ID semid)
+       ER_ID flgid = acre_flg(const T_CFLG *pk_cflg)
+       ER ercd = del_flg(ID flgid)
+       ER_ID dtqid = acre_dtq(const T_CDTQ *pk_cdtq)
+       ER ercd = del_dtq(ID dtqid)
+       ER_ID pdqid = acre_pdq(const T_CPDQ *pk_cpdq)
+       ER ercd = del_pdq(ID pdqid)
+       ER_ID mbxid = acre_mbx(const T_CMBX *pk_cmbx)
+       ER ercd = del_mbx(ID mbxid)
+       ER_ID mpfid = acre_mpf(const T_CMPF *pk_cmpf)
+       ER ercd = del_mpf(ID mpfid)
+       ER_ID cycid = acre_cyc(const T_CCYC *pk_ccyc)
+       ER ercd = del_cyc(ID cycid)
+       ER_ID almid = acre_alm(const T_CALM *pk_calm)
+       ER ercd = del_alm(ID almid)
+       ER_ID isrid = acre_isr(const T_CISR *pk_cisr)
+       ER ercd = del_isr(ID isrid)
+
+----------------------------------------------------------------------
+DEF_KMM                カーネルが割り付けるメモリ領域の設定〔SD〕
+
+【静的API】
+       DEF_KMM({ SIZE kmmsz, STK_T *kmm })
+
+【パラメータ】
+ *カーネルが割り付けるメモリ領域の設定情報
+       SIZE            kmmsz           カーネルが割り付けるメモリ領域のサイズ(バイト数)
+       STK_T           kmm                     カーネルが割り付けるメモリ領域の先頭番地
+
+【エラーコード】
+       E_PAR                   パラメータエラー(istksz,istkが不正,その他の条件
+                                       については機能の項を参照すること)
+       E_OBJ                   オブジェクト状態エラー(カーネルが割り付けるメモリ
+                                       領域がすでに設定されている)
+
+【機能】
+
+各パラメータで指定したカーネルが割り付けるメモリ領域の設定情報に従って,
+カーネルが割り付けるメモリ領域を設定する.
+
+kmmszは整数定数式パラメータ,kmmは一般定数式パラメータである.
+
+kmmをNULLとした場合,kmmszで指定したサイズのメモリ領域を,コンフィギュ
+レータが確保する.kmmszにターゲット定義の制約に合致しないサイズを指定し
+た時には,ターゲット定義の制約に合致するようにサイズを大きい方に丸めて
+確保する.
+
+カーネルが割り付けるメモリ領域をアプリケーションで確保する場合には,
+kmmszで指定したサイズのメモリ領域を確保し,kmmにその先頭番地を指定する.
+
+DEF_KMMによりカーネルが割り付けるメモリ領域を設定しない場合,カーネルが
+割り付けるメモリ領域は確保されない.
+
+kmmやkmmszにターゲット定義の制約に合致しない先頭番地やサイズを指定した
+時には,E_PARエラーとなる.
+----------------------------------------------------------------------
+
 
 ○CPU例外ハンドラの直接呼出し
 
@@ -218,10 +359,10 @@ target_def.csv(または,それに代わるファイル)に次の行を追
 TA_DIRECT,TA_DIRECT
 
 次に,target.tf(または,そこからインクルードされるファイル)で,
-TARGET_INHATRに設定される値に,TA_DIRECTを追加する.例えば,TARGET_INHATR
\81«TA_NONKERNELã\81®ã\81¿ã\81\8c設å®\9aã\81\95ã\82\8cã\81¦ã\81\84ã\81\9få ´å\90\88ã\81«ã\81¯ï¼\8c次ã\81®ã\82\88ã\81\86ã\81«ä¿®æ­£する.
+TARGET_EXCATRに設定される値に,TA_DIRECTを追加する.例えば,他のターゲッ
\83\88ä¾\9då­\98ã\81®CPUä¾\8bå¤\96ã\83\8fã\83³ã\83\89ã\83©å±\9eæ\80§ã\81\8cã\81ªã\81\84å ´å\90\88ã\81«ã\81¯ï¼\8c次ã\81®ã\82\88ã\81\86ã\81«è¨­å®\9aする.
 
-$TARGET_INHATR = TA_NONKERNEL | TA_DIRECT$
+$TARGET_EXCATR = TA_DIRECT$
 
 次に,OMIT_INITILIZE_EXCEPTIONを用いて,CPU例外ハンドラの出入口処理を生
 成するための記述とCPU例外ハンドラ初期化ブロックの標準の定義が生成される
@@ -240,14 +381,18 @@ $END$
 また,CPU例外ハンドラ初期化ブロックの定義を生成する部分は,次のように修
 正する.
 
-const EXCINIB _kernel_excinib_table[TNUM_EXCNO] = {$NL$
-$JOINEACH excno EXC.ORDER_LIST ",\n"$
-       $IF (EXC.EXCATR[excno] & TA_DIRECT) == 0$
-               $TAB${ ($EXC.EXCNO[excno]$), ($EXC.EXCATR[excno]$), (FP)(EXC_ENTRY($EXC.EXCNO[excno]$, $EXC.EXCHDR[excno]$)) }
-       $ELSE$
-               $TAB${ ($EXC.EXCNO[excno]$), ($EXC.EXCATR[excno]$), (FP)($EXC.EXCHDR[excno]$) }
-       $END$
-$END$$NL$
-};$NL$
+$IF LENGTH(EXC.ORDER_LIST)$
+       const EXCINIB _kernel_excinib_table[TNUM_EXCNO] = {$NL$
+       $JOINEACH excno EXC.ORDER_LIST ",\n"$
+               $IF (EXC.EXCATR[excno] & TA_DIRECT) == 0$
+                       $TAB${ ($EXC.EXCNO[excno]$), ($EXC.EXCATR[excno]$), (FP)(EXC_ENTRY($EXC.EXCNO[excno]$, $EXC.EXCHDR[excno]$)) }
+               $ELSE$
+                       $TAB${ ($EXC.EXCNO[excno]$), ($EXC.EXCATR[excno]$), (FP)($EXC.EXCHDR[excno]$) }
+               $END$
+       $END$$NL$
+       };$NL$
+$ELSE$
+       TOPPERS_EMPTY_LABEL(const EXCINIB, _kernel_excinib_table);$NL$
+$END$
 
 以上
diff --git a/asp/doc/extention.odt b/asp/doc/extention.odt
deleted file mode 100644 (file)
index 8d349cc..0000000
Binary files a/asp/doc/extention.odt and /dev/null differ
diff --git a/asp/doc/migration.txt b/asp/doc/migration.txt
deleted file mode 100644 (file)
index a8bb87c..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-
-               TOPPERS新世代カーネルへのマイグレーションガイド
-
-               最終更新: 2008年8月8日(作成中)
-
-このドキュメントは,従来のTOPPERSカーネルを含むμITRON4.0仕様準拠のカー
-ネルから,TOPPERS新世代カーネルに移行するための方法(またはヒント)を説
-明するものである.
-
-----------------------------------------------------------------------
- TOPPERS/ASP Kernel
-     Toyohashi Open Platform for Embedded Real-Time Systems/
-     Advanced Standard Profile Kernel
-
- Copyright (C) 2005-2008 by Embedded and Real-Time Systems Laboratory
-             Graduate School of Information Science, Nagoya Univ., JAPAN
- 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
- ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
- 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
- (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
-     権表示,この利用条件および下記の無保証規定が,そのままの形でソー
-     スコード中に含まれていること.
- (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
-     用できる形で再配布する場合には,再配布に伴うドキュメント(利用
-     者マニュアルなど)に,上記の著作権表示,この利用条件および下記
-     の無保証規定を掲載すること.
- (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
-     用できない形で再配布する場合には,次のいずれかの条件を満たすこ
-     と.
-   (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
-       作権表示,この利用条件および下記の無保証規定を掲載すること.
-   (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
-       報告すること.
- (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
-     害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
-     また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
-     由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
-     免責すること.
- 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
- よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
- に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
- アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
- の責任を負わない.
- @(#) $Id$
-----------------------------------------------------------------------
-
-○目次
-
-・データ型の変更
-・オブジェクトIDの自動割付けへの対応
-・sta_tskの置き換え
-・set_timの置き換え
-
-
-○データ型の変更
-
-TOPPERS新世代カーネル仕様では,ITRON仕様の次のデータ型を廃止している.
-対応する新しいデータ型を用意しているので,単純に置き換えればよい.
-
-       廃止したデータ型                置き換えるデータ型
-       ------------------------------------------
-       B                                               int8_t
-       UB                                              uint8_t
-       VB                                              uint8_t
-       H                                               int16_t
-       UH                                              uint16_t
-       VH                                              uint16_t
-       W                                               int32_t
-       UW                                              uint32_t
-       VW                                              uint32_t
-       D                                               int64_t
-       UD                                              uint64_t
-       VD                                              uint64_t
-       VP                                              void *
-       INT                                             int_t
-       UINT                                    uint_t
-       BOOL                                    boot_t
-       VP_INT                                  intptr_t
-
-また,定数についても,次の通り置き換える必要がある.
-
-       廃止した定数                      置き換える定数
-       ------------------------------------------
-       TRUE                                    true
-       FALSE                                   false
-
-なお,ITRON仕様のデータ型を使いたいアプリケーションのために,ITRON仕様
-との互換性を保つためのitron.hを用意しているが,使用することは推奨しない.
-
-
-○オブジェクトIDの自動割付けへの対応
-
-TOPPERS新世代カーネルでは,オブジェクトのID番号を自動割付けすることが基
-本となっている.TOPPERS新世代カーネルを用いる際のID番号の管理方法につい
-ては,「TOPPERS/ASPカーネル ユーザーズマニュアル」の「11.3 オブジェクト
-IDの管理」の節に説明があるので,まずはこれを参照すること.
-
-従来,ID番号を手動で割り付けており,手動で割り付けていたID番号を変更し
-たくない場合には,コンフィギュレータの持つID番号の割付けをファイルから
-取り込む機能(--id-input-fileオプション)を用いることで,手動で割り付け
-たID番号を用いることができる.この場合に,手動で割り付けたID番号は,コ
-ンフィギュレータが--id-input-fileオプションで取り込むファイル中にのみ記
-述し,アプリケーションのソースプログラムからは,kernel_cfg.hを用いるこ
-とが望ましい.
-
-
-○sta_tskの置き換え
-
-TOPPERS新世代カーネルでは,タスクを起動するサービスコールとしてact_tsk
-をサポートしており,sta_tskをサポートしていない.act_tskとsta_tskの機能
-を比較した場合,前者はタスク起動のキューイング機能を持つのに対して,後
-者はタスクに起動コードを渡す機能を持つ.そのため,sta_tskをact_tskに置
-き換える場合に,起動コードを渡す機能をどのように実現するかが問題となる.
-
-起動コードを渡す機能を最も簡単に代用する方法は,起動コードを渡すための
-データキューを用意する方法である.タスクを起動する処理単位は,データ
-キューに起動コードを送信した後,act_tskによりタスクを起動する.起動され
-たタスクは,データキューから起動コードを受信する.
-
-タスク起動のキューイングが起こらないことが保証できる,言い換えると,タ
-スクを起動する時には,対象タスクは休止状態にあることが保証できる場合に
-は,起動コードをグローバル変数に置いて渡す方法もある.タスクを起動する
-処理単位がそのグローバル変数に書くのは,タスクが休止状態の間に限られ,
-起動されたタスクがそのグローバル変数を読むのは,タスクが実行できる状態
-の間に限られるため,グローバル変数に対する排他制御は必要ない.
-
-
-○set_timの置き換え
-
-TOPPERS新世代カーネルでは,システム時刻を設定するサービスコールである
-set_timが使用されることは稀であると考え,サポートしないこととした.
-
-ITRON仕様と互換のset_timとget_timが必要な場合には,下に示すコードの
-itron_set_timとitron_get_tim で代用することができる(下のコードでは,エ
-ラー処理は省略している).
-
-----------------------------------------
-SYSTIM systim_offset = 0U;
-
-void
-itron_set_tim(const SYSTIM *p_systim)
-{
-       SYSTIM  current_time;
-
-       get_tim(&current_time);
-       systim_offset = *p_systim - current_time;
-}
-
-void
-itron_get_tim(SYSTIM *p_systim)
-{
-       SYSTIM  current_time;
-
-       get_tim(&current_time);
-       *p_systim = systim_offset + current_time;
-}
-----------------------------------------
-
-以上
diff --git a/asp/doc/porting.odt b/asp/doc/porting.odt
deleted file mode 100644 (file)
index ac2ed0c..0000000
Binary files a/asp/doc/porting.odt and /dev/null differ
index cfd925c..fdcf879 100644 (file)
@@ -2,8 +2,8 @@
                TOPPERS/ASPカーネル
                ターゲット依存部 ポーティングガイド
 
-               対応バージョン: Release 1.6.0
-               最終更新: 2010年7月29
+               対応バージョン: Release 1.7.0
+               最終更新: 2011年4月10
 
 このドキュメントは,TOPPERS/ASPカーネルを,未サポートのターゲットシステ
 ムにポーティングするために必要となるターゲット依存部の実装方法を説明す
@@ -14,7 +14,7 @@
      Toyohashi Open Platform for Embedded Real-Time Systems/
      Advanced Standard Profile Kernel
 
- Copyright (C) 2005-2010 by Embedded and Real-Time Systems Laboratory
+ Copyright (C) 2005-2011 by Embedded and Real-Time Systems Laboratory
              Graduate School of Information Science, Nagoya Univ., JAPAN
  
  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
@@ -46,7 +46,7 @@
  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
  の責任を負わない.
  
- $Id: porting.txt 1875 2010-07-29 16:21:36Z ertl-hiro $
+ $Id: porting.txt 2064 2011-05-01 08:09:00Z ertl-hiro $
 ----------------------------------------------------------------------
 
 ○目次
@@ -64,7 +64,8 @@
        2.3 開発環境名とコマンド名の設定
        2.4 コンパイルオプションとオブジェクトファイルの設定
        2.5 オフセットファイルの生成方法
-               2.5.1 makeoffset.cの記述方法
+               2.5.1 コンフィギュレータを用いる方法
+               2.5.2 makeoffset.cとgenoffsetを用いる方法
        2.6 リンク方法の設定
        2.7 依存関係の定義
        2.8 その他の設定
                6.6.5 割込み管理機能の初期化処理の変更
                6.6.6 デフォルトの割込みハンドラ
                6.6.7 カーネル管理外の割込み
+               6.6.8 割込みサービスルーチンの生成
        6.7 CPU例外ハンドラとCPU例外発生時のシステム状態の参照
                6.7.1 CPU例外ハンドラの出入口処理
                6.7.2 CPU例外ハンドラの出入口処理の生成
                6.9.1 ビットマップサーチ
                6.9.2 ビットフィールド
        6.10 カーネル実装に関するその他の定義
-               6.10.1 非タスクコンテキスト用のスタック領域
-               6.10.2 空ラベルの定義
+               6.10.1 オブジェクト属性の拡張
+               6.10.2 エラーチェック方法の指定
+               6.10.3 非タスクコンテキスト用のスタック領域
+               6.10.4 空ラベルの定義
        6.11 トレースログ機能に関する設定
                6.11.1 取得できるトレースログの種類とマクロ
                6.11.2 トレースログ記録のサンプルコード
        6.14 オーバランタイマドライバ(オプション)
                6.14.1 オーバランタイマドライバのファイル構成
                6.14.2 オーバランタイマの操作と割込み処理
+       6.15 動的メモリ管理
+               6.15.1 TLSFを用いたメモリ管理モジュールの例
 7.コンフィギュレータ設定ファイルのターゲット依存部
        7.1 設定ファイルとターゲット依存部の位置付け
        7.2 パス2のテンプレートファイルのターゲット依存部
                7.2.1 ターゲット非依存部をインクルードする前に定義すべき変数
                7.2.2 ターゲット非依存部で定義される変数
        7.3 パス3のテンプレートファイルのターゲット依存部
+               7.3.1 ターゲット非依存部をインクルードする前に定義すべき変数
+               7.3.2 ターゲット依存部で行うべきエラーチェック
        7.4 cfg1_out.cのリンクに必要なスタブの定義ファイル
 8.システムサービス等のターゲット依存部
        8.0 システムサービスのターゲット依存部
@@ -329,11 +337,11 @@ TOPPERS_MACRO_ONLY,UINC_C,ULONG_C,CASTをマクロ定義してから,イ
 
 なお,GNU開発環境以外の開発環境を用いる場合には,コンフィギュレーション
 スクリプト(configure),サンプルのMakefile(sample/Makefile),一部の
-ユーティリティプログラム(utils/genoffset,utils/makedep)を,その開発
-環境用に用意する必要がある場合がある.その場合には,これらのファイルを,
\82¿ã\83¼ã\82²ã\83\83ã\83\88ä¾\9då­\98é\83¨ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81\8bé\96\8bç\99ºç\92°å¢\83ä¾\9då­\98é\83¨ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81«ç½®ã\81\8fã\82\82ã\81®ã\81¨ã\81\99
-る.また,開発環境用のプロジェクトファイルが必要な場合には,ターゲッ
-依存部ディレクトリに置くものとする.
+ユーティリティプログラム(utils/makedep)を,その開発環境用に用意する必
+要がある場合がある.その場合には,これらのファイルを,ターゲット依存部
\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81\8bé\96\8bç\99ºç\92°å¢\83ä¾\9då­\98é\83¨ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81«ç½®ã\81\8fã\82\82ã\81®ã\81¨ã\81\99ã\82\8bï¼\8eã\81¾ã\81\9fï¼\8cé\96\8bç\99ºç\92°
+境用のプロジェクトファイルが必要な場合には,ターゲット依存部ディレク
+リに置くものとする.
 
 2.2 Makefileのターゲット依存部
 
@@ -497,35 +505,176 @@ Makefileのターゲット依存部でOMIT_OPTIMIZATIONを"true"に定義する
 2.5 オフセットファイルの生成方法
 
 アセンブリ言語で記述されるプログラムから,C言語の構造体にアクセスする場
-合には,構造体の各フィールドのオフセットを参照することが必要である.
+合には,構造体の各フィールドのオフセットを参照することが必要である.
 ASPカーネルでは,必要なオフセット値を求めてファイル(標準ではoffset.h)
-に生成するための仕組みとして,makeoffset.cとgenoffsetを用意している.
-makeoffset.cは,どのオフセット値をファイルに生成するかを指定するもので,
-ターゲット依存部で用意する必要がある.genoffsetは,現時点ではGNU開発環
-境にのみ対応している.
-
-makeoffset.cとgenoffsetを使うことで,例えば,TCB中のtexptnフィールドの
-オフセット値をTCB_texptnにマクロ定義することや,TCB中のタスクコンテキス
-トブロック(tskctxb)に含まれるpcフィールドのオフセット値をTCB_pcにマク
-ロ定義することができる.また,TCB中のenatexフィールドのオフセット値,ビッ
-ト位置,ビットマスクを,それぞれTCB_enatex,TCB_enatex_bit,
-TCB_enatex_maskにマクロ定義することができる.
-
-GNU開発環境以外を用いる場合など,この仕組みでオフセットファイルを生成で
-きない時には,offset.hをターゲット依存部で用意し,Makefileのターゲット
-依存部でOMIT_MAKEOFFSETを"true"に定義する.
+に生成するための仕組みを用意している.
+
+この仕組みを用いることで,例えば,TCB中のtexptnフィールドのオフセット値
+をTCB_texptnにマクロ定義することや,TCB中のタスクコンテキストブロック
+(tskctxb)に含まれるpcフィールドのオフセット値をTCB_pcにマクロ定義する
+ことができる.また,TCB中のenatexフィールドのオフセット値,ビット位置,
+ビットマスクを,それぞれTCB_enatex,TCB_enatex_bit,TCB_enatex_maskにマ
+クロ定義することができる.
+
+offset.hを生成するための仕組みとして,現時点では,コンフィギュレータを
+用いる方法と,makeoffset.cとgenoffsetを用いる方法を用意している.後者の
+方法は,GNU開発環境にしか対応していないことから,将来のバージョンでは,
+後者の方法のサポートをやめる計画である.新たにポーティングする場合には,
+前者の方法を用いることを推奨する.
+
+これらの仕組みでオフセットファイルを生成できない時には,offset.hをター
+ゲット依存部で用意し,Makefileのターゲット依存部でOMIT_MAKEOFFSETを
+"true"に定義する.
 
 拡張パッケージの中には,TCBにフィールドを追加するものがあるため,TCB中
-のフィールドのオフセット値は変化する.makeoffset.cとgenoffsetを使う場合
-でも,offset.hをターゲット依存部で用意する場合でも,拡張パッケージに対
-応するためには,このことを考慮する必要がある.
+のフィールドのオフセット値は変化する.offset.hを生成する場合でも,ター
+ゲット依存部で用意する場合でも,拡張パッケージに対応するためには,この
+ことを考慮する必要がある.
+
+2.5.1 コンフィギュレータを用いる方法
+
+コンフィギュレータのパス1で生成するcfg1_out.cをコンパイルして生成したオ
+ブジェクトファイルから,コンフィギュレータによってoffset.hを生成する方
+法である.この方法を用いるためには,ターゲット依存部でオフセットファイ
+ル生成用テンプレートファイルを用意し,target_cfg1_out.h(または,そこか
+らインクルードされるファイル)とtarget_def.csv(または,同等の役割を持
+つファイル)に記述を追加する必要がある.なお,これらのファイルを新たに
+用意した際や修正した際には,offset.hに妥当な定義が生成されていることを
+確認すべきである.
+
+オフセットファイル生成用テンプレートファイルは,ターゲット依存部で,
+target_offset.tf(または,プロセッサ依存部やチップ依存部で用意するそれ
+に代わるファイル)に用意する.また,Makefileのターゲット依存部で,次の
+例のように,OFFSET_TFにオフセットファイル生成用テンプレートファイルのファ
+イル名を定義する.
+
+----------------------------------------
+# オフセットファイル生成のための定義
+OFFSET_TF = $(TARGETDIR)/target_offset.tf
+----------------------------------------
+
+オフセットファイル生成用テンプレートファイルには,以下の内容を記述する.
+
+(1) 標準テンプレートファイルのインクルード
+
+オフセットファイル生成用の標準テンプレートファイル(kernel/genoffset.tf)
+をインクルードする.標準テンプレートファイルには,以下で用いるDEFINE関
+数やDEFINE_BIT関数の定義などが含まれている.
+
+----------------------------------------
+$ 標準テンプレートファイルのインクルード
+$INCLUDE "kernel/genoffset.tf"$
+----------------------------------------
+
+(2) オフセット値のマクロ定義の生成
+
+DEFINE関数を用いて,オフセット値のマクロ定義を生成する.例えば,TCB中の
+タスクコンテキストブロック(tskctxb)に含まれるpcフィールドのオフセット
+値を,TCB_pcにマクロ定義する場合には,次のように記述する.
+
+----------------------------------------
+$ オフセット値のマクロ定義の生成
+$DEFINE("TCB_pc", offsetof_TCB_pc)$
+----------------------------------------
+
+ここで,DEFINE関数の第1パラメータはマクロ定義するシンボル,第2パラメー
+タは,オフセット値を保持するコンフィギュレータの変数である.
+
+また,コンフィギュレータが,オフセット値を保持する変数(上の例では
+offsetof_TCB_pc)に値を設定するために,target_def.csv(または,同等の役
+割を持つファイル)に次の例のような行を追加する.
+
+----------------------------------------
+offsetof_TCB_pc,"offsetof(TCB,tskctxb.pc)"
+----------------------------------------
+
+ただし,各オブジェクトの初期化ブロックのターゲット非依存のフィールドの
+オフセット値を取得するための記述は,kernel/kernel_def.csvに含まれている.
+kernel/kernel_def.csvに含まれている記述は,target_def.csv(または,同等
+の役割を持つファイル)に追加する必要はない.
+
+(3) ビットオフセット値等のマクロ定義の生成
+
+DEFINE_BIT関数を用いて,ビットのオフセット値,ビット位置,ビットマスク
+のマクロ定義を生成する.例えば,TCB中のenatexフィールドのオフセット値,
+ビット位置,ビットマスクを,それぞれTCB_enatex,TCB_enatex_bit,
+TCB_enatex_maskにマクロ定義する場合には,次のように記述する.
+
+----------------------------------------
+$DEFINE_BIT("TCB_enatex", sizeof_TCB, "B")$
+----------------------------------------
+
+ここで,DEFINE_BIT関数の第1パラメータはマクロ定義するシンボル(の先頭部
+分),第2パラメータは構造体のサイズである.第3パラメータには,ビットの
+オフセット,ビット位置,ビットマスクを,8ビット単位(バイト単位)で求め
+る場合には"B"を,16ビット単位で求める場合には"H"を,32ビット単位で求め
+る場合には"W"を指定する.なお,ビット位置は,LSBを0とした値(ビットリト
+ルエンディアンを想定)を求める.
+
+また,target_cfg1_out.h(または,そこからインクルードされるファイル)に,
+ビットオフセット値等を求めるための構造体の変数定義を追加する.この構造
+体の変数は,名称をマクロ定義するシンボル(DEFINE_BIT関数の第1パラメータ)
+とし,対象のビットのみが1で,他のすべてのビットが0になるように初期化す
+る.また,const修飾子を付加する.例えば,TCB中のenatexフィールドのビッ
+トオフセット値等を求める場合には,次のような定義を追加する(tskctxbの初
+期値は,ターゲット依存なので注意すること).
+
+----------------------------------------
+const TCB      TCB_enatex = {
+       { NULL, NULL },                 /* task_queue */
+       NULL,                                   /* p_tinib */
+       0U,                                             /* tstat */
+#ifdef TOPPERS_SUPPORT_MUTEX
+       0U,                                             /* bpriority */
+#endif /* TOPPERS_SUPPORT_MUTEX */
+       0U,                                             /* priority */
+       false,                                  /* acqeue */
+       false,                                  /* wupque */
+       true,                                   /* enatex */
+       0U,                                             /* texptn */
+       NULL,                                   /* p_winifo */
+#ifdef TOPPERS_SUPPORT_MUTEX
+       { NULL, NULL },                 /* mutex_queue */
+#endif /* TOPPERS_SUPPORT_MUTEX */
+#ifdef TOPPERS_SUPPORT_OVRTIM
+       0U,                                             /* leftotm */
+#endif /* TOPPERS_SUPPORT_OVRTIM */
+       { NULL, NULL }                  /* tskctxb */
+};
+----------------------------------------
 
-2.5.1 makeoffset.cの記述方法
+さらに,コンフィギュレータが,構造体のサイズ(上の例ではsizeof_TCB)に
+値を設定するために,target_def.csv(または,同等の役割を持つファイル)
+に次の例のような行を追加する.
+
+----------------------------------------
+sizeof_TCB,sizeof(TCB)
+----------------------------------------
+
+ただし,前述した通り,kernel/kernel_def.csvに含まれている記述は,
+target_def.csv(または,同等の役割を持つファイル)に追加する必要はない.
+
+最後に,target_cfg1_out.h(または,そこからインクルードされるファイル)
+に,offset.hを生成する仕組みが正しく動作していることを確認するための次
+の記述を追加する.
+
+----------------------------------------
+const uint8_t  MAGIC_1 = 0x12;
+const uint16_t MAGIC_2 = 0x1234;
+const uint32_t MAGIC_4 = 0x12345678;
+----------------------------------------
+
+2.5.2 makeoffset.cとgenoffsetを用いる方法
+
+makeoffset.cは,どのオフセット値をoffset.hに生成するかを指定するファイ
+ルで,ターゲット依存部で用意する.genoffsetは,makeoffset.cをコンパイル
+して得られるアセンブリソースファイルから,offset.hを生成するスクリプト
+である.genoffsetは,GNU開発環境にのみ対応している.
 
 makeoffset.cを記述する場合には,既存のターゲット依存部に含まれる
 makeoffset.cを修正するのが近道である.標準的なmakeoffset.cは,以下の6つ
 の部分で構成されている.なお,makeoffset.cを新たに記述した際には,
-offset.hã\81«å¦¥å½\93ã\81ªå®\9a義ã\81\8cç\94\9fæ\88\90ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\81\93ã\81¨ã\82\92確èª\8dã\81\99ã\82\8bã\81¹ã\81\8dã\81§ã\81\82ã\82\8bï¼\8e
+offset.hに妥当な定義が生成されていることを確認すべきである.
 
 (1) 必要なファイルのインクルード
 
@@ -549,13 +698,13 @@ offset.hに妥当な定義が生成されていることを確認するべきで
 (makeoffset)の定義.オフセット値のマクロ定義を生成したいフィールド毎
 に,次のいずれかのマクロを記述する.
 
-(2-5-1-1) OFFSET_DEF(TYPE, FIELD)
+(2-5-2-1) OFFSET_DEF(TYPE, FIELD)
 
 TYPEに構造体のデータ型名,FIELDにその構造体中のフィールドを指定すると,
 TYPE_FIELDという名前のシンボルに,そのフィールドのオフセット値をマクロ
 定義する記述を生成する.
 
-(2-5-1-2) OFFSET_DEF2(TYPE, FIELD, FIELDNAME)
+(2-5-2-2) OFFSET_DEF2(TYPE, FIELD, FIELDNAME)
 
 TYPEに構造体のデータ型名,FIELDにその構造体中のフィールドを指定すると,
 TYPE_FIELDNAMEという名前のシンボルに,そのフィールドのオフセット値をマ
@@ -1522,12 +1671,20 @@ CPUロック解除状態)で呼び出せるように実装しなければな
 
 intnoで指定された割込み要求ラインに対する割込みハンドラの末尾で行うべき
 処理を行う関数.ここで行うべき処理としては,割込みコントローラ(IRC)に
-対する割込み処理の終了通知が挙げられる.
+対する割込み処理の終了通知が挙げられる.
 
 intnoに対して登録された割込みサービスルーチンを呼び出す割込みハンドラの
 末尾で呼び出される.そのためこの関数は,割込みハンドラの末尾(通常は
 CPUロック解除状態)で呼び出せるように実装しなければならない.
 
+ターゲットによっては,IRCに対する割込み処理の終了通知を行う前に,すべて
+の割込みを禁止しなければならない場合がある.この場合には,この関数の中
+で割込みを禁止し,その状態のまま,割込みハンドラからリターンする.割込
+みハンドラからのリターン前には,割込み禁止を解除するのが原則であるが,
+割込みハンドラの出口処理で元に戻す処理を行うので差し支えないはずである.
+割込みハンドラの出口処理が,これで差し支えない実装になっていることを確
+認するべきである.
+
 6.5 タスクディスパッチャ
 
 6.5.1 タスクコンテキストブロックとタスク初期化コンテキストブロック
@@ -1542,15 +1699,16 @@ CPUロック解除状態)で呼び出せるように実装しなければな
 (6-5-1-3) TSKINICTXB(オプション)
 
 ターゲット依存の情報をタスク初期化ブロック(TINIB)に入れたい場合や,
-TINIB中ã\81®ã\82¹ã\82¿ã\83\83ã\82¯é \98å\9f\9fã\81¨サイズと先頭番地の持ち方をターゲット依存に変更し
+TINIB中ã\81®ã\82¹ã\82¿ã\83\83ã\82¯é \98å\9f\9fã\81®サイズと先頭番地の持ち方をターゲット依存に変更し
 たい場合には,USE_TSKINICTXBをマクロ定義し,TINIB中に持つことが必要なデー
 タ構造の型を,TSKINICTXBに定義する.
 
 USE_TSKINICTXBをマクロ定義すると,TINIB中にスタック領域とサイズと先頭番
 地が含まれなくなるため,それに代わる情報をTSKINICTXB中に持つ必要がある.
 また,コンフィギュレータのパス2のテンプレートファイルのターゲット非依存
-部で,TSKINICTXBの初期化情報を生成するためのGENERATE_TSKINICTXBを定義す
-る必要がある.
+部で,TSKINICTXBの初期化情報を生成するためのGENERATE_TSKINICTXBを,パス
+3のテンプレートファイルのターゲット非依存部で,TINIBからスタック領域の
+先頭番地を取り出すためのGET_STK_TSKINICTXBを定義する必要がある.
 
 6.5.2 ディスパッチャ本体
 
@@ -1653,7 +1811,7 @@ dispatch(void)
 #ifdef TOPPERS_SUPPORT_OVRHDR
        ovrtimer_stop();                                        /* オーバランタイマの停止 */
 #endif /* TOPPERS_SUPPORT_OVRHDR */
-       スクラッチレジスタを除くすべてのレジスタをスタックに保存する
+       スクラッチレジスタ(*)を除くすべてのレジスタをスタックに保存する
        スタックポインタを自タスク(p_runtsk)のTCBに保存する
        dispatch_rを,実行再開番地として自タスクのTCBに保存する … (*a)
        dispatcherに分岐する
@@ -1667,16 +1825,20 @@ dispatch(void)
 }
 ----------------------------------------
 
+ここでスクラッチレジスタ(*)とは,関数呼出しにより保存されないレジスタの
+ことである.必要な場合には,関数を呼び出す側で保存しなければならないた
+め,caller saved registerと呼ばれる場合もある.
+
 dispatchを呼び出したタスクが次に実行される時には,実行再開番地として登
 録したdispatch_rに戻ってくる.dispatch_rには,dispatcherのみから分岐し,
 その時の状態は,タスクコンテキスト・CPUロック状態・割込み優先度マスク全
 解除状態・ディスパッチ許可状態である.
 
 (*b)でcalltexを呼ぶ代わりに,calltexの処理内容(p_runtsk->enatexがtrue
\81§ï¼\8cp_runtsk->texptnã\81\8c\81§ã\81ªã\81\84å ´å\90\88ã\81«ï¼\8ccall_texrtnã\82\92å\91¼ã\81¶ï¼\89ã\82\92ã\81\93ã\81\93ã\81«ã\82¤ã\83³ã\83©
\82¤ã\83³å±\95é\96\8bã\81\97ã\81\9fæ\96¹ã\81\8cå\8a¹ç\8e\87ã\81\8cã\82\88ã\81\84ï¼\8eã\82¿ã\83¼ã\82²ã\83\83ã\83\88é\9d\9eä¾\9då­\98é\83¨ã\81®calltexã\82\92使ã\82\8fã\81ªã\81\84å ´å\90\88ã\81«
-は,OMIT_CALLTEXをマクロ定義することで,ターゲット非依存部からcalltexを
-取り除くことができる.
\81§ï¼\8cp_runtsk->texptnã\81\8c\81§ã\81ªã\81\8fï¼\8cipmflgã\81\8ctrueã\81®å ´å\90\88ã\81«ï¼\8ccall_texrtnã\82\92å\91¼ã\81¶ï¼\89
\82\92ã\81\93ã\81\93ã\81«ã\82¤ã\83³ã\83©ã\82¤ã\83³å±\95é\96\8bã\81\97ã\81\9fæ\96¹ã\81\8cå\8a¹ç\8e\87ã\81\8cã\82\88ã\81\84ï¼\8eã\82¿ã\83¼ã\82²ã\83\83ã\83\88é\9d\9eä¾\9då­\98é\83¨ã\81®calltexã\82\92
+使わない場合には,OMIT_CALLTEXをマクロ定義することで,ターゲット非依存
+部からcalltexを取り除くことができる.
 
 6.5.4 ディスパッチャの動作開始
 
@@ -1779,6 +1941,7 @@ ext_tskの番地としておく方法がある.
 void
 <割込みの出入口処理>(void)
 {
+       割込み優先度マスクを,受け付けた割込み要求の割込優先度に設定する … (*i)
        少なくともカーネル管理の割込みを禁止した状態にする … (*f)
        スクラッチレジスタをスタックに保存する
        if (タスクコンテキストで割込み発生) {
@@ -1803,9 +1966,11 @@ void
        if (タスクコンテキストで割込み発生) {
                (少なくとも)カーネル管理の割込みを禁止した状態にする … (*d)
                スタックをタスク用のスタックに戻し,タスクコンテキストに切り換える
+                                                                                                                               … (*g)
                if (reqflg) {
                        reqflg = false;
                        CPUロック状態にする … (*e)
+                       割込み優先度マスクを,全解除状態(TIPM_ENAALL)に設定する … (*h)
                        if (dspflg && p_runtsk != p_schedtsk) {
                                スクラッチレジスタを除くすべてのレジスタをスタックに保存する
                                スタックポインタを自タスク(p_runtsk)のTCBに保存する
@@ -1832,9 +1997,12 @@ void
 }
 ----------------------------------------
 
-割込みの受付けによりすべての割込みが禁止されないプロセッサでは,(*f)に
-おいて,少なくともカーネル管理の割込みを禁止する.この理由は次の通りで
-ある.
+(*i)の割込み優先度マスクを設定する処理は,プロセッサがハードウェアで実
+現している場合も多い.
+
+割込みの受付けにより,スタックポインタが切り換わらず,すべての割込みが
+禁止されないプロセッサでは,(*f)において,少なくともカーネル管理の割込
+みを禁止する.この理由は次の通りである.
 
 割込みの入口処理において,スタックを非タスクコンテキスト用のスタックに
 切り換える前に多重割込みが発生すると,タスクのスタック領域が使用される.
@@ -1850,15 +2018,34 @@ void
 同様のことは,カーネル管理外の割込みにも当てはまる.すなわち,カーネル
 管理外の割込みについても,スタックをなるべく使用しない内に禁止するのが
 望ましい.このことから,カーネル管理外の割込みを使用する場合には,(*f)
-において,すべての割込みを禁止した状態にするのが望ましいことになる.ま
-た,カーネル管理外の割込み処理においても,非タスクコンテキスト用のスタッ
-クに切り換えることが望ましいが,これはカーネルの管轄外である.
+において,すべての割込みを禁止した状態にするのが望ましいことになる.一
+方で,カーネル管理外の割込みの禁止時間が長くなると,カーネル管理外の割
+込みの応答性が低下するため,ユーザに注意を促す必要がある.また,カーネ
+ル管理外の割込み処理においても,非タスクコンテキスト用のスタック(また
+は,カーネル管理外の割込み処理用のスタック)に切り換えることが望ましい
+が,これはカーネルの管轄外である.
 
 (*d)においては,カーネル管理の割込みを禁止するだけで,CPUロック状態にす
 る必要はない.例えば,CPUロック状態であることを示す変数を用意している場
 合には,(*d)の時点ではその変数をCPUロック状態を示す値に変更する必要はな
 く,(*e)において変更すればよい.
 
+(*g)においてタスクコンテキストに切り換える処理は,割込み処理からのリター
+ンによりスタックとコンテキストが元に戻るプロセッサでは,reqflgがtrueの
+場合にのみ行えばよい.reqflgがfalseの時は,非タスクコンテキストのまま処
+理を続け,割込み処理からのリターンでタスクコンテキストに戻ることになる.
+
+(*e)においてCPUロック状態にするのは,dispatcherに分岐する際と,(*b)にお
+いてcalltex(または,それを展開した場合にはcall_texrtn)を呼び出す際に,
+CPUロック状態になっている必要があるためである.
+
+(*h)の処理が実行されるのは,割込み処理前に割込み優先度マスクが全解除状
+態(TIPM_ENAALL)であった場合に限られ,ここで割込み優先度マスクを全解除
+状態に設定するのは,割込み処理前の値に戻すのと等価である.ここでこの処
+理を行うのは,dispatcherに分岐する際と,(*b)においてcalltex(または,そ
+れを展開した場合にはcall_texrtn)を呼び出す際には,割込み優先度マスク全
+解除状態になっている必要があるためである.
+
 タスクの実行中に割込みが発生し,上の処理中でdispatcherに分岐した場合,
 そのタスクが次に実行される時には,実行再開番地として登録したret_int_rに
 戻ってくる.ret_int_rには,dispatcherのみから分岐し,その時の状態は,タ
@@ -1932,9 +2119,10 @@ inhnoで指定された割込みハンドラの出入口処理の番地をint_en
 
 (6-6-4-1) bool_t VALID_INTNO_CFGINT(INTNO intno)(オプション)
 
-intnoが,CFG_INTに対する割込み番号として有効な値である場合にtrue,そう
-でない場合にfalseを返すマクロ.割込み要求ラインの属性を設定できない
-intnoに対しては,このマクロがfalseを返すようにする.
+intnoが,割込み番号として有効な値である場合にtrue,そうでない場合に
+falseを返すマクロ.CFG_INTには,すべての割込み番号を指定することができ
+るため,このマクロは,intnoが有効な値の場合にはtrue,intnoが無効の値の
+場合にはfalseを返すようにする.
 
 ASPカーネルのターゲット非依存部では,このマクロは使われていないため,ター
 ゲット依存部で使わないなら,用意する必要がない.
@@ -1970,22 +2158,21 @@ intatrとして設定できる割込み属性は次の通り.
 これらの属性名をターゲット定義で追加する場合には,その属性値を決定し,
 定義をtarget_kernel.h(または,そこからインクルードされるファイル)に含
 める.また,コンフィギュレータテンプレートファイルから参照できるように,
-target_def.csv(または,そこからインクルードされるファイル)に含め,コ
-ンフィギュレータテンプレートファイルのターゲット非依存部でエラーとなら
-ないように,target.tf(または,そこからインクルードされるファイル)で
-TARGET_INTATRに設定する.
-
-指定された割込み番号がCFG_INTに対するものとして有効な値でない場合や,そ
-の割込み要求ラインに対して設定できない属性を指定した場合,設定できない
-割込み優先度を指定した場合の動作は保証する必要がない(assertでエラーと
-するのが望ましい).このようなケースは,コンフィギュレータでエラーを検
-出すべきである.コンフィギュレータテンプレートファイルのターゲット非依
-存部は,パス2のテンプレートファイルのターゲット依存部で定義する
-INTNO_CFGINT_VALID,TARGET_INTATR,INTPRI_CFGINT_VALIDを用いてエラーを
-検出するが,標準の割込み属性(TA_ENAINT,TA_EDGE)が設定できない場合や,
-設定できない属性や割込み優先度が割込み要求ラインによって異なる場合には,
-コンフィギュレータテンプレートファイルのターゲット依存部で検出しなけれ
-ばならない.
+target_def.csv(または,同等の役割を持つファイル)に含め,コンフィギュ
+レータテンプレートファイルのターゲット非依存部でエラーとならないように,
+target.tf(または,そこからインクルードされるファイル)でTARGET_INTATR
+に設定する.
+
+指定された割込み番号が有効な値でない場合や,その割込み要求ラインに対し
+て設定できない属性を指定した場合,設定できない割込み優先度を指定した場
+合の動作は保証する必要がない(assertでエラーとするのが望ましい).この
+ようなケースは,コンフィギュレータでエラーを検出すべきである.コンフィ
+ギュレータテンプレートファイルのターゲット非依存部は,パス2のテンプレー
+トファイルのターゲット依存部で定義するINTNO_CFGINT_VALID,
+TARGET_INTATR,INTPRI_CFGINT_VALIDを用いてエラーを検出するが,標準の割
+込み属性(TA_ENAINT,TA_EDGE)が設定できない場合や,設定できない属性や
+割込み優先度が割込み要求ラインによって異なる場合には,コンフィギュレー
+タテンプレートファイルのターゲット依存部で検出しなければならない.
 
 6.6.5 割込み管理機能の初期化処理の変更
 
@@ -2108,6 +2295,14 @@ chg_ipmにより,(NMI以外の)カーネル管理外の割込みをマス
 
 ・t_set_ipmを,カーネル管理外の割込みとなる優先度を扱えるようにする.
 
+6.6.8 割込みサービスルーチンの生成
+
+(6-6-8-1) bool_t VALID_INTNO_CREINT(INTNO intno)
+
+intnoが,acre_isrに対する割込み番号として有効な値である場合にtrue,そう
+でない場合にfalseを返すマクロ.動的生成機能拡張パッケージを使用しない場
+合には,定義する必要がない.
+
 6.7 CPU例外ハンドラとCPU例外発生時のシステム状態の参照
 
 6.7.1 CPU例外ハンドラの出入口処理
@@ -2161,6 +2356,7 @@ void
                if (タスクコンテキストでCPU例外発生) {
                        (少なくとも)カーネル管理の割込みを禁止した状態にする … (*d)
                        スタックをタスク用のスタックに戻し,タスクコンテキストに切り換える
+                                                                                                                                       … (*g)
                        if (reqflg) {
                                reqflg = false;
                                CPUロック状態にする … (*e)
@@ -2201,9 +2397,18 @@ CPUロック状態で発生したCPU例外は,カーネル管理外のCPU例
 ネル管理のCPU例外ハンドラについては,CPUロック解除状態で呼び出すことに
 なる.
 
-カーネル管理外のCPU例外であることは,exc_sense_unlockがfalseを返す条件
-と,タスクコンテキストであることを調べないだけの違いであり,ほぼ同じコー
-ドで判定することができる.
+ターゲットによっては,カーネル管理外のCPU例外を正確に判定するのが難しい
+場合がある.このような場合には,割込み優先度マスクが全解除でない状態で
+発生したCPU例外を,カーネル管理外のCPU例外と扱っても支障がない.これは,
+割込み優先度マスクが全解除でない場合には,xsns_dpn,xsns_xpnともtrueを
+返すため,アプリケーションからはカーネル管理外のCPU例外と区別できないた
+めである.
+
+具体的には,全割込みロック(またはCPUロック)を小さいオーバヘッドで実現
+しようとすると,CPU例外ハンドラの中で,全割込みロック状態(またはCPUロッ
+ク状態)と割込み優先度マスクを高いレベルに設定した状態を区別できない場
+合がある.また,カーネル管理外の割込み処理中やカーネル実行中であること
+を正確に判断することも難しい場合がある.
 
 上のコードでは,カーネル管理外のCPU例外に対して,トレースログ取得処理
 (log_exc_enterおよびlog_exc_leave)を呼び出していないが,全割込みロッ
@@ -2217,9 +2422,9 @@ CPU例外ハンドラを実行する際に経由する部分では,CPU例外
 性が考えられる)には,その可能性をターゲット依存部のユーザーズマニュア
 ルに記載しなければならない.
 
-ret_exc以降の処理は,割込みの出入口処理のret_int以降の処理と同じである
\81\9fã\82\81ï¼\8cã\82¿ã\83¼ã\82²ã\83\83ã\83\88ã\81«ã\82\88ã\81£ã\81¦ã\81¯ï¼\8cå\85±é\80\9aã\81®ã\83«ã\83¼ã\83\81ã\83³ã\82\92ç\94¨ã\81\84ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\82\8bå\8f¯è\83½æ\80§ã\81\8c
-ある.
+ret_exc以降の処理は,割込みの出入口処理のret_int以降の処理とほぼ同じで
\81\82ã\82\8bã\81\9fã\82\81ï¼\8cã\82¿ã\83¼ã\82²ã\83\83ã\83\88ã\81«ã\82\88ã\81£ã\81¦ã\81¯ï¼\8cå\85±é\80\9aã\81®ã\83«ã\83¼ã\83\81ã\83³ã\82\92ç\94¨ã\81\84ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\82\8bå\8f¯è\83½
+性がある.
 
 CPU例外の出入口処理をアセンブリ言語で記述する場合には,トレースログ取得
 処理は,「6.2 トレースログ機能への対応」の節で記述した方法でコーディン
@@ -2324,30 +2529,13 @@ default_exc_handlerは,標準のものをターゲット依存部で用意す
 (6-7-6-1) bool_t exc_sense_intmask(void *p_excinf)
 
 CPU例外の発生した時のシステム状態が,カーネル実行中でなく,タスクコンテ
-キストであり,全割込みロック状態でなく,CPUロック状態でなく,(モデル上
-の)割込み優先度マスク全解除状態である時にtrue,そうでない時にfalseを返
-す関数.CPU例外がカーネル管理外の割込み処理中で発生した場合にもfalseを
-返す.
+キストであり,全割込みロック状態でなく,CPUロック状態でなく,割込み優先
+度マスク全解除状態である時にtrue,そうでない時にfalseを返す関数.
 
 p_excinfには,CPU例外の情報を記憶している領域の先頭番地が渡される.
 
-(6-7-6-2) bool_t exc_sense_unlock(void *p_excinf)
-
-CPU例外の発生した時のシステム状態が,カーネル実行中でなく,タスクコンテ
-キストであり,全割込みロック状態でなく,CPUロック状態でない時にtrue,そ
-うでない時にfalseを返す関数.CPU例外がカーネル管理外の割込み処理中で発
-生した場合にもfalseを返す.
-
-ターゲットによっては,全割込みロック(またはCPUロック)を小さいオーバヘッ
-ドで実現しようとすると,CPU例外ハンドラの中で,全割込みロック状態(また
-はCPUロック状態)と割込み優先度マスクを高いレベルに設定した状態を区別で
-きない場合がある.また,カーネル管理外の割込み処理中やカーネル実行中で
-あることを正確に判断することも難しい.そこで,ターゲット定義で,割込み
-優先度マスクをTMIN_INTPRIと同じかそれよりも高い値に設定している状態で発
-生したCPU例外をカーネル管理外のCPU例外と扱うこととし,それに対して
-falseを返すこととしてもよい.
-
-p_excinfには,CPU例外の情報を記憶している領域の先頭番地が渡される.
+CPU例外がカーネル管理外の割込み処理中で発生した場合にもfalseを返さなけ
+ればならないことに注意すること.
 
 6.8 カーネルの起動・終了とスタック領域など
 
@@ -2508,29 +2696,81 @@ OMIT_BITMAP_SEARCHをマクロ定義する.
 
 6.10 カーネル実装に関するその他の定義
 
-6.10.1 非タスクコンテキスト用のスタック領域
+6.10.1 ターゲット依存のオブジェクト属性
+
+(6-10-1) TARGET_TSKATR(オプション)    ターゲット定義のタスク属性
+(6-10-2) TARGET_ISRATR(オプション)    ターゲット定義のISR属性
+(6-10-3) TARGET_INHATR(オプション)    ターゲット定義の割込みハンドラ属性
+(6-10-4) TARGET_INTATR(オプション)    ターゲット定義の割込み属性
+(6-10-5) TARGET_EXCATR(オプション)    ターゲット定義のCPU例外ハンドラ属性
+
+各オブジェクトの属性を,ターゲット定義に拡張する場合に,該当するオブジェ
+クト属性を示す変数に,拡張に使用するビットの論理和を定義する.これによ
+り,拡張に使用するビットが設定されている場合に,エラーになるのを防ぐ.
+
+なお,TOPPERS新世代カーネル統合仕様書では,割込みサービスルーチン(ISR)
+属性をターゲット定義で拡張できる仕様とはなっていない.
+
+6.10.2 エラーチェック方法の指定
 
-(6-10-1-1) DEFAULT_ISTKSZ
+(6-10-1) TARGET_MIN_STKSZ(オプション)
+
+ターゲット定義で,タスクのスタックサイズの最小値を設定する場合には,こ
+の変数をスタックサイズの最小値に定義する.
+
+(6-10-2) CHECK_STKSZ_ALIGN(オプション)
+
+スタック領域のサイズがある値(アライン単位)の倍数でなければならない場
+合に,この変数をアライン単位に定義する.この変数を定義することで,
+kernel.tfおよびacre_tsk(動的生成機能拡張パッケージのみ)において,スタッ
+ク領域のサイズが正しくない(この変数に定義した値の倍数でない)場合のエ
+ラーをチェックするようになる.チェックが必要ない場合には,この変数を定
+義しない.
+
+(6-10-3) CHECK_FUNC_ALIGN(オプション) 処理単位のアライン単位
+(6-10-4) CHECK_FUNC_NONNULL(オプション)処理単位の非NULLチェック
+(6-10-5) CHECK_STACK_ALIGN(オプション)スタック領域のアライン単位
+(6-10-6) CHECK_STACK_NONNULL(オプション)スタック領域の非NULLチェック
+(6-10-7) CHECK_MPF_ALIGN(オプション)  固定長メモリプール領域のアライン単位
+(6-10-8) CHECK_MPF_NONNULL(オプション)固定長メモリプール領域の非NULLチェック
+
+処理単位/スタック領域/固定長メモリプール領域の先頭番地がある値(アラ
+イン単位)の倍数でなければならない場合に,それぞれ,CHECK_FUNC_ALIGN/
+CHECK_STACK_ALIGN/CHECK_MPF_ALIGNをアライン単位に定義する.処理単位/
+スタック領域/固定長メモリプール領域の先頭番地がNULLでないかのチェック
+を行う場合には,それぞれCHECK_FUNC_NONNULL/CHECK_STACK_NONNULL/
+CHECK_MPF_NONNULLを定義する.
+
+(6-10-9) CHECK_MB_ALIGN(オプション)   管理領域のアライン単位
+
+カーネル内の管理領域(具体的には,データキュー管理領域,優先度データ
+キュー管理領域,固定長メモリプール管理領域)の先頭番地がある値(アライ
+ン単位)の倍数でなければならない場合に,この変数をアライン単位に定義す
+る.動的生成機能拡張パッケージを使用しない場合には,定義する必要がない.
+
+6.10.3 非タスクコンテキスト用のスタック領域
+
+(6-10-3-1) DEFAULT_ISTKSZ
 
 DEF_ICSにより非タスクコンテキスト用のスタック領域が指定されない場合の,
 デフォルトのスタック領域のサイズ.
 
-(6-10-1-2) DEFAULT_ISTK(オプション)
+(6-10-3-2) DEFAULT_ISTK(オプション)
 
 DEF_ICSにより非タスクコンテキスト用のスタック領域が指定されない場合の,
 デフォルトのスタック領域の先頭番地.このマクロが定義されない場合には,
 サイズがDEFAULT_ISTKSZのスタック領域が,配列により確保される.
 
-(6-10-1-3) STK_T *TOPPERS_ISTKPT(STK_T *istk, SIZE istksz)(オプション)
+(6-10-3-3) STK_T *TOPPERS_ISTKPT(STK_T *istk, SIZE istksz)(オプション)
 
 非タスクコンテキスト用のスタックポインタの初期値を保持する変数(istkpt)
 を用いる場合に,このシンボルに,スタック領域の先頭番地(istk)とスタッ
 ク領域のサイズ(istksz)から,スタックポインタの初期値を求めるマクロを
 定義する.
 
-6.10.2 空ラベルの定義
+6.10.4 空ラベルの定義
 
-(6-10-2-1) TOPPERS_EMPTY_LABEL(type, symbol)(オプション)
+(6-10-4-1) TOPPERS_EMPTY_LABEL(type, symbol)(オプション)
 
 リンクエラーを防ぐために,データ型typeの配列である変数symbolに定義を与
 えるためのマクロ.与えた定義が参照されることはないため,どのような定義
@@ -2652,7 +2892,7 @@ ASPカーネルでは,実行できるタスクがなく,カーネルがア
     無視するためである.
 
 このサンプルコードを用いて,トレースログを記録・ダンプする方法の例につ
-いては,「TOPPERS/ASPカーネル ユーザーズマニュアル」の「11.5 トレースロ
+いては,「TOPPERS/ASPカーネル ユーザーズマニュアル」の「11.6 トレースロ
 グ記録のサンプルコードの使用方法」の節を参照すること.
 
 なお,このサンプルコードでは,ディスパッチャの出口,タスクの状態遷移,
@@ -2900,6 +3140,77 @@ target_ovrtimer_handler(void)
 この関数は,target_timer.cfg中に記述する静的APIにより,割込みハンドラま
 たは割込みサービスルーチンとしてカーネルに登録することを想定している.
 
+6.15 動的メモリ管理
+
+動的生成機能拡張パッケージを使用する場合には,カーネル内での動的メモリ
+管理の方法を決める必要がある.
+
+動的生成機能拡張パッケージのターゲット非依存部では,メモリ領域を先頭か
+ら順に割り当て,解放されたメモリ領域を再利用しないメモリ管理モジュール
+のみを実装している.デフォルトでは,このメモリ管理モジュールが使用され
+る.
+
+本格的な動的メモリ管理を行いたい場合には,ターゲット依存部またはユーザ
+側で,以下の関数を定義したメモリ管理モジュールを用意する必要がある.
+
+(6-15-1) OMIT_KMM_ALLOCONLY(オプション)
+
+ターゲット非依存部のメモリ管理モジュールを使用せず,ターゲット依存部ま
+たはユーザ側で用意する場合には,このシンボルをマクロ定義する.
+
+(6-15-2) void initialize_kmm(void)(オプション)
+
+メモリ管理モジュールを初期化する関数.カーネルの割り付けるメモリ領域の
+サイズと先頭番地は,それぞれkmmszとkmmによって参照できる.
+
+(6-15-3) void *kernel_malloc(SIZE size)(オプション)
+
+sizeで指定されたサイズのメモリ領域を割り付け,その先頭番地を返す関数.
+割り付けることができない場合には,NULLを返す.
+
+(6-15-4) void kernel_free(void *ptr)(オプション)
+
+ptrで指定されたメモリ領域を解放する関数.
+
+6.15.1 TLSFを用いたメモリ管理モジュールの例
+
+オープンソースのメモリ割付けライブラリであるTLSFを用いて動的メモリ管理
+を実現するには,OMIT_KMM_ALLOCONLYをマクロ定義し,以下の関数定義等をC言
+語ソースファイルに含めればよい.
+
+----------------------------------------
+#include "tlsf.h"
+
+static bool_t  tlsf_initialized = false;
+
+void
+initialize_kmm(void)
+{
+       if (init_memory_pool(kmmsz, kmm) >= 0) {
+               tlsf_initialized = true;
+       }
+}
+
+void *
+kernel_malloc(SIZE size)
+{
+       if (tlsf_initialized) {
+               return(malloc_ex(size, kmm));
+       }
+       else {
+               return(NULL);
+       }
+}
+
+void
+kernel_free(void *ptr)
+{
+       if (tlsf_initialized) {
+               free_ex(ptr, kmm);
+       }
+}
+----------------------------------------
+
 
 7.コンフィギュレータ設定ファイルのターゲット依存部
 
@@ -2990,31 +3301,23 @@ target.tfからkernel.tfをインクルードする前に,次の変数を定
 APIで使用できる割込み番号/割込みハンドラ番号/CPU例外ハンドラ番号/割
 込み優先度のリストを,各変数に定義する.INHNO_ATTISR_VALIDには,
 INTNO_ATTISR_VALIDにリストアップした割込み番号に対応する割込みハンドラ
-番号のリストを定義する.
-
-(7-2-7) TARGET_TSKATR(オプション)             ターゲット定義のタスク属性
-(7-2-8) TARGET_ISRATR(オプション)             ターゲット定義のISR属性
-(7-2-9) TARGET_INHATR(オプション)             ターゲット定義の割込みハンドラ属性
-(7-2-10) TARGET_INTATR(オプション)    ターゲット定義の割込み属性
-(7-2-11) TARGET_EXCATR(オプション)    ターゲット定義のCPU例外ハンドラ属性
-
-各オブジェクトの属性を,ターゲット定義に拡張する場合に,該当するオブジェ
-クト属性を示す変数に,拡張に使用するビットの論理和を定義する.これによ
-り,拡張に使用するビットが設定されている場合に,エラーになるのを防ぐ.
+番号のリストを定義する.CFG_INTには,すべての割込み番号を指定することが
+できるため,INTNO_CFGINT_VALIDには,有効な割込み番号をすべてリストアッ
+プする.
 
-(7-2-12) INTNO_FIX_KERNEL(オプション)         カーネル管理に固定されている
+(7-2-7) INTNO_FIX_KERNEL(オプション)          カーネル管理に固定されている
                                                                                        割込み番号
-(7-2-13) INHNO_FIX_KERNEL(オプション)         カーネル管理に固定されている
+(7-2-8) INHNO_FIX_KERNEL(オプション)          カーネル管理に固定されている
                                                                                        割込みハンドラ番号
-(7-2-14) INHNO_FIX_NONKERNEL(オプション)      カーネル管理外に固定されている
+(7-2-9) INHNO_FIX_NONKERNEL(オプション)       カーネル管理外に固定されている
                                                                                        割込み番号
-(7-2-15) INHNO_FIX_NONKERNEL(オプション)      カーネル管理外に固定されている
+(7-2-10) INHNO_FIX_NONKERNEL(オプション)      カーネル管理外に固定されている
                                                                                        割込みハンドラ番号
 
 カーネル管理またはカーネル管理外に固定されている割込みがある場合には,
 それらの割込み番号と割込みハンドラ番号のリストを,各変数に定義する.
 
-(7-2-16) USE_INHINIB_TABLE(オプション)
+(7-2-11) USE_INHINIB_TABLE(オプション)
 
 OMIT_INITIALIZE_INTERRUPTを定義したが,割込みハンドラの初期化に必要な情
 報をkernel_cfg.cに生成したい場合には,この変数を1に設定する.具体的には,
@@ -3022,27 +3325,14 @@ TNUM_INHNO,tnum_inhno,inhinib_tableの定義と,割込みハンドラ毎
 処理を生成するための記述(INTHDR_ENTRYマクロのリスト)が,ターゲット非
 依存部によって生成される.
 
-(7-2-17) USE_INTINIB_TABLE(オプション)
+(7-2-12) USE_INTINIB_TABLE(オプション)
 
 OMIT_INITIALIZE_INTERRUPTを定義したが,割込み要求ラインの初期化に必要な
 情報をkernel_cfg.cに生成したい場合には,この変数を1に設定する.具体的に
 は,TNUM_INTNO,tnum_intno,intinib_tableの定義が,ターゲット非依存部に
 よって生成される.
 
-(7-2-18) TARGET_MIN_STKSZ(オプション)
-
-ターゲット定義で,タスクのスタックサイズの最小値を設定する場合には,こ
-の変数をスタックサイズの最小値に定義する.
-
-(7-2-19) CHECK_STKSZ_ALIGN(オプション)
-
-スタック領域のサイズがある値の倍数でなければならない場合に,この変数を
-その値に定義する.この変数を定義することで,kernel.tfにおいて,スタック
-領域のサイズが正しくない(この変数に定義した値の倍数でない)場合のエラー
-をチェックするようになる.チェックが必要ない場合には,この変数を定義し
-ない.
-
-(7-2-20) GENERATE_TSKINICTXB(オプション)
+(7-2-13) GENERATE_TSKINICTXB(オプション)
 
 USE_TSKINICTXBをマクロ定義した場合,TSKINICTXBの初期化情報を生成するた
 めテンプレートファイル関数GENERATE_TSKINICTXBを定義する.
@@ -3061,22 +3351,35 @@ kernel.tfの中では次の変数が定義されるため,kernel.tfをイン
 以下では,パス3のテンプレートファイルのターゲット依存部を記述する上で必
 要な事項について説明する.
 
+7.3.1 ターゲット非依存部をインクルードする前に定義すべき変数
+
 target_check.tfからkernel_check.tfをインクルードする前に,必要に応じて,
 次の変数を定義しておかなければならない.
 
-(7-3-1) CHECK_FUNC_ALIGN(オプション) 関数のアライン単位
-(7-3-2) CHECK_FUNC_NONNULL(オプション)関数の非NULLチェック
-(7-3-3) CHECK_STACK_ALIGN(オプション) スタック領域のアライン単位
-(7-3-4) CHECK_STACK_NONNULL(オプション)スタック領域の非NULLチェック
-(7-3-5) CHECK_MPF_ALIGN(オプション)   固定長メモリプール領域のアライン単位
-(7-3-6) CHECK_MPF_NONNULL(オプション) 固定長メモリプール領域の非NULLチェック
+(7-3-1) GET_STK_TSKINICTXB(オプション)
+
+USE_TSKINICTXBをマクロ定義した場合,TINIBからスタック領域の先頭番地を取
+り出すためのテンプレートファイル関数GET_STK_TSKINICTXBを定義する.
+GET_STK_TSKINICTXBには,タスク初期化ブロック(TINIB)の先頭番地がパラメー
+タとして渡される.CHECK_STACK_ALIGN,CHECK_STACK_NONNULLとも定義しない
+場合には,GET_STK_TSKINICTXBを定義する必要はない.
 
-関数/スタック領域/固定長メモリプール領域の先頭番地のアラインメントの
-チェックを行う場合には,それぞれ,CHECK_FUNC_ALIGN/CHECK_STACK_ALIGN/
-CHECK_MPF_ALIGNをアライン単位に定義する.関数/スタック領域/固定長メモ
-リプール領域の先頭番地がNULLでないかのチェックを行う場合には,それぞれ
-CHECK_FUNC_NONNULL/CHECK_STACK_NONNULL/CHECK_MPF_NONNULLを1に定義する.
-チェックが必要ない場合には,該当する変数を定義しない.
+7.3.2 ターゲット依存部で行うべきエラーチェック
+
+以下の先頭番地は,ターゲット非依存部で生成するテーブルに出力されないた
+め,パス3のターゲット非依存部(kernel_check.tf)では,プログラムの開始
+番地として正しくない場合のエラーをチェックしない.そのため,ターゲット
+依存部でエラーチェックを行う必要がある.
+
+・割込みサービスルーチンの先頭番地(ATT_ISRのisr)
+・割込みハンドラの先頭番地(DEF_INHのinthdr)
+・CPU例外ハンドラの先頭番地(DEF_EXCのexchdr)
+・初期化ルーチンの先頭番地(ATT_INIのinirtn)
+・終了処理ルーチンの先頭番地(ATT_TERのterrtn)
+
+ただし,ターゲット依存部においても,これらのエラーチェックを行えるとは
+限らないため,ユーザーズマニュアルの「1.5 既知の問題」の節には,ターゲッ
+ト依存でこれらのエラーが検出されないことがある旨を記載してある.
 
 7.4 cfg1_out.cのリンクに必要なスタブの定義ファイル
 
@@ -3113,6 +3416,11 @@ const SIZE               _kernel_istksz = 0;
 STK_T *const   _kernel_istk = NULL;
 ----------------------------------------
 
+また,コンフィギュレータを用いてオフセットファイル(offset.h)を生成す
+る場合には,そのための記述をtarget_cfg1_out.h(または,そこからインクルー
+ドされるファイル)に追加する必要がある.詳しくは,「2.5.1 コンフィギュ
+レータを用いる方法」の節を参照すること.
+
 
 8.システムサービス等のターゲット依存部
 
@@ -3474,9 +3782,17 @@ CPU例外ハンドラのテストをするテストプログラムから,CPU
 (3-5) 性能評価用システム時刻の参照に関する規定
        ・get_utmのサポートの有無,その制限事項
 
-(3-6) オーバランハンドラ機能拡張のサポートに関する規定
-       ・オーバランハンドラ機能拡張パッケージのサポートの有無
-       ・プロセッサ時間に指定できる値の最大値(TMAX_OVRTIMの値)
+(3-6) 拡張パッケージに関する規定
+       ・各拡張パッケージのサポートの有無
+               - ミューテックス機能拡張パッケージ
+               - オーバランハンドラ機能拡張パッケージ
+               - タスク優先度拡張パッケージ
+               - 制約タスク拡張パッケージ
+               - 動的生成機能拡張パッケージ
+       ・オーバランハンドラ機能拡張パッケージをサポートする場合に,プロセッ
+        サ時間に指定できる値の最大値(TMAX_OVRTIMの値)
+       ・動的生成機能拡張パッケージをサポートする場合に,動的メモリ管理の
+        方法
 
 (3-7) その他
        ・その他の制限事項
@@ -3511,7 +3827,7 @@ CPU例外ハンドラのテストをするテストプログラムから,CPU
 (10) ターゲットシステム固有の注意事項
        ・タスクコンテキストに含まれるレジスタ,含まれないレジスタ
 
-(10) 類似のターゲットにポーティングする開発者向けの参考情報
+(11) 類似のターゲットにポーティングする開発者向けの参考情報
 
 (12) ディレクトリ構成・ファイル構成
 
@@ -3599,6 +3915,8 @@ CPU例外ハンドラのテストをするテストプログラムから,CPU
 標準的なターゲット依存部のファイル構成は次の通りである.
 
 Makefile.target                Makefileのターゲット依存部(2章).
+target_offset.tf       オフセットファイル生成用テンプレートファイル(2.5.1節,
+                                       オプション)
 
 target_stddef.h                TOPPERS共通定義(t_stddef.h)のターゲット依存部(3
                                        章).アプリケーションとカーネルの両方からインクルー
diff --git a/asp/doc/user.odt b/asp/doc/user.odt
deleted file mode 100644 (file)
index c3fe91d..0000000
Binary files a/asp/doc/user.odt and /dev/null differ
index ca7e6e4..4f1da83 100644 (file)
@@ -2,8 +2,8 @@
                TOPPERS/ASPカーネル
                ユーザーズマニュアル
 
-               対応バージョン: Release 1.6.0
-               最終更新: 2010年7月30
+               対応バージョン: Release 1.7.0
+               最終更新: 2011年5月8
 
 このドキュメントは,TOPPERS/ASPカーネルを使用するために必要な事項を説明
 するものである.
@@ -13,7 +13,7 @@
      Toyohashi Open Platform for Embedded Real-Time Systems/
      Advanced Standard Profile Kernel
 
- Copyright (C) 2005-2010 by Embedded and Real-Time Systems Laboratory
+ Copyright (C) 2005-2011 by Embedded and Real-Time Systems Laboratory
              Graduate School of Information Science, Nagoya Univ., JAPAN
  
  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
@@ -45,7 +45,7 @@
  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
  の責任を負わない.
  
- $Id: user.txt 1878 2010-08-01 06:49:31Z ertl-hiro $
+ $Id: user.txt 2069 2011-05-08 08:45:03Z ertl-hiro $
 ----------------------------------------------------------------------
 
 ○目次
@@ -155,6 +155,12 @@ TOPPERS/ASPカーネルを,機能拡張・チューニングするための方
 
 1.5 既知の問題
 
+割込みサービスルーチンの先頭番地(ATT_ISRのisr),割込みハンドラの先頭
+番地(DEF_INHのinthdr),CPU例外ハンドラの先頭番地(DEF_EXCのexchdr),
+初期化ルーチンの先頭番地(ATT_INIのinirtn),終了処理ルーチンの先頭番地
+(ATT_TERのterrtn)がプログラムの開始番地として正しくない場合のエラーは,
+コンフィギュレータに検出されない場合がある(ターゲットに依存).
+
 kernel_cfg.c(およびcfg1_out.c)は,カーネル,システムサービス,アプリ
 ケーションのいずれのインクルードファイルもインクルードし,いずれのシン
 ボルも参照する可能性がある.そのため,カーネル,システムサービス,アプ
@@ -255,7 +261,7 @@ ASPカーネルを用いたシステム構築には,以下のツールが必
                GNU Make        動作確認:3.81
 
        TOPPERS新世代カーネル用コンフィギュレータ
-               cfg                     動作確認:1.6.0
+               cfg                     動作確認:1.7.0
                                        ※ 1.5以前のバージョンでは動作しない.
 
        ターゲットシステム用のツール(クロス開発環境)
@@ -516,6 +522,7 @@ libkernel.aする必要があるので注意すること.
                kernel_def.csv          コンフィギュレータの値取得シンボルテーブル
                kernel.tf                       コンフィギュレータのパス2のテンプレートファイル
                kernel_check.tf         コンフィギュレータのパス3のテンプレートファイル
+               genoffset.tf            オフセットファイル生成用のテンプレートファイル
                allfunc.h               すべての関数をコンパイルするための定義
                check.h                 エラーチェック用マクロ
                startup.c               カーネルの初期化と終了処理
@@ -682,7 +689,7 @@ ASPカーネルを用いてアプリケーションを作成する場合には
 
        -r
                トレースログ記録のサンプルコードを有効にする場合に,このオプショ
-               ンを指定する.このオプションの使用例については,「11.5 トレース
+               ンを指定する.このオプションの使用例については,「11.6 トレース
                ログ記録のサンプルコードの使用方法」の節を参照すること.
 
        -p <perlのパス名>
@@ -819,10 +826,15 @@ $(OBJNAME)となる.
 (M) makedepのオプションの定義
 
 Cygwin環境でルートディレクトリが"cygdrive"でない場合には,makedepの-Rオ
-プションでルートディレクトリ名を与える必要がある.makedepのオプションは,
-次の例のように,MAKEDEP_OPTSに定義する.
+プションでルートディレクトリ名を与える必要がある.また,Makefileのター
+ゲット部(":"の左側)に複数のファイル名を記述すると(カーネルを関数単位
+でライブラリ化する場合に,このような記述が生成される)正しく動作しない
+場合には(Cygwin環境のGNU Makeでこのような制限があるという報告がある),
+makedepに-Sオプションを付与する必要がある.
+
+makedepのオプションは,次の例のように,MAKEDEP_OPTSに定義する.
 
-MAKEDEP_OPTS = -R cygdrive
+MAKEDEP_OPTS = -R cygdrive -S
 
 6.2 コンパイルオプション
 
@@ -1566,12 +1578,23 @@ sns_ctx(),sns_loc(),sns_dsp(),sns_dpn(),sns_tex()の返値として期
 testディレクトリに置かれた"test"で始まるプログラムは,カーネルの機能テ
 ストを行うためのプログラムである.
 
-なお,機能テストプログラムを構築する場合には,MakefileのAPPL_COBJSに,
-test_lib.oを追加する必要がある.コンフィギュレーションスクリプト
-(configure)を使用する場合には,オプションに-U test_lib.oを指定すれば
-よい.
+機能テストプログラムはテストプログラム用ライブラリを使用しているため,
+構築する場合には,MakefileのAPPL_COBJSに,test_lib.oを追加する必要があ
+る.コンフィギュレーションスクリプトを使用する場合には,-Uオプションで
+test_lib.oを指定する.具体的には,次のコマンドを実行すればよい(構築用
+のディレクトリが,ASPカーネルのソースファイルを展開したディレクトリの直
+下にあると仮定している).
 
-現バージョンで用意している性能評価プログラムは次の通り.
+       % perl ../configure -T <ターゲット略称> -A <機能テストプログラム名> \
+                                                                                       -a ../test -U test_lib.o
+
+ただし,CPU例外処理のテスト(1)〜(13)は,同一のシステムコンフィギュレー
+ションを共用しているため,test_cpuexc.cfgを次のようにコピーしておく必要
+がある.
+
+       % cp ../test/test_cpuexc.cfg test_cpuexc<テスト番号>.cfg
+
+現バージョンで用意している機能テストプログラムは次の通り.
 
 (1) test_cpuexc1                       CPU例外処理のテスト(1)
 (2) test_cpuexc2                       CPU例外処理のテスト(2)
@@ -1621,10 +1644,16 @@ testディレクトリに置かれた"perf"で始まるプログラムは,カ
 カーネルの性能評価にあたっては,ハードウェア(特にキャッシュ)の設定に
 留意する必要がある.
 
-なお,性能評価プログラムを構築する場合には,MakefileのAPPL_COBJSに,
+性能評価プログラムはテストプログラム用ライブラリと実行時間分布集計モ
+ジュールを使用しているため,構築する場合には,MakefileのAPPL_COBJSに,
 test_lib.oとhistogram.oを追加する必要がある.コンフィギュレーションスク
-リプト(configure)を使用する場合には,オプションに-U "test_lib.o
-histogram.o"を指定すればよい.
+リプトを使用する場合には,-Uオプションでtest_lib.oとhistgram.oを指定す
+る.具体的には,次のコマンドを実行すればよい(構築用のディレクトリが,
+ASPカーネルのソースファイルを展開したディレクトリの直下にあると仮定して
+いる).
+
+       % perl ../configure -T <ターゲット略称> -A <性能評価プログラム名> \
+                                                                       -a ../test -U "test_lib.o histogram.o"
 
 現バージョンで用意している性能評価プログラムは次の通り.
 
@@ -2210,5 +2239,6 @@ TOPPERSプロジェクトでは,何からの形でプロジェクトに貢献
        2009年5月11日        Release 1.4.0
        2010年6月28日        Release 1.5.0           拡張パッケージを一般公開
        2010年8月1日 Release 1.6.0           cfg-1.6に対応
+       2011年5月8日 Release 1.7.0           動的生成機能拡張パッケージ等の追加
 
 以上
index 9bd1968..c8af337 100644 (file)
@@ -2,8 +2,8 @@
                TOPPERS/ASPカーネル
                変更履歴
 
-               対応バージョン: Release 1.6.0
-               最終更新: 2010年7月25
+               対応バージョン: Release 1.7.0
+               最終更新: 2011年4月10
 
 このドキュメントは,TOPPERS/ASPカーネルのRelease 1.0.0以降の変更履歴を,
 新しい方から順に記述したものである.
@@ -13,7 +13,7 @@
      Toyohashi Open Platform for Embedded Real-Time Systems/
      Advanced Standard Profile Kernel
 
- Copyright (C) 2005-2010 by Embedded and Real-Time Systems Laboratory
+ Copyright (C) 2005-2011 by Embedded and Real-Time Systems Laboratory
              Graduate School of Information Science, Nagoya Univ., JAPAN
  
  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
  の責任を負わない.
  
- $Id: version.txt 1871 2010-07-27 04:24:46Z ertl-hiro $
+ $Id: version.txt 2061 2011-04-10 15:37:35Z ertl-hiro $
+----------------------------------------------------------------------
+
+               TOPPERS/ASPカーネル
+               Release 1.6.0 から 1.7.0 への変更点
+
+○変更点のリスト
+
+・動的生成機能拡張パッケージ,制約タスク拡張パッケージの追加
+
+・タスク例外処理ルーチンの実行開始条件の変更
+       - タスク例外処理ルーチンの実行に関するコードの修正.
+       - ipmflgを導入.
+       - exc_sense_unlockを廃止.
+
+・データキューのコードの修正
+       - データ管理ブロックの導入(他のオブジェクトの実装と整合された).
+
+・SILのメモリ空間アクセス関数に渡すポインタの方の変更
+       - void *を渡していたところを,サイズにあわせて,uint8_t *などに変更.
+
+・動的生成機能拡張パッケージにあわせた修正
+       - t_stddef.hにMB_T型の定義を追加.
+       - コンフィギュレータのテンプレートファイル(パス2および3)で定義し
+         ていたターゲット依存情報を,ヘッダファイルに移動.
+       - kernel_def.csvに,それらの値を取得するための記述を追加.
+       - ポーティングガイドの修正.
+
+・オフセットファイルをコンフィギュレータで生成する方法を追加
+       - genoffset.tfを追加.
+       - kernel_def.csvに,SIL_ENDIAN_BIG/LITTLEを追加.
+       - sample/Makefileを修正.
+       - m68k依存部を,この方法に対応させる.
+       - ポーティングガイドの修正.
+
+・その他のバグフィックス
+       - CHECK_INTPRI_CHGIPMの定義中のtypoを修正.
+       - genoffsetのRelease 1.6.0におけるディグレードを修正.
+       - オーバランハンドラ拡張機能で,ターゲット依存部がオーバランハンド
+         ラをサポートしていない場合には,TCB中のleftotmを定義しないように
+         修正.
+
+・その他の修正
+       - USE_TSKINICTXBをマクロ定義した場合のスタック領域の先頭番地のチェッ
+         クのために,GET_STK_TSKINICTXBを導入.
+       - kernel_cfg.c中で,タスクの先頭番地をTASK型にキャストするように
+         kernel.tfを修正.
+       - ext_tskのE_SYSの返し方を修正.ext_kerもE_SYSを返すコードに修正.
+       - CFG_INTは,有効なすべての割込み番号に対応する方針に従い,コンフィ
+         ギュレータのエラー条件を修正.
+       - makedepに-Sオプションを追加.
+       - シリアルドライバでサポートするポート数を,最大4ポートに変更.
+
+・ドキュメントの充実,コメントの修正
+
+・バージョン番号の更新
+       - カーネルのバージョン番号を更新.
+
+○ターゲット依存部の要修正箇所(1.6.0 → 1.7.0)
+
+(1) ターゲット依存部で,calltexを呼ぶ代わりにcalltexの内容をインライン
+展開している場合に,call_texrtnを呼び出す条件に「ipmflgがtrue」を追加す
+るように修正.
+
+(2) 割込み出入口処理が正しいかの確認.
+       - ポーティングガイドの割込み出入口処理に追加した「割込み優先度マス
+         クを,全解除状態(TIPM_ENAALL)の値に設定する … (*h)」の処理が実
+         現されているかを確認.
+       - ポーティングガイドの6.6.1節の記述を確認((*g)(*i)の注記を追加する
+         など,記述を詳細化した).
+
+(3) exc_sense_unlockの定義を削除.
+
+(4) TARGET_TSKATR,TARGET_ISRATR,TARGET_INHATR,TARGET_INTATR,
+TARGET_EXCATR,TARGET_MIN_STKSZ,CHECK_STKSZ_ALIGNの定義を,ターゲット
+依存部のテンプレートファイル(パス2)からヘッダファイルに移動.
+
+(5) CHECK_FUNC_ALIGN,CHECK_FUNC_NONNULL,CHECK_STACK_ALIGN,
+CHECK_STACK_NONNULL,CHECK_MPF_ALIGN,CHECK_MPF_NONNULLの定義を,ターゲッ
+ト依存部のテンプレートファイル(パス3)からヘッダファイルに移動.
+
+(6) 動的生成機能拡張パッケージに対応.
+       - CHECK_MB_ALIGNの定義を追加.
+       - TSZ_PDQMBの定義を追加(デフォルトで不都合な場合).
+       - VALID_INTNO_CREINTの定義を追加.
+       - 動的メモリ管理に関する定義を追加.
+
+(7) オフセットファイルをコンフィギュレータで生成する方法への対応(必須
+ではないが,対応しておくことが望ましい).詳しくは,ポーティングガイド
+の2.5節を参照すること.
+
+(8) USE_TSKINICTXBをマクロ定義し,CHECK_STACK_ALIGNとCHECK_STACK_NONNULL
+のいずれかを定義している場合には,TINIBからスタック領域の先頭番地を取り
+出すためのテンプレートファイル関数GET_STK_TSKINICTXBを定義.
+
 ----------------------------------------------------------------------
 
                TOPPERS/ASPカーネル