- 打卡等级:以坛为家I
- 打卡总天数:312
- 最近打卡:2025-03-11 13:20:13
荣誉版主
- 积分
- 5395
|
发表于 2023-12-1 18:01:05
|
显示全部楼层
本帖最后由 LAOXU 于 2023-12-1 18:02 编辑
tzz1983 应该也不难, 指数就是左移或右移, 不过没研究那么深了,哈哈
===============================================================
二进制浮点数 转 十进制浮点数 , 运算复杂, 需要使用 大量的中间局部变量, 数据缓冲区等, 这些都不能占用任何明面上的 片内与片外 RAM,
不能使用任何 C51编译器 识别和固定使用的, 以及回收可重复使用的 RAM.
受 中断保护 入栈的 寄存器 , 共 13个 8位的, R0-R7 , A, B, PSW, DPH, DPL
你想想, 浮点数输入, 占用 4字节 (R4-R7), A, B, PSW, 逻辑运算和数学运算要占用, DPH 和 DPL, XRAM 和 CODE 读写数据要占用,
连 R0,R1 都要让一个出来, 给片内 RAM 寻址读写数据用, 还剩下 3个 8位的 寄存器, 能派多大用处?
printf 函数, 相信你用过, 格式化字符串和附加的参数 一大串, 都要占内存, 一经占内存就变成不可重入的了,
vprintf 函数, 比printf 函数, 还多了一个指针, 输出的格式化数据, 不是直接通过串口送出, 而是写入缓冲区, 可以用 PUTS 函数发送,
也可以通过 DMA, 将输出缓冲区的数据发送.
此程序的难点, 不是在于写个规范标准程序, 而是要求, 不能占用 单片机的任何明面上的 RAM 资源, 以达到真正的可重入函数级别,
唯一能放数据的地方就是 SP 堆栈了, 彻底不占用 单片机任何明面上的 RAM 资源, 而 C51不像 C251, 不支持堆栈寻址(没这方面任何指令).
所以我说, 不是一般的难编写, 有几次写程序, 写着写着就彻底绝望了, 没有一个多余的字节(寄存器)能给我可用. 程序转不出啊~~~
|
|