= GR-SAKURA向けTOPPERS/ASP3 = GR-SAKURA(Renesas RX63N)向けにTOPPERS/ASP3 Ver.3.2.0のターゲット依存部を実装しました。[[br]] ASP3は動的生成版にオーバーランハンドラを組み込んだものになりますので、ターゲット依存部はOSタイマーとオーバーランタイマーの両方の実装があります。[[br]] ターゲット依存部はGR-SAKURA向けのASPを元に、GR-PEACHのASPとASP3との差分などで対応が必要な箇所を調査して作成しました。[[br]] == ダウンロード == ソースコードは[https://dev.toppers.jp/trac_user/contrib/browser/asp3_gr_sakura/trunk こちら]にあります。リストの下にある「Download in other formats:」の「Zip Archive」をクリックすると、zipファイルでダウンロードできます。 == GR-SAKURA向けのASPからの変更内容 == === OSタイマー === ASP3からティックレスになりタイマーの単位がマイクロ秒になりました。[[br]] GR-PEACHのターゲット依存部では32bitのタイマーを使用しています。33.33MHzで0x00000000から0xFFFFFFFFまでカウントするタイマーで、約2分で一巡します。十分長い時間なのでティックレス化が実現しています。[[br]] GR-SAKURAでは6MHzの16bitタイマーを使用したため、約11ミリ秒で一巡してしまいティックレスとは言いにくいですが、マイクロ秒単位のタイマーは実現しました。[[br]] GR-SAKURAでは、OSタイマーに16bitタイマーを2つ使用します。一つは6MHzで0x0000から0xFFFFまでカウントするタイマーで、一巡した時の割り込みで16bitのカウンターをインクリメントします。このカウンターとタイマーのカウント値で32bitのフリーランタイマーを疑似的に作ります。もう一つは、コンペアマッチ用のタイマーで、下位16bit分のタイムアウトの割り込みに使用します。GR-SAKURAのコンペアモードではカウンターは設定値になると0に戻ってしまうので、ワンショットタイマーとして使用します。[[br]] 割り込み禁止中に疑似32bitタイマー値を読む場合、上位のカウンターが更新されていないことがあるので、割り込みフラグを確認して上位のカウンター値を補正(+1)して32bitタイマー値を作ります。 === オーバーランハンドラタイマー === オーバーランハンドラタイマーでは、更にもう一つのタイマーを使用します。OSタイマーのワンショットタイマーと同じように使用し、下位16bitのタイマーとして使用します。[[br]] 割り込み処理の入り口で、タスクの処理時間のカウントを読むため疑似32bitタイマーを読みこみますが、フリーランタイマーの割り込みかどうかを確認する必要があります。それは、上位のカウンターの補正をする必要があるかどうかの判断に必要になります。割り込み処理の入り口で、ターゲット非依存部の{{{ovrtimer_stop}}}関数を呼び出し、ターゲット依存部の{{{target_ovrtimer_stop}}}を呼びますが、フリーランタイマーの割り込みかどうかを確認するため、割り込み番号を渡せるよう引数を追加しています。 === RX63N依存部 === ディスパッチャーの実装のあるRX63N依存部では、ASPにあった{{{reqflg}}}と{{{dspflg}}}はASP3で削除されたので対応しました。{{{reqflg}}}は{{{p_schedtsk}}}と{{{p_runtsk}}}が同じかどうかの比較で置き換え、{{{dspflg}}}関連の処理は削除しました。[[br]] また、タスク例外処理もASP3で削除されたので対応部分を削除しました。 その他、ASP3の「doc/version.txt」ファイルの「○ターゲット依存部の主な要修正箇所(1.9.0 → 3.A.0)」に書かれている内容を適用しました。 === シリアルドライバ === シリアルドライバを含むsyslog関連がTECS化されているので、RZ/A1依存部のファイル「scif.h」「tSCIF.cdl」「tSCIF.c」とGR-PEACH依存部のファイル「tSIOPortGRPeachMain_inline.h」「tPutLogGRPeach.c」「tPutLogGRPeach.cdl」「tSIOPortGRPeach.cdl」をコピーして使用し、レジスタの定義や関数内の処理をASPの「target_serial.c」「target_serial.h」を元に変更しました。 === TINET === TINET 1.7を含んでいますが、タイマー値と思われる箇所をミリ秒からマイクロ秒に変更しただけで、動作は未確認です。 === その他 === 先だって公開した[wiki:rubycfg_asp GR-SAKURA向けASPのRuby版コンフィギュレーター]を作成してあったため、それを流用してASP3のターゲット依存部へ適用することができました。