こんにちは。ojojと申します。プログラム作成中に不明な動きが発生して困っております。
よろしくお願いいたします。
[質問概要] 無限ループした際に、1回目の処理のみ時間が30nsec~50nsec程度遅延します。
[使用マイコン] RX23t
[経緯]
汎用ポートで数10~100nsec単位の信号波形を作る必要があり、無限ループ内でnop()などを使用して信号波形を整形しました。
すると、1ループ目の波形のみ間延びする現象が確認されました。
検証したところ、単純な無限ループでポートHIGH/LOWした時も最初の1ループ目のみ間延びしています。
逆アセンブラなどを見ても処理的には同じところを通っているように見受けられましたので、
どういう処理でこういう現象が起きるのか疑問に思っております。
どなたがご知見のある方がいらっしゃいましたらお教えいただけないでしょうか。
[コード]
#include "r_smc_entry.h"
void main (void){
while(1){ PORT2.PODR.BIT.B2 = 1; PORT2.PODR.BIT.B2 = 0; }}
[コード説明]
P22でひたすらポートをHIGH/LOWしているだけです。開始直後の初回ループのみ、ループに時間がかかります。
goto 文で試してみたらどうですか
リカルド様
ご回答ありがとうございます。
goto文でwhile(1)を代替いたしましたが、同様の現象が確認されました。
(初回ループが30nsec程度遅い状態)