找回密码
 立即注册
查看: 688|回复: 2

关于 STC32 数学函数库 的讨论

[复制链接]
  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 146 天

    [LV.7]常住居民III

    39

    主题

    884

    回帖

    4116

    积分

    荣誉版主

    积分
    4116
    发表于 2023-1-7 15:28:39 | 显示全部楼层 |阅读模式
    STC32 数学函数库, 官方提供的LIB, 我反汇编看了, 原想学习学习, 结果发现有不少问题, 有小问题, 也有大错误(会影响程序执行结果).

    小问题:

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

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

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

    现在已完全没必要了.

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

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

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

    因此, STC32 专用库只需要编写 支持4字节指针即可, 这样, 完全可以只用一个库, 解决所有问题.


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

    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 146 天

    [LV.7]常住居民III

    39

    主题

    884

    回帖

    4116

    积分

    荣誉版主

    积分
    4116
     楼主| 发表于 2023-1-7 15:37:11 | 显示全部楼层
    大问题(错误):

    三.  STC32 官方库, 8位整数转浮点数, 16位整数转浮点数, 32位整数转浮点数, FPMU硬件中, 输入的都是有符号数, 而 Keil编译器,

    输入是充许 有符号数 和 无符号数 两种类型, Keil编译器 通过软件 自动识别, 但 STC32官方库没有这方面的相关处理, 当输入无符号类型的数据,

    当最高位为 1时, 转换结果 会出错.

    四.  浮点数比较(comp), 由于单精度浮点数运算的原因, 尾数会有一定的误差, 如将分别计算出的 2个浮点数, 直接进行精确比较是否相等, 可能

    永远都是不相等的, 无法得出正确的结果, 因此, 精确比较无实用价值.

    Keil编译器在这方面设了一个窗口门阀, 修正尾数最后一字节后再测试比较, 当两数绝对值相差值, 大约小于纯尾数小数的 1/65536 时, 认为是相等的,

    否则不等, 输出 比较 大小结果.

    假如 STC32 设计人员在 FPMU模块 comp功能上, 已经做到了窗口比较, 我认为 设计人员是个人才超级牛逼. 由于手头暂时没有开发板未作验证,

    一般大概率判断, 是不会加入的.
  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 146 天

    [LV.7]常住居民III

    39

    主题

    884

    回帖

    4116

    积分

    荣誉版主

    积分
    4116
     楼主| 发表于 2023-1-7 15:46:07 | 显示全部楼层
    可能存在问题(错误):

    五.  STC32 官方库, 所有浮点数功能模块的调用, 都是直接简单调用, 不知 FPMU硬件模块, 对输入错误(非浮点数, 无穷大), 以及计算中可能出现的

    溢出(无穷大), 怎样处理?

    Keil编译器在这方面做的很好, 用一整套完整的流程判断软件, 提前判断分支处理意外错误输入, 且对最后计算结果作了是否溢出(无穷大)判断处理.

    如 FPMU硬件模块未能做到以上这些, 直接简单调用, 将影响程序运行的可靠性和稳定性, 因此, 需要用软件在适当的地方, 修正相应的问题(非浮点数,

    无穷大等). 等手头有开发板了, 我会作进一步验证, 如有问题, 会在软件中修正解决.


    暂时想到这一些.
    回复 支持 1 反对 0 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-17 07:35 , Processed in 0.071450 second(s), 36 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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