打印

请教:8位单片机中如何定义3字节类型的浮点数?

[复制链接]
5829|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fxhfxh|  楼主 | 2015-8-21 19:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C51中的浮点数类型(float)好像都是默认占4字节内存的,我现在因为各种原因要用3字节的浮点数,那么在C程序的编写时,该如何定义这个3字节类型的浮点数呢?谢谢先。

相关帖子

沙发
ayb_ice| | 2015-8-21 19:56 | 只看该作者
不支持

使用特权

评论回复
板凳
fxhfxh|  楼主 | 2015-8-21 20:03 | 只看该作者

谢谢楼上朋友的回复,那我想用3字节的浮点数的话,就只有用汇编来写了吗?

使用特权

评论回复
地板
ayb_ice| | 2015-8-21 20:27 | 只看该作者
fxhfxh 发表于 2015-8-21 20:03
谢谢楼上朋友的回复,那我想用3字节的浮点数的话,就只有用汇编来写了吗? ...

有什么必要非要使用3字节浮点数呢

使用特权

评论回复
5
dirtwillfly| | 2015-8-22 08:01 | 只看该作者
现在一般的编译器都是四字节的浮点数

使用特权

评论回复
6
ningling_21| | 2015-8-22 10:08 | 只看该作者
C51不支持,试试用汇编实现

使用特权

评论回复
7
fxhfxh|  楼主 | 2015-8-22 10:40 | 只看该作者
dirtwillfly 发表于 2015-8-22 08:01
现在一般的编译器都是四字节的浮点数

可不可以自己定义一个3字节的浮点数,然后像4字节的浮点数一样的进行程序编写?

使用特权

评论回复
8
fxhfxh|  楼主 | 2015-8-22 10:49 | 只看该作者
ayb_ice 发表于 2015-8-21 20:27
有什么必要非要使用3字节浮点数呢

先谢谢技术总监的关注哈。
有3个原因想要用3字节的浮点数:
1,因为是在原来的程序框架上改变功能,原来的程序是用的3字节的浮点数,就想不要做太大的改动。
2, 4字节浮点数占的内存太多,而程序中大部分是浮点数,怕单片机内存不够。
3, 4字节浮点数的运算我想要比3字节浮点数的运算要慢很多吧,可能会影响单片机的反应速度。

使用特权

评论回复
9
dirtwillfly| | 2015-8-22 11:13 | 只看该作者
fxhfxh 发表于 2015-8-22 10:40
可不可以自己定义一个3字节的浮点数,然后像4字节的浮点数一样的进行程序编写? ...

可以的,但是也比较麻烦。
如果条件允许,不如选一个支持浮点指令集的单片机

使用特权

评论回复
10
ayb_ice| | 2015-8-22 11:37 | 只看该作者
fxhfxh 发表于 2015-8-22 10:49
先谢谢技术总监的关注哈。
有3个原因想要用3字节的浮点数:
1,因为是在原来的程序框架上改变功能,原来 ...

浮点汇编操作没有几个人会写吧,反正我是不会的

使用特权

评论回复
11
fxhfxh|  楼主 | 2015-8-22 11:50 | 只看该作者
本帖最后由 fxhfxh 于 2015-8-22 11:53 编辑
ayb_ice 发表于 2015-8-22 11:37
浮点汇编操作没有几个人会写吧,反正我是不会的

51浮点汇编的子程序书上多的是呀。一般就是3字节的居多。而恰恰C语言里没有3字节的。

使用特权

评论回复
12
冰零分子| | 2015-8-22 12:55 | 只看该作者
没涉猎过这方面的问题,帮你顶一下吧

使用特权

评论回复
13
mcu5i51| | 2015-8-22 13:52 | 只看该作者
typedef 可以定义这个;
之后自己写各种操作函数,想和内部数据一样使用不好弄;
也可以自己下载SDCC自己改写编译器,不过我感觉是好高深的;

使用特权

评论回复
14
mcu5i51| | 2015-8-22 13:58 | 只看该作者
fxhfxh 发表于 2015-8-22 10:40
可不可以自己定义一个3字节的浮点数,然后像4字节的浮点数一样的进行程序编写? ...

可以,自己定义接口函数就行,不过难度不小;很多的优化可能也不会大好。
有人在中颖MCU中写了硬件支持的16位乘除法和浮点库,不过都是32位的标准浮点;

使用特权

评论回复
15
fxhfxh|  楼主 | 2015-8-22 14:06 | 只看该作者
mcu5i51 发表于 2015-8-22 13:52
typedef 可以定义这个;
之后自己写各种操作函数,想和内部数据一样使用不好弄;
也可以自己下载SDCC自己改 ...

事实上51系列的单片机里面用3字节的浮点数就够了,可气人的是C51里面就是没有3字节的浮点数的类型。好像如果你要使用3字节的浮点数的话,就只能用汇编来写了。真没有想通。

使用特权

评论回复
16
huangdewen| | 2015-8-22 15:29 | 只看该作者
标准C中只有2的整数次幂个字节的数据类型。你的3字节数据类型属于自定义的数据类型,需要自己写代码来处理。

使用特权

评论回复
17
huangdewen| | 2015-8-22 15:38 | 只看该作者
fxhfxh 发表于 2015-8-22 14:06
事实上51系列的单片机里面用3字节的浮点数就够了,可气人的是C51里面就是没有3字节的浮点数的类型。好像 ...

可以转化为整型来运算,效率会好很多

使用特权

评论回复
18
yhn1973| | 2015-8-22 16:28 | 只看该作者
3字节浮点数运算速度快,不过只能在汇编中使用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

382

帖子

1

粉丝