TA的每日心情 | 开心 3 小时前 |
---|
签到天数: 223 天 [LV.7]常住居民III
荣誉版主
- 积分
- 4851
|
楼主 |
发表于 2023-2-4 20:20:28
|
显示全部楼层
STC32G_MDU32 标准数学函数库, 含以下库文件.
1. 浮点加减乘除法
2. 32位整数乘除法(快速)
2. 64位长整数加减乘除法
3. ABS求绝对值.
说明:
一. 编写了浮点数加减乘除法, 其中浮点数除法为快速除法, 由于浮点数加减乘除法, 调用内部公共(判断溢出,处理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, 下载次数: 225)
|
|