0

関数のハードウェア遅延として 16 ビット タイマーを使用していますdelay_ns(UINT32 ui32_delay_val_ns);。関数内でdelay_valは で除算されていTcyます。タイマーTcyは 25ns (40MHz での命令サイクル時間) で実行されるため、すべてのティック (または TMR4 val ビット) は 25ns になります。

優れたソフトウェア エンジニアが行うべきこととして、この関数を使用していくつかのテストを実行したところ、何か疑問に思ったことがありました。

タイミングを参照してください: delay_ns: 10、a=2 b=27 c=485 d=494 e=504

私は 250ns を要求しました。これは 25ns の 10 TMR4 ティックです。

a は BOOL bStart = 1 および TMR4.ON = 1 の後です。(2サイクルは奇妙なことではありません)。

b = 前の 16 ビット キャスト ui 32 ビット val 値を 25 で割った後の TMR4 val;

c = TMR4 val (b の直後!!) 元の 32 ビット val を 25 で割ったとき。

ご覧のとおり、16 ビットの val を使用すると 25 命令サイクルのコストがかかりますが (もしかしたらかなり多いのでしょうか?)、32 ビットを使用すると +450 サイクルのコストがかかりますか? つまり、32 ビット val の単純な除算には 11.5 us かかります!!

特に、これは Microchip の dsPIC33 バリアントであり、いくつかの改善 (パイプライン、ダブル ACU など) があるためです。16ビットMCUなのはわかっていますが、なぜそんなにサイクルがかかるのですか?

4

0 に答える 0