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

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

[复制链接]
  • TA的每日心情
    开心
    昨天 01:53
  • 签到天数: 122 天

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

    积分
    3843
    发表于 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中。

    谢谢!




    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 01:53
  • 签到天数: 122 天

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

    积分
    3843
     楼主| 发表于 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位有符号数-->二进制浮点数
    ......


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


    静请关注!

    谢谢!

    该用户从未签到

    546

    主题

    9104

    回帖

    1万

    积分

    管理员

    积分
    14082
    发表于 2022-12-17 10:03:58 | 显示全部楼层
    必须感谢,一起提高,STC 的 同仁们,家里有啥好东西,各种核心板,实验箱,都给楼上老兄弟配上,
    有布洛芬的也送一盒,一箭双雕之USB转双串口也送上2个
  • TA的每日心情
    奋斗
    2023-12-13 11:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    334

    回帖

    1611

    积分

    版主

    积分
    1611
    发表于 2022-12-17 10:05:55 | 显示全部楼层
    感谢分享,加我QQ:2269694595,送您一箭双雕之USB转双串口,6M bps
    QQ:2269694595     微信:18106296594

    该用户从未签到

    45

    主题

    2841

    回帖

    6388

    积分

    超级版主

    积分
    6388
    发表于 2022-12-17 11:06:18 | 显示全部楼层
    STC8H由于是51架构,限制了寄存器数量,更多的寄存器只能放在xdata中。STC32G的架构则容量大得多。
  • TA的每日心情
    开心
    昨天 01:53
  • 签到天数: 122 天

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

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

    像这种提高运算速度及代码质量的重量级功能,由于数据传送量大,实时性强,应优先放入片内寄存器中,完全可将某些数据传送量小的功能移至XDATA空间,让出几个SFR 。
  • TA的每日心情
    开心
    昨天 01:53
  • 签到天数: 122 天

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

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

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

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

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

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

    希望STC8在今后的版本中,能重点考虑一下这一问题。

    该用户从未签到

    546

    主题

    9104

    回帖

    1万

    积分

    管理员

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



    2.png

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

    该用户从未签到

    546

    主题

    9104

    回帖

    1万

    积分

    管理员

    积分
    14082
    发表于 2022-12-17 12:16:35 | 显示全部楼层
    公司后续是 32位8051 为主,1T 8051为辅,
    STC32G12K128, STC8H8K64U是代表作

    该用户从未签到

    546

    主题

    9104

    回帖

    1万

    积分

    管理员

    积分
    14082
    发表于 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, 2024-4-19 12:36 , Processed in 0.067663 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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