找回密码
 立即注册
查看: 79|回复: 7

AI8051U没有内置硬件移位?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-09-08 10:24:44

6

主题

37

回帖

134

积分

注册会员

积分
134
发表于 6 天前 | 显示全部楼层 |阅读模式
从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。
移位指令的速度不如除法?官方在设计的时候这点都没有考虑到吗?硬件乘除法、移位、浮点数之类的不能都加上吗?现在搞得真头大。
还是我测量的有问题?


截图202509081350271315.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:521
  • 最近打卡:2025-09-13 08:52:59

33

主题

2544

回帖

5535

积分

论坛元老

积分
5535
发表于 6 天前 | 显示全部楼层
MDK也能给51单片机用了?
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:567
  • 最近打卡:2025-09-13 12:30:47
已绑定手机
已实名认证

116

主题

2803

回帖

7082

积分

版主

积分
7082
发表于 6 天前 | 显示全部楼层
有没有测试工程可以发一下?移位肯定是比除法要快的
不过对于硬件加速这个方面,确实整数下只有乘除存在加速单元,
移位应该是使用的内置指令集进行移位的
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:492
  • 最近打卡:2025-09-13 09:58:17

9

主题

421

回帖

3009

积分

论坛元老

积分
3009
发表于 6 天前 | 显示全部楼层
AI8051的硬件MDU跟TFPU的时钟频率要比系统时钟高得多,但是MDU跟TFPU没有专门的移位指令,所以做硬件乘除法运算可能要比做移位指令快
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-09-08 10:24:44

6

主题

37

回帖

134

积分

注册会员

积分
134
发表于 6 天前 | 显示全部楼层
_奶*** 发表于 2025-9-8 15:08
MDK也能给51单片机用了?

MDK分为C51 C251 ARM三个版本
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-09-08 10:24:44

6

主题

37

回帖

134

积分

注册会员

积分
134
发表于 6 天前 | 显示全部楼层
王*** 发表于 2025-9-8 15:26
有没有测试工程可以发一下?移位肯定是比除法要快的
不过对于硬件加速这个方面,确实整数下只有乘除存在加 ...

我把工程发上来。32.768MHz主频。AI8051U。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-09-08 10:24:44

6

主题

37

回帖

134

积分

注册会员

积分
134
发表于 6 天前 | 显示全部楼层
这就是测试工程。右移指令比硬件除法慢很多。

ceshi.zip

55.2 KB, 下载次数: 3

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:521
  • 最近打卡:2025-09-13 08:52:59

33

主题

2544

回帖

5535

积分

论坛元老

积分
5535
发表于 6 天前 | 显示全部楼层
水水水*** 发表于 2025-9-8 15:56
MDK分为C51 C251 ARM三个版本

参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-9-14 11:08 , Processed in 0.147471 second(s), 97 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表