開発のヒント

CPU

NOPを使ったソフトウェア遅延の注意点

一般的に 『 while (i < n) { _asm("NOP"); } 』 などで、ソフトウェア遅延を作りますが、Cortex®-Mの場合、NOPがパイプラインで実行されない場合があります。

Cortex-Mの命令の説明書には、次のように記載されています。
NOP does nothing. NOP is not necessarily a time-consuming NOP. The processor might remove it from the pipeline before it reaches the execution stage.
(訳 : NOPは何の操作もしません。NOPは必ずしも時間を費やすとは限りません。パイプライン処理の中で、演算実行ステージの前に、プロセッサがNOPをパイプラインから削除することもあります。)

したがって、NOPをソフトウェア遅延に使用すると、所望の遅延時間が得られない場合がありますので、ご注意ください。

ソフトウェアで遅延時間を作りたい場合は、HALのHAL_Delay( );をお使いください。

過去の開発のヒントはこちら