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 = TMR4 val 在我将之前的 16 位铸造 ui 32 位 val 值除以 25 之后;

当我将原始 32 位 val 除以 25 时,c = TMR4 val(直接在 b 之后!!)。

如您所见,使用 16 位 val 需要 25 个指令周期(可能也很多?),但使用 32 位需要 +450 个周期?换句话说,一个 32 位 val 的简单除法需要 11.5 us!

特别是因为这是 Microchip 的 dsPIC33 变体,它有一些改进(流水线、双 ACU 等)。我知道它是一个 16 位的 MCU,但为什么要花这么多周期?

4

0 回答 0