よくある質問(FAQ)

関数の実行途中にI/Oレジスタの値を変化させることはできますか? 無限ループ状態となり関数が終了しません。

無限ループの回避策について

質問

通信の受信関数をテストしたいのですが、ステータスレジスタを監視している箇所があり、シミュレーション途中でステータスフラグを変化させることは可能でしょうか。
現状、ステータスフラグ待ちの箇所で無限ループとなり、関数が終了しません。

■ステータスフラグの監視
while ((SCFSR_0 & RDF) == 0)
{
 // 受信待ちの間の処理
}

回答

スタートアップコマンドファイル(SS_STARTUP.txt)にマクロコマンドを追加することで、シミュレーション途中にステータスフラグを変更することが可能です。
例えば、シミュレーション実行中に対象のステータスフラグ(例:RDFフラグ)をONする処理を追加することで、ステータス待ちループから脱出させることができます。
■対応方法(概要)
・SS_STARTUP.txt にマクロコマンドを追加
・任意のタイミングでステータスフラグ(例:RDF)をONする処理を記述
・シミュレーションを実行し、動作を確認
■補足
本方法により、実機での割り込みや受信イベントを模擬することが可能となり、
ステータス待ち処理を含む関数の単体テストを実施できます。