
		TOPPERS/FMP3カーネル
		変更履歴

		対応バージョン: Release 3.2.0
		最終更新: 2021年01月7日

このドキュメントは，TOPPERS/FMP3カーネルの変更履歴を，新しい方から順に
記述したものである．また，TOPPERS/FMPカーネル Release 1.4.0との主な違い
についても記載している．

----------------------------------------------------------------------
 TOPPERS/FMP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Flexible MultiProcessor Kernel

 Copyright (C) 2019-2021 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: version.txt 274 2021-01-08 10:05:00Z ertl-honda $
----------------------------------------------------------------------

		TOPPERS/FMP3カーネル
		Release 3.1.0 から 3.2.0 への主な変更点

○変更点のリスト

●仕様変更，機能拡張

・拡張情報の型をEXINFに変更

・割込みサービスルーチンを実行するプロセッサに関する仕様変更に対応
	- 割込み要求ライン初期化ブロックのaffinityフィールド（割付け可能プ
	  ロセッサ）に生成する情報を，対応するDEF_INHがある場合，対応する
	  CRE_ISRがある場合，どちらもない場合で変えるように変更．
	- CFG_INTに関するエラーチェックを，2回に分けて実施．
	- [ARM依存部] 割付け可能プロセッサが複数あるクラスの囲み内に
	  CRE_ISRやCFG_INTを記述した場合には，コンフィギュレータが警告メッ
	  セージを出し，クラスの初期割付けプロセッサのみで割込みを受け付け
	  るように設定するように変更．
	  
・[ARMコア依存部] 性能評価時のキャッシュの無効化の実装
	- HIST_INVALIDATE_CACHEがマクロ定義されている場合には，性能評価に
	  おいて実行時間を計測する前に，キャッシュと分岐予測を無効化する．

●不具合修正

・通知ハンドラ名の衝突の問題の修正
	- タイムウィンドウ通知の通知ハンドラの関数名が，周期通知やアラーム
	  通知と衝突する可能性がある問題を本格的に修正．

・取得しているスピンロックの初期化の場所の変更
	- initialize_spin_lock()において，p_my_pcb->p_locspn をNULLに初期化
	  しており，スピンロック機能を使わない場合はこの関数は呼び出されない．
	  一方，この変数はunl_cpu()で参照されるため，sta_ker()で初期化する．
    
・優先度変更時のサブ優先度のチェック漏れの修正
	- 変更後の優先度がサブ優先度の対象かつ，schedtskと優先度が同じ場合は
	  サブ優先度を比較してp_schedtskの更新を行うように修正．
    
・サービスコール単位でのリンクの対応漏れ
	- chg_sprが抜けていたため追加    

・get_tstの実行状態の判定文の修正
	- get_tstで，対象タスクが実行状態であるかの判定文が誤っていた不具
	  合を修正．

・ref_tsk()おけるサブ優先度の取得の修正
	- 休止状態でもサブ優先度を取得するように修正．
  
・通知ハンドラ名の衝突の問題の修正
	- タイムウィンドウ通知の通知ハンドラの関数名が，プロセッサ間で衝突
	  する問題と，周期通知やアラーム通知と衝突する可能性がある問題を修
	  正．

・ディスパッチ保留状態でタスク切換えが起こる不具合の修正
	- dis_dspとchg_ipm内で，ジャイアントロックを取得した後に，タスク切
	  換えが必要であればディスパッチを行うように修正．

・trcv_dtqの条件文の修正
	- trcv_dtqで，タスク終了要求のチェックの後のif文に，elseが抜けてい
	  た不具合を修正．

・get_tstの実行状態の判定文の修正
	- get_tstで，対象タスクが実行状態であるかの判定文が誤っていた不具
	  合を修正．

・p_my_pcb->p_locspnの初期化箇所の修正
	- p_my_pcb->p_locspnの初期化処理を，initialize_spin_lockから
	  sta_kerに移動．このフィールドは，スピンロックを使用しない場合で
	  も，unl_cpu内で参照されるため．

・xsns_dpnの不具合修正
	- タスクコンテキストから呼び出された場合は，trueを返すように修正．

・get_my_pcbの定義の修正
	- get_my_pcbのデフォルトの定義を，kernel_cfg.c中に生成される割込み
	  ハンドラから呼び出されるのに対応できるように修正．

・コンフィギュレータの不具合修正
	- クラスの指定値が有効範囲外の場合に，エラーメッセージを出力した後，
	  コンフィギュレータがエラーで落ちる不具合を修正．
	- DEF_ICSに関するエラーメッセージのパラメータが書き換わらないよう
	  に修正．
	- エラーメッセージの修正（"must be with a class" → "must be
	  within a class"）
	- エラーメッセージの修正（"any kernel memory object" → "any
	  memory object"）

・ARMコア依存部，チップ依存部，ターゲット依存部の不具合修正
	- ARMv7では，SMP有効時にACTLRのFWビットを設定するように修正．
	- request_dispatch_prc，request_ext_ker，request_set_hrt_eventのパ
	  ラメータの型の誤りを修正．
	- オーバランハンドラを使用する場合のレジスタ保存の抜けを修正．

・その他の不具合修正
	- msta_cycとmsta_almの出口のログ取得マクロ名の誤りを修正．
	- タスクマイグレーションログの取得漏れを修正．
	- time_event.h中のtmevtb_enqueueとtmevtb_dequeueのパラメータ名の誤
	  りを修正（プロトタイプ宣言なので実害なし）．
	- マスタプロセッサであることを判別するマクロis_mprcを廃止．

・メモリバリア操作の追加
   - 他プロセッサのp_schedtskを書き換える前に，メモリバリア操作を行う
     ようにする．

●機能改善

・コンフィギュレータのエラーメッセージの改善
	- コンフィギュレータ本体のエラーメッセージ出力関数を拡張・整理．そ
	  れを活用するように生成スクリプトを変更．
	- inhno／intnoが有効範囲外のエラーの場合に，初期割付けプロセッサ／
	  割付け可能プロセッサに関するエラーチェックを行わないように修正．
	- カーネル管理外の割込みに関するエラーメッセージを改善．
	- 静的APIの文法エラーに対するエラーメッセージを改善．
	- 静的APIテーブルにエラーがあった場合に，ファイル名と行番号を出力
	  するように変更．

●実装改善

・ディスパッチハンドラを除外できるように変更
	- ディスパッチハンドラが不要な場合に，OMIT_DISPATCH_HANDLERをマク
	  ロ定義することでコードを除外できるように変更．
	- [ARMコア依存部] この変更を活用するように変更．

・必要とするカーネルの内部関数にp_my_pcbを渡すように変更
	- タイムイベント管理モジュールのコールバック関数に，p_my_pcbを渡す
	  ように変更．
	- twdtimer_start/stop/controlに，p_my_pcbを渡すように変更．
	- define_inhとconfig_intに，p_my_pcbを渡すように変更．

・update_schedtskの実装改善
	- これまでのupdate_schedtskを，update_schedtsk_dspにリネーム．

・get_infの実装改善
	- 排他制御するのをやめた（その必要がないため）．

・ext_kerの実装の改善
	- ext_ker_handlerでは，他のプロセッサにプロセッサ間割込みをかけな
	  いように変更．

・スピンロックの自動解放の実装改善
	- force_unlock_spinの呼出しを，task_terminateからext_tskに移動．
	- force_unlock_spinを呼び出すのを，CPUロック状態の場合のみにした．

・内部関数の必要性の低いパラメータを廃止
	- make_active，activate_context，make_runnable，migrate_self，
	  dispatch_and_migrate，make_non_wait，make_non_runnable，
	  wait_dequeue_tmevtb，change_priority，mutex_drop_priorityのp_pcb
	  （またはp_new_pcb）パラメータを廃止．

・PCB関連のファイルの整理
	- EVTTIM，TMEVTN，TMEVTBの定義を，time_event.hからtmevt.hに分離し，
	  tmevt.hをpcb.hからインクルードする．
	- target_pcb.hの内容をtarget_kernel_impl.hに移して，target_pcb.hは
	  廃止．pcb.hをtarget_kernel_impl.hより後にインクルードする．
	- target_kernel_impl.h中のPCBの内容にアクセスするインライン関数は，
	  マクロでの実装に変更．

・ARMコア依存部，チップ依存部，ターゲット依存部の実装改善
	- 実行状態のタスクのマイグレート時に使用するスタックを，非タスクコ
	  ンテキスト用スタックに変更．
	- 周辺デバイスへのポーリングに待ち（sil_dly_nse(100)）を入れた．
	- sil_dly_nseのアラインメントを64ビット境界に変更．
	- 不必要な命令の削除．

・スピンロックの自動解放の実装改善
	- force_unlock_spinの呼出しを，task_terminateからext_tskに移動．
	- force_unlock_spinを呼び出すのを，CPUロック状態の場合のみにした．

・システムサービスの実装の改善
	- ログ情報の出力時に，渡されたログバッファに書き込まないように変更．
	- syslog_printfにおいて，必要なパラメータが5つより多い場合に，5つ
	  を超えるパラメータを読まないように変更．

・その他の実装改善
	- check.hに，check_disdspとget_p_selftskを追加．
	- p_selftskが使えるところでは，p_my_pcb->p_runtskをp_selftskで置き
	  換える．
	- 標準の割込みハンドラ初期化ブロックから，affinityフィールド（割込
	  みハンドラの割付け可能プロセッサ）を削除．標準のdefine_inhのパラ
	  メータから，affinityを削除．
	- loc_spn内のgotoを無くすように変更．
	- スピンロックに関するコンフィギュレーション処理の順序を前に移動．
	- マスタプロセッサであることを判別するマクロis_mprcを廃止．
	- 前方参照のためにtypedefしたデータ型も，再度typedefするように変更．

●その他（テストプログラム，サンプルプログラム等）

  ・テスト実行スクリプト（testexec.rb，testcfg.rb）の改善
	- 複数のカーネルライブラリを持てるように拡張．
	- 処理の指示方法（コマンド）の改善（testexec.rbのみ）．
	- TARGET_OPTIONSへの記述順序の整理（testexec.rbのみ）．

・テストプログラムの改善・変更
	- ARM依存のテストプログラムarm_cpuexcを，arm_cpuexc1にリネーム．テ
	  スト内容を変更（SVCによるCPU例外処理のテストを除外）．

・ARMコア依存部，チップ依存部，ターゲット依存部の変更
	- MPCoreのグローバルタイマによるtarget_hrt_raise_eventの実装を，直
      接割込みを要求する形に変更．

・サンプルプログラムの修正
	- サンプルプログラムを，CPUEXC1の定義を参照しないように修正．

・テストプログラムの修正
	- 通知処理のテスト(1)（test_notify1）の変数の型の誤り（intptr_tと
	  int_tのサイズが異なる場合に不具合が発生）を修正．
	- マルチプロセッサ対応のアラーム通知のテスト(2)（test_malarm2）が
	  意図通りのテストになっていなかったのを修正．
	- 一部のテストプログラムがカーネルの変更に追従していなかったため修正．

・テストプログラムの改善・変更
	- セマフォ機能のテスト(1)（test_sem1），スピンロック機能のテスト
	  (2)（test_spinlock2），過渡的な状態のテスト(2)（test_mtrans2）の
	  テスト項目を追加．
	- 過渡的な状態のテスト(5)（test_mtrans5）を追加．
	- マルチコア対応テストプログラムにおいて終了時にコア間の同期を追加．
	- マルチコア対応テストプログラムにおいて2コア以外コンフィギュレーショ
	  ンでビルドするとエラーとなるよう変更．

・ドキュメントの充実，コメントの修正

・バージョン番号の更新
	- カーネルとカーネル仕様のバージョン番号を更新．

○ターゲット依存部の要修正箇所（3.1.0 → 3.2.0）

(1) メモリバリア操作の追加
	- memory_barrier関数の定義を追加する．

(2) 内部関数の不要なパラメータの廃止に対応
	- activate_context，migrate_self，dispatch_and_migrateのp_pcb（ま
	  たはp_new_pcb）パラメータが廃止されたのに対応する．

(3) 標準のdefine_inhとconfig_intのパラメータの変更に対応
	- define_inhのパラメータに，p_my_pcbを追加．affinityを削除．
	- config_intのパラメータに，p_my_pcbを追加．

(4) 割込みサービスルーチンを実行するプロセッサに関する仕様変更に対応
	- 割込みを複数のプロセッサで受け付けることができない場合には，割込
	  みサービスルーチンを，属するクラスの初期割付けプロセッサで実行す
	  るように対応（TargetCheckCreIsrと新設のTargetCheckCfgInt2で対応）．

(5) ディスパッチハンドラが不要な場合は除外するように変更
	- ディスパッチハンドラが不要な場合には，OMIT_DISPATCH_HANDLERをマ
	  クロ定義する．

(6) is_mprcマクロを使用しないように変更

----------------------------------------------------------------------
		TOPPERS/FMP3カーネル
		Release 3.0.0 から 3.1.0 への主な変更点

○主な変更点のリスト

●仕様変更，機能拡張

・高分解能タイマが64ビットの場合に対応
	- t_stddef.hにおけるHRTCNT型の定義を変更．
	- set_hrt_eventにおいて，タイムイベントヒープが空の場合と，高分解
	  能タイマに指定する相対カウント値がHRTCNT_BOUNDよりも大きい場合の
	  処理を変更．マクロ定義のチェックを追加．
	- MPCore内蔵タイマ用のタイマドライバ（USE_MPCORE_GTC_HRTの場合）と
	  タイマドライバシミュレータを，高分解能タイマを64ビットにできるよ
	  うに拡張（target_hrt_clear_eventの追加など）．

・コンフィギュレータの仕様変更
	- 静的APIの後に";"がない場合はエラーとするように変更．

・ARMコア依存部，チップ依存部，ターゲット依存部の仕様変更
	- フェイタルデータアボートをエミュレートされたCPU例外と位置付け，
	  CPU例外ハンドラ番号を割り付けた．

・カーネルのデータ構造を配置するセクションの指定方法の変更
	- TargetGenXXX を廃止して，クラスから，カーネルのデータ
	  領域のセクション名を返すSecnameKernelData()とスタック
	  領域のセクション名を返すSecnameStack()をターゲット依
	  存部で用意するよう変更．

・[ARM依存部] 割込みハンドラのバイパス機能の追加
	- USE_BYPASS_IPI_DISPATCH_HANDERを定義すると，他コアからのディスパッ
	  チ要求割込み受付時に割込みハンドラを呼び出さず，割込み処理を終了
	  させるように変更．

●不具合修正

・trcv_dtqでrelease_glockを2回呼ぶパスがある不具合を修正

・initialize_interrupt内で使用する変数の誤りを修正

・その他の不具合修正
	- 不要なextern宣言（set_my_hrt_event）の削除．
	- リネーム記述（kernel_rename.def等）の修正．
	- 静的APIの最後に";"が抜けている不具合の修正．

・コンフィギュレータの不具合修正
	- パス3の終了処理ルーチンに関するチェックの不具合を修正．

・ARMコア依存部，チップ依存部，ターゲット依存部の不具合修正
	- ARMv7では，SMP有効時にACTLRのFWビットを設定するように修正．

●実装改善

・ARMコア依存部，チップ依存部，ターゲット依存部の実装改善
	- core_test.hにおけるCPU例外の発生コードを見直し．
	- ARM依存のテストプログラム（arm_cpuexc）を追加．
	- sp804.hを削除．
	- software_term_hookを，target_exitから呼ぶように変更．

・タイマドライバシミュレータの実装改善
	- タイマ割込みの発生時刻の設定状況を表すデータ型（INT_EVENT）を導入. 

・その他の実装改善
	- VALID_TMOUTの定義を変更．
	- check_adjtimのパラメータの型と，エラーチェックの条件式を変更．
	- TOPPERS_ISTKPTが定義されていない時に，idstk_tableを生成するよう
	  に変更．

●その他（テストプログラム，サンプルプログラム等）

・configureとsample/Makefileの修正
	- configureへのオプションで，ライブラリのリンク記述を追加できるよ
	  うに，configureとsample/Makefileを修正．

・テストプログラムの追加
	- [ARM依存部] ARM向けFPUのテスト(1)（arm_fpu1）を追加．

・gentest.rbの拡張（HRMP3カーネル向けのものを導入）
	- マルチプロセッサに対応．
	- 元のファイルを置き換える仕様に変更．
	- ローカル変数を定義する機能を追加．

・トレースログ記録のサンプルコードに他のカーネル向けの拡張を追加

・ドキュメントの充実，コメントの修正

・バージョン番号の更新
	- カーネルとカーネル仕様のバージョン番号を更新．

○ターゲット依存部の要修正箇所（3.0.0 → 3.1.0）

(1) パス2の生成スクリプトのターゲット依存部の仕様変更への対応
	- DefineVariableSectionの定義を追加する．
	- SecnameKernelDataの定義を追加する．
	- SecnameStackを，clsに$TCLS_NONEが渡された場合に対応できるように
	  修正する．
	- TargetGenXXXを削除．

(2) 高分解能タイマが64ビットの場合に対応（オプション）
	- 高分解能タイマを64ビットにできる場合には，必要に応じて対応する．
	  具体的には，ASP3カーネルのポーティングガイドの(3-8-1)，(5-3-1)，
	  (6-13-2-5)の設定に対応し，tool_svc.hのターゲット依存部に，
	  CAL_SVC_0M_R_UINT64の定義を追加する．

(3) [ARM依存部] software_term_hookの呼び出し箇所変更への対応
	- 必要であれば，target_exitにsoftware_term_hookを呼ぶ処理を追加す
	  る．

----------------------------------------------------------------------
		TOPPERS/FMP3カーネル
		Release 1.4.0 から 3.0.0 への主な変更点

○主な変更点のリスト

※ ASP3カーネル Release 3.3.1 をベースにしているため，ASPカーネルから
   の変更点についてはASP3カーネルの変更履歴を参照のこと．

※ 以下の変更点のリストは，主なもののみをリストアップしたものであり，網
   羅的なリストではない．

・機能の追加／廃止
	- サブ優先度機能の追加

・スケジューラの実装の変更
	- アイドル処理用のスタックを用意

・タイムイベント処理のティックレス化
	- ティックレス化に伴う仕様変更に伴いタイムイベントモジュールを変更．

・その他の実装の変更
	- カーネル内ロック方式をジャイアントロックのみに．

