#4連投の2つ目です。今回、ソースコードの記述でちょっと特殊なことをしている点は、以下の通りです。コード生成機能が生成した割り込み関数を自前の割り込み関数で置き換えるCC-RL/GNURL78の最適化オプションで未使用の変数/関数を削除する最適化を実施することを前提にして、以下のマクロを定義して使用してみました。0~#endifで括ってしまう手もあったなぁ、と投稿の下書きを書いていて思いました。コード生成機能が生成した関数で使用すると都合が悪くなる関数を使用不可にするCC-RL/GNURL78の最適化オプションで未使用の変数/関数を削除する最適化を実施することを前提にして、以下の記述をしてみました。(こちらに関してはマクロの定義はしていません。Simulatorの入出力パネルでN-chオープンドレイン出力ポートにアクティブロウ設定でLEDを接続しても、残念ながらLEDを点灯させることが出来ませんでした。Up設定すれば、点灯させることが出来ます。(これは、上記の一般的な接続とは異なるもの、ですが。studioでは毎回手動で設定しなければならないことです。(CS+ではmtpjファイルに記憶されます。Simulatorにダウンロードした時)には、N-chオープンドレイン出力ポートが通常のCMOS出力ポートに設定されるようにしました。studio)によって自動的に書き換えるようにしています。Up設定を毎回手動で行うことを気にしても仕方無かったかもしれないなぁ、と投稿の下書きを書いていて思いました。DTC転送時の送信開始処理と送信終了判定処理DTC転送時の送信開始処理と送信終了判定処理は、以下の通りにしました。RL78マイコンのSAUでは、RXマイコンのCSIとは異なり、送信バッファエンプティ割り込みと送信終了割り込みが共通になっており(どちらにするかSAUのレジスタで切り替える)、また、同様にRXマイコンのCSIとは異なり、送信終了割り込みはエッジ検出なのではないかと思われます。*/}以下、RL78/G14のユーザーズマニュアルのハードウェア編の画面コピーと私のメモの書き込みです。以下のRL78/G14のユーザーズマニュアルのハードウェア編の画面コピーの通り、幾つかの命令の実行時にDTC転送が保留されることがあるのですが、DTC転送が保留されている間は割り込みも保留されることになっています。不運にも、移植元のRX-TBのサンプルプログラムでは、タイマ割り込み(FreeRTOSのTick割り込み)によってタスク切り替えが起きることを前提に、単なるタスクの一例として、以下のタスクを記述していました。$$となり、これはDTC保留命令になります。この命令が実行され続けますので、DTC転送が保留され続けてしまうと同時に、タイマ割り込み(FreeRTOSのTick割り込み)も保留され続けてしまいます。結局、タスク切り替えが起きなくなり、サンプルプログラムが動作しなくなってしまいました。そこで、以下の通り、NOPを挿入することにして回避しました。Simulatorでは動作してしまいましたので、実機で動作させようとした途端に動作しなくなってしまったことに関して、暫く原因について思い悩みました。以下、RL78/G14のユーザーズマニュアルのハードウェア編の画面コピーです。