找回密码
 立即注册
查看: 4593|回复: 16

对STC8H硬件MDU16所用寄存器的建议

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2022-12-17 05:17:43 | 显示全部楼层 |阅读模式
STC8H硬件中,有自带MDU16硬件16位乘除法器,不但支持整型、长整型类型的数据乘除法运算,

但更多也是最强劲的功能和用途,在于作为浮点数运算的基本组成单元!

相信这是MDU16硬件16位乘除法器,芯片设计者的心愿和目标。


最近对STC32感兴趣,研究重写了其数学函数库,STC32的硬件MDU32和FPMU很有特色,及其接地气,

直接把参数传递放在R0-R3,R4-R7,和Keil编译器参数传递溶为一体!

顺手把STC8H的数学函数库,也重写了一下(官方的数学库,也太可怜了,只有最简单的三个基本操作函数)。

发现STC8H将数据功能寄存器,映像在xRAM中,是最大的败笔,对模拟长整型及浮点数运算,需多次调用MDU16,

看着又臭又长的,片外片内来回折腾,反复重复着的传送代码,一个脑袋的头痛!!!

除了代码长度增加N多,执行时间和效率降低许多,而且程序的可读性及其差!

最后没办法,写了一些宏定义,把数行传送代码,转为一句宏代码,才使改写的程序,有了清晰的可读性,

看着顺眼多了。

因此,建议芯片设计者,在今后的设计中,优先考虑一下,STC8H将MDU16数据功能寄存器,是否可将其映像,

放在片内RAM或片内SFR中。

谢谢!




回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2022-12-17 05:38:16 | 显示全部楼层
STC8H系列单片机C51定点库、浮点库自动调用专用运算库函数,合适有效地插入了STC8H系列的特色----准16位乘除法指令。并且针对

STC8H系列集成了16位硬件乘除法器,作了特别优化。

增加了对所有关联到的无符号、有符号int型,无符号、有符号long型 和 float型变量的乘除运算,均作了运算速度大幅度提升,为方便使用,

以外挂库形式加入,实行对C51内库自动替换,无缝嵌入,其中最具有特色的是float型的除法运算,用STC8H系列的准16位乘除法指令,

代替原Keil C51的加减法模拟除法程序,大幅度地提升了原float型的除法的运算速度,解决了原51浮点除法特慢的通病。

内部函数库列表:


extern         int16   uishr(int16 value1, uint8  value2);                          // 16位无符号数右移N位
extern         int32   slshr(int32 value1, uint8  value2);                         // 32位有符号数右移N位
extern         int32   ulshr(int32 value1, uint8  value2);                          // 32位无符号数右移N位
extern         int16    ishl(int16 value1, uint8  value2);                          // 16位数左移N位
extern         int32    lshl(int32 value1, uint8  value2);                          // 32位数左移N位

extern        uint16   imul(uint16 value1,uint16 value2);                 // 16位*16位-->16位(无符号二进制乘法)   
extern        uint16  uidiv(uint32 value1,uint16 value2);              // 16位/16位-->16位(无符号二进制除法)   
extern        uint32   lmul(uint32 value1,uint32 value2);                 // 32位*32位-->32位(无符号二进制乘法)   
extern        uint32  uldiv(uint32 value1,uint32 value2);              // 32位/32位-->32位(无符号二进制除法)   
extern        float   fpadd(float value1, float value2);                  // 二进制浮点数加法  
extern        float   fpsub(float value1, float value2);                  // 二进制浮点数减法  
extern        float   fpmul(float value1, float value2);                  // 二进制浮点数快速乘法  
extern        float   fpdiv(float value1, float value2);                  // 二进制浮点数快速除法  

extern        float   fcastl(int32 value1);                        // 32位有符号数-->二进制浮点数
......


目前在做程序最后优化及库功能测试,等测试通过了即上传公开,包括函数库及库程序所有原型!


静请关注!

谢谢!
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2022-12-17 10:03:58 | 显示全部楼层
必须感谢,一起提高,STC 的 同仁们,家里有啥好东西,各种核心板,实验箱,都给楼上老兄弟配上,
有布洛芬的也送一盒,一箭双雕之USB转双串口也送上2个
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-27 10:40:24

11

主题

425

回帖

1971

积分

版主

积分
1971
发表于 2022-12-17 10:05:55 | 显示全部楼层
感谢分享,加我QQ:2269694595,送您一箭双雕之USB转双串口,6M bps
QQ:2269694595     微信:18106296594
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2022-12-17 11:06:18 | 显示全部楼层
STC8H由于是51架构,限制了寄存器数量,更多的寄存器只能放在xdata中。STC32G的架构则容量大得多。
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2022-12-17 11:25:20 | 显示全部楼层
那也要分轻重呀~~~

像这种提高运算速度及代码质量的重量级功能,由于数据传送量大,实时性强,应优先放入片内寄存器中,完全可将某些数据传送量小的功能移至XDATA空间,让出几个SFR 。
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2022-12-17 11:44:08 | 显示全部楼层
一个程序的好坏,除了执行速度还有代码长短。

做复杂一点的功能程序(如浮点乘除运算),汇编程序长度比原来增加近一倍!

而且还是汇编源代码做了充分优化的情况下,多余反复的片外片内来回折腾传送代码,

严重影响着执行运算速度,数据量不集中且实时性极高,DMA不能用,DPTR自动指针效果不明显,

已实在想不出有什么办法能来弥补这一缺陷。

希望STC8在今后的版本中,能重点考虑一下这一问题。
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2022-12-17 12:15:17 | 显示全部楼层
1.png



2.png

帮多提建议,继续提高,共同进步

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2022-12-17 12:16:35 | 显示全部楼层
公司后续是 32位8051 为主,1T 8051为辅,
STC32G12K128, STC8H8K64U是代表作
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2022-12-17 12:22:45 | 显示全部楼层
RMB2.7/2.6/2.5的 STC32G8K64-42MHz-LQFP48/LQFP32/TSSOP20
下周送样,同步大量接受订货

RMB2的 STC32F12K64-72MHz-LQFP48/LQFP32/TSSOP20 , 流片中
===有硬件单精度浮点运算器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-2 02:19 , Processed in 0.155683 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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