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

关于 STC32 数学函数库 的讨论

[复制链接]

50

主题

1219

回帖

5513

积分

荣誉版主

积分
5513
发表于 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字节指针即可, 这样, 完全可以只用一个库, 解决所有问题.


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

回复

使用道具 举报 送花

50

主题

1219

回帖

5513

积分

荣誉版主

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

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

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

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

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

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

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

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

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

一般大概率判断, 是不会加入的.
回复

使用道具 举报 送花

50

主题

1219

回帖

5513

积分

荣誉版主

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

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

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

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

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

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


暂时想到这一些.
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-11-7 14:03 , Processed in 0.066823 second(s), 49 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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