打印
[STM8]

STVD + COMSMIC 的简单函数搞不定

[复制链接]
2465|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
静默|  楼主 | 2009-11-13 15:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 静默 于 2009-11-13 15:32 编辑

// 24位带符号的二进制转换成小数. 其值范围是 -1.0 <= X < 1.0
// MSB -(2^0) (2^-1) .............. (2^-23), 数据放在 u32的第二、三、四字节.
float Sign24BitToFloat( u32 u32Dat )
{
float lfloTmp;

// 正数,负数.
// 当最高位为0时,其为正数,为1时,其为负数。
if( u32Dat & 0x00800000 )  // 不为0时为负数.
{
  lfloTmp = -1.0 * (float)(0x01000000 - u32Dat)/0x00800000;
}
else
{
  // lfloTmp = (float)u32Dat / 0x00800000L;
  lfloTmp = (float)(1.0*u32Dat)/8388608L;
}

return lfloTmp;
}    //(说明:该函数用VC验证过,在windows XP下运行正确。)
调用Sign24BitToFloat( 0x19999)时,结果是0.007849, 理论结果应该是0.0125.
那位帮帮忙,偶多给分。
沙发
dami| | 2009-11-14 10:40 | 只看该作者
comsic 强制转换好象有BUG, 把用到的变量定义前都加volatile.可以解决.试试.
还有.要强制转换的东西都括进去吧?(float)u32Dat / 0x00800000L; 是否可以:
(float)(u32Dat / 0x00800000L); ?

使用特权

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

本版积分规则

15

主题

171

帖子

1

粉丝