本帖最后由 DebugLab 于 2024-8-18 18:35 编辑
使用的单片机是:8051U
乘法和除法单元(称为 MDU32)提供快速的 32 位算术运算。 MDU32 支持无符号和补码有符号整数操作数。 MDU32 由专用的直接内存访问控制模块(称为 DMA)。所有 MDU32 算术操作都是通过向DMA 控件写入 DMA 指令来启动的寄存器 DMAIR。 MDU32 模块执行的所有算术运算的操作数和结果位于寄存器 R0-R7。
MDU32 执行乘除法运算时,单片机会自动切换到 IDLE 模式,即 CPU 停止时钟指令,其它外设仍继续工作。运算完成后,单片机自动切换到正常工作模式
实验方法:
添加“STC32_MDU32_LARGE_Vxx.LIB”到keil中
然后while中添加测试代码,P10用于测试运行时间
- while(1)
- {
- P10 = 0;
- sint1 = 0x31030F05;
- sint2 = 0x00401350;
- xsint = sint1 * sint2;
- uint1 = 5;
- uint2 = 50;
- xuint = uint1 * uint2;
- uint1 = 528745;
- uint2 = 654689;
- xuint = uint1 / uint2;
- sint1 = 2000000000;
- sint2 = 2134135177;
- xsint = sint1 / sint2;
- sint1 = -2000000000;
- sint2 = -2134135177;
- xsint = sint1 / sint2;
- sint1 = -2000000000;
- sint2 = 2134135177;
- xsint = sint1 / sint2;
- P10 = 1;
- sint1 = 0x31030F05;
- sint2 = 0x00401350;
- xsint = sint1 * sint2;
- uint1 = 5;
- uint2 = 50;
- xuint = uint1 * uint2;
- uint1 = 528745;
- uint2 = 654689;
- xuint = uint1 / uint2;
- sint1 = 2000000000;
- sint2 = 2134135177;
- xsint = sint1 / sint2;
- sint1 = -2000000000;
- sint2 = -2134135177;
- xsint = sint1 / sint2;
- sint1 = -2000000000;
- sint2 = 2134135177;
- xsint = sint1 / sint2;
- }
复制代码
测试结果:
使用MDU32执行时间为:7.43us
不使用MDU32执行时间为:43.3us
|