最近,新出来的AI8H2K12U-B版芯片增加了重磅的MDU32D功能,许老师也放出了他提前写好的库,正好我就沾沾许老师的光,来测试一下这个MDU32D。
因为除法对51芯片的时间影响虽大,所以测试就选取32位的除法,对芯片的加速能力进行测试。
以下是测试的部分代码和结果:
unsigned long ul1 = 123456;
/*计算部分测试*/
EA = 0;//避免干扰
P14 = 1;//开始测试,输出为为芯片1脚
for(cnt = 0; cnt<200; cnt++)//循环200次,增加观测时间
{
r3 = ul1/3;//得数应该为41152,实际测试计算正确
}
P14 = 0;
EA = 1;//结束测试


通过计算可以得到,MDU32D对32位除法的加速程度是:
3.25ms/435us=7.47倍
同时,使用MDU32D的时候,还需要注意:

最后的4个指令,因为其输出是超过原有函数正常定义的宽度的,所以需要在进入计算前对乘数部分的数据进行保护,计算完成后再恢复出来。否则如果连续计算同一个乘数,编译器会优化掉后一个乘数的加载,造成计算结果错误。

在对16位乘法进行测试的时候,后一个连续运算的数据出现了错误。这里对16位乘法的R4和R5进行保护后,计算结果就正常了。

不过目前float类型的乘法在复杂小数的情况下出现了一些数值偏差,这部分我就不大会改了,可能要许老师亲自操刀来解决了。