|
发表于 2020-3-20 08:32:50
|
显示全部楼层
本帖最后由 舞指飞扬 于 2020-3-20 16:30 编辑
迪文采集的是12位整数,数据存在vp, 在单片机左核,如果不做联合体,或者指针转换,可用乘法vp*255+(vp+1) ,这就是采集到的整数这个整数乘以3.3 除以4096 得到1个0.0-3.3的小数.
考虑到浮点数处理不方便,可以把数据扩展到32位整数运算.
2^32/4096/3.3=317750 因此,可以扩大100000倍运算而不溢出,同时输出5位小数
这是能够满足运算而且避免浮点运算的方法.
如果不用上面的方法,采用浮点运算,浮点数的解码还是很麻烦的,可以利用c库来帮你完成.
#include <stdio.h>
void tst_sprintf (void) {
char buf [100];
float pi;
pi = 3.14159;
sprintf (buf, "%11.5f", pi);//含小数点11位,5位小数,5位整数,填充0
}注意,格式对于整数格式,一定要指定整数位 8位'd '还是32位'l',默认16位,否则强制取16位
浮点数
Ieee754 单精度
地址 +0 +1 +2 +3
内容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
这里
S 代表符号位,1是负,0是正
E 偏移127的幂,二进制阶码=(EEEEEEEE)-127
M 24位的尾数保存在23位中,只存储23位,最高位固定为1。
NaN 0xFFFFFFF 不是一个数
+INF 0x7F80000 正无穷(正溢出)
-INF 0xFF80000 负无穷(负溢出)
0x0000000 表示0 不表示2^-127ieee规定浮点数754 不能表示下列数
2^-127 零
+2^128 (正溢出)
-2^128(负溢出)
(-2^128)*(2^24-1) 不是一个数
浮点数比较大小 可能错误结果
浮点数 16777216f == 浮点数16777217f 是成立的
|
|