- 打卡等级:以坛为家I
- 打卡总天数:312
- 最近打卡:2025-03-11 13:20:13
荣誉版主
- 积分
- 5395
|
发表于 2023-9-10 00:05:39
|
显示全部楼层
根据以上测试结果,对官方库 作了整理和修改,
主要改动地方有:
一. 官方库有点多, Large 模式和 Huge 模式 分开 两个库, 没必要, Keil 官方库, 这两种 模式, 都是合并成一个库的, 方便使用.
而让 Keil 官方分开的库, 是根据 Memory 储存模式不同, 分别 封装 不同的库, 其最主要的区别, 是 2字节指针 和 4字节指针.
2字节指针, 是为了兼容 51程序, 直接在 251上运行, 一般使用 Binary模式运行, 早期的芯片容量不大, 为节约内存而使用.
现在已完全没必要了.
STC32 采用 Source模式运行, 且芯片容量又大, 官方手册强调 STC32G 是 4字节指针。
因此, STC32 专用库只需要编写 支持4字节指针即可, 这样, 完全可以只用一个库, 解决所有问题.
二. 官方库编译时会产生大量警告及无用代码, 把库按照正规标准格式书写后编译, 这些警告及无用代码, 都不存在了。
三. STC32 官方库, 8位整数转浮点数, 16位整数转浮点数, 32位整数转浮点数, FPMU硬件中, 输入的都是有符号数, 而 Keil编译器,
输入是充许 有符号数 和 无符号数 两种类型, Keil编译器 通过软件 自动识别, 但 STC32官方库没有这方面的相关处理, 当输入无符号类型的数据,
当最高位为 1时, 转换结果 会出错,现已修正。
四. 浮点数比较(comp), 由于单精度浮点数运算的原因, 尾数会有一定的误差, 如将分别计算出的 2个浮点数, 直接进行精确比较是否相等, 可能
永远都是不相等的, 无法得出正确的结果, 因此, 精确比较无实用价值.
Keil编译器在这方面设了一个窗口门阀, 修正尾数最后一字节后再测试比较, 当两数绝对值相差值, 小于一定值时, 认为是相等的,
否则不等, 输出 比较 大小结果。
|
|