AI8051U没有内置硬件移位?
从STC8H单片机切换到AI8051U。32位乘除法运算时间都是正常的。但是左移和右移非常慢,这是怎么回事?举例:
主频:33.1176MHz。MDK无优化,我建议不要开优化。不然编译器会把没有使用的变量优化掉,然后测出来的时间一点都不准确!就比如说下面的half_cmd变量,如果后续没有对该变量做运算操作,这个变量就会被优化掉。测量出来的时间大幅缩短!但是实际上后续需要该变量做运算的时候,这个变量就不会被优化,导致实际测量的时间比单测这个语句的时间要长的多。因此建议大家在测试的时候不要开优化!全部测完再开优化。
uint32_t cc,dd;
int32_t half_cmd;
cc = 0x1234;
dd = 0x5678;
IO1 = 1;
half_cmd = (int32_t)cc * dd;
half_cmd = half_cmd / 32768;
IO1 = 0;
上面的乘除法运算是1.3us。
只需要把half_cmd = half_cmd / 32768;替换成half_cmd = half_cmd >> 15;所需要的时间就变成4us。
移位指令的速度不如除法?官方在设计的时候这点都没有考虑到吗?硬件乘除法、移位、浮点数之类的不能都加上吗?现在搞得真头大。
还是我测量的有问题?
MDK也能给51单片机用了? 有没有测试工程可以发一下?移位肯定是比除法要快的
不过对于硬件加速这个方面,确实整数下只有乘除存在加速单元,
移位应该是使用的内置指令集进行移位的
AI8051的硬件MDU跟TFPU的时钟频率要比系统时钟高得多,但是MDU跟TFPU没有专门的移位指令,所以做硬件乘除法运算可能要比做移位指令快 _奶咖君_ 发表于 2025-9-8 15:08
MDK也能给51单片机用了?
MDK分为C51 C251 ARM三个版本 王昱顺 发表于 2025-9-8 15:26
有没有测试工程可以发一下?移位肯定是比除法要快的
不过对于硬件加速这个方面,确实整数下只有乘除存在加 ...
我把工程发上来。32.768MHz主频。AI8051U。 这就是测试工程。右移指令比硬件除法慢很多。 水水水木木木 发表于 2025-9-8 15:56
MDK分为C51 C251 ARM三个版本
{:jingya:}
页:
[1]