请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
楼主: 乘风***

STC32库函数20230318版更新

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

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

    积分
    3843
    发表于 2023-2-4 20:25:31 | 显示全部楼层
    说明:
    一. 编写了浮点数加减乘除法, 其中浮点数除法为快速除法, 由于浮点数加减乘除法, 调用内部公共(判断溢出,处理0,规格化等)子程序,

    如仅加入 C251浮点数快速除法, 没法调用C251内部公共子程序, 使得编译后程序代码变长, 故这次浮点数加减乘除法全部加入.

    二. MDU32 所带的 32位整数乘除法(快速)

    三. C251不支持 64位长整数类型, 加入64位长整数加减乘除法运算函数库, 扩大了C251的应用范围.

    如需使用 64位长整数加减乘除法, 请在程序开头, 插入头文件 LONG64.h , 其他程序都是内部标准函数, 无需插入头文件.

    附带 64位长整数加减乘除法 测试程序, 请单步运行, 观察程序运行后的数学运算结果.

    四. 关于 ABS求绝对值. 上次看 STC32 官方FPMU库, 发现 8位整数转浮点数, 16位整数转浮点数, 32位整数转浮点数, 存在错误.

    顺便看了一下 Keil C251自带的 ABS函数, 发现其执行代码, 可作进一步优化, 这次将其优化后加入.

    包含 ABS, CABS, LABS, FABS 函数

    五. 官方库有点多, Large 模式和 Huge 模式 分开 两个库, 没必要, Keil 官方库, 这两种 模式, 都是合并成一个库的, 方便使用.

    而让 Keil 官方分开的库, 是根据 Memory 储存模式不同, 分别 封装 不同的库, 其最主要的区别, 是 2字节指针 和 4字节指针.

    2字节指针, 是为了兼容 51程序, 直接在 251上运行, 一般使用 Binary模式运行, 早期的芯片容量不大, 为节约内存而使用.

    现在已完全没必要了.

    STC32 采用 Source模式运行, 且芯片容量又大, 如 Memory 储存模式选择 Tiny模式, 大一点的程序就编译通不过了,

    就算通过了, 且怀疑运行是否正常? 工作是否可靠? (官方手册强调 STC32G 是 4字节指针), 当用 2字节指针, 去访问

    CODE 中的常数, 会产生什么结果? (我没测试过, 但大概率是不会有好结果的).

    因此, STC32 专用库只需要编写 支持4字节数据指针即可, 这样, 完全可以只用一个库, C251 编译器 自动识别 Large 和 Huge 模式,

    很容易的解决库程序兼容问题.

    六. 官方库编译时会产生大量警告及无用代码, 把库按照正规标准格式书写后编译, 这些警告及无用代码, 都将不会存在了.

    STC32G_LIB.rar (202.47 KB, 下载次数: 68)

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

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

    积分
    3843
    发表于 2023-2-4 20:44:36 | 显示全部楼层
    采用特别的数学算法, 使用 MDU32单元, 改写原 C251 单精度浮点数除法, 使得运算速度大幅度提升, 请看测试结果.




    该用户从未签到

    546

    主题

    9104

    回帖

    1万

    积分

    管理员

    积分
    14082
    发表于 2023-2-5 09:36:45 | 显示全部楼层
    当家帮忙多测试测试

    元宵节快乐,STC 8051 新/老兄弟天天过节:)
  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 144 天

    [LV.7]常住居民III

    67

    主题

    798

    回帖

    2648

    积分

    金牌会员

    积分
    2648
    发表于 2023-2-6 12:26:31 | 显示全部楼层
    LAOXU 发表于 2023-2-1 06:53
    宏定义经人工优化后, 在 C251编译环境下, 效果好多了, 代码长度接近 汇编级, 我再看看, 是否还能再优化, 期 ...

    请问怎样优化?
  • TA的每日心情
    慵懒
    昨天 19:12
  • 签到天数: 113 天

    [LV.6]常住居民II

    1

    主题

    106

    回帖

    1797

    积分

    金牌会员

    积分
    1797
    发表于 2023-2-7 17:05:18 | 显示全部楼层
    LAOXU 发表于 2023-2-1 07:32
    宏定义又做了进一步优化, 在 C251编译环境下, 已达到极限了, 红框内的代码, 因 C251 编译器问题, 无法去除( ...

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

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

    积分
    3843
    发表于 2023-2-7 19:14:20 | 显示全部楼层
    xxkj2010 发表于 2023-2-6 12:26
    请问怎样优化?

    1. 以不同写法, 编译后看反汇编代码, 分析哪种写法能让编译器最优化代码.

    2. 尽量拆分代码, 一句语句只干一件简单的事, 复杂的事手工拆分, 通过多语句组合, 并且试着用不同写法, 来完成这件事,

    举个例子:
    1个复杂一点的数学表达式, 直接编译代码长度为 X字节, 当你拆分后, 分别计算中间的每一个步骤, 再一点点合并起来运算, 看上去复杂化了, 可读性差了, 用到的中间临时变量多了, 但实际编译后, 你往往会发现, 实际上程序代码长度缩的更短小, 占用的 DATA内存变的更少

    该用户从未签到

    546

    主题

    9104

    回帖

    1万

    积分

    管理员

    积分
    14082
    发表于 2023-2-14 10:06:53 | 显示全部楼层

    STC32库函数 20230207版及权威使用指南上线,改进意见征集中
    2023/2/15,  9:05
    江苏销售团队集中学习:
    STC32G库函数 的: I/O, 外部中断,定时器,实战 !
    用 STC-USB Link1D 仿真,STC32G12K128 实验箱 实践


    内部学习完成后,广大初学者都可以
    工作时间:  8:30-12:00  13:00-17:30(周一 到 周五, 法定节假日除外)
    加STC华南区客服刘经理QQ: 3398500488 ;微信:18106296592  要求 【免费+包邮】 送, 还免费教你仿真  
    加STC华南区客服曹经理QQ:1933892258 ;微信:18106296595 要求 【免费+包邮】 送, 还免费教你仿真
    加STC华东区客服聂经理QQ:2593903262;微信:18106296598  要求 【免费+包邮】 送, 还免费教你仿真
    加STC西北区客服孙经理QQ: 1347154513 ;微信:18106296593  要求 【免费+包邮】 送, 还免费教你仿真
    加STC华北区客服石经理QQ: 1638975601 ;微信:19952583876  要求 【免费+包邮】 送, 还免费教你仿真
    加STC华中区客服唐经理QQ:2571301708 ;微信:18106296589 要求 【免费+包邮】 送, 还免费教你仿真
    加STC东北区客服张经理QQ:3141888640 ;微信:19952583265   要求 【免费+包邮】 送, 还免费教你仿真
    加STC西南区客服张经理QQ:3141888640 ;微信:19952583265   要求 【免费+包邮】 送, 还免费教你仿真
    【免费+包邮】 送/申样热线:0513-55012928、0513-55012929、0513-55012966

  • TA的每日心情
    奋斗
    半小时前
  • 签到天数: 118 天

    [LV.6]常住居民II

    26

    主题

    1224

    回帖

    3833

    积分

    论坛元老

    积分
    3833
     楼主| 发表于 2023-2-15 18:22:37 | 显示全部楼层
    LAOXU 发表于 2023-2-1 07:37
    这是测试代码, 能自动识别 C51编译器 和  C251编译器 , 编译出最优最短的执行代码.

    我用您提供的库函数例程进行了测试,通过串口将配置后的寄存器内容通过串口打印出来,结果跟预期的有点不一样,请帮忙分析一下是否我的测试方法有问题。
    附件是测试代码

    TEST1-UART.zip

    9.48 KB, 下载次数: 71

    点评

    OK  发表于 2023-2-15 18:31
  • TA的每日心情
    开心
    昨天 01:53
  • 签到天数: 122 天

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

    积分
    3843
    发表于 2023-2-15 18:52:26 | 显示全部楼层
    初步测试了一下, 串口1 没有输出

    想起来了, 无论 STC8H 还是 STC32 , 串口1(P3.0, P3.1) 引脚都被 仿真器 占用 , 你要换到 其他口, 测试

    我测试时, 没用 串口输出, 直接单步运行, 看结果的.
  • TA的每日心情
    开心
    昨天 01:53
  • 签到天数: 122 天

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

    积分
    3843
    发表于 2023-2-15 21:15:03 | 显示全部楼层
    乘风飞扬 发表于 2023-2-15 18:22
    我用您提供的库函数例程进行了测试,通过串口将配置后的寄存器内容通过串口打印出来,结果跟预期的有点不 ...

    我这里只配置了仿真器, 没搞板子 ISP 下载,

    假如你通过 ISP 下载, 或 改变输出I/O, 有输出的话, 请将输出结果裁图, 贴出.

    我只要看一下输出内容, 核实一下即可
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-4-19 09:35 , Processed in 0.068259 second(s), 66 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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