[STM8]

STM8S105+Cosmic的問題

[复制链接]
2898|8
手机看帖
扫描二维码
随时随地手机跟帖
JasonWangFAE|  楼主 | 2009-10-24 23:15 | 显示全部楼层 |阅读模式
我使用Cosmic+STVP要作型態的轉換時發現的
程式如下:
unsigned long u1;
float s2u4;

u1=47000000UL;
s2u4=s2.U4;<---這時s2u4得到的是46966528, 正確的不是應該為47000000嗎?

請高手幫幫忙了!!
ddllxxrr| | 2009-10-25 07:00 | 显示全部楼层
楼主写错了吧,S2U4=S2.U4;是什么意恩,你若是S2U4=u1的话,前应加是(float)强制转换

使用特权

评论回复
JasonWangFAE|  楼主 | 2009-10-25 09:18 | 显示全部楼层
對不起啦,我寫錯了。
s2u4=U1;<---這時U1得到的是46966528, 正確的不是應該為47000000嗎?
我希望可以s2u4得到47000000。

使用特权

评论回复
汉之云| | 2009-10-26 09:44 | 显示全部楼层
怀疑是不是楼主的cosmic 版本太老,我用的cosmic 版本是4.3.1,没出现楼主的问题。

此外:COSMIC 使用4 bytes 表示浮点数,IEEE754标准。
4个bytes能表示的数是有限的,而它表示区间的实数是无限的,也就是说一定区域内的实数都只能用一个IEEE754 浮点数来表示。

所以有可能 u1-1 !=s2u4-1

使用特权

评论回复
starowen| | 2009-10-26 10:02 | 显示全部楼层
s2u4=(float)u1;
这样就不会错了

使用特权

评论回复
aolin| | 2009-10-26 11:16 | 显示全部楼层
Cosmic的bug多了去了!!
现在发现程序不对,第一反应就怀疑是不是Cosmic的bug,说实在的,用Cosmic真的累!!
不过没办法了,免费的东西能用就不错了!

使用特权

评论回复
JasonWangFAE|  楼主 | 2009-10-27 10:27 | 显示全部楼层
s2u4=(float)u1;解決了我的目前的問題了,謝謝樓上的大大!
但是我又發現另一個問題,
u1=47000000UL;
test();<---執行test

//...........................................
void test(void)
{
   s2u4=(float)u1;<----又得到46966528不對的值了!!不知為什麼?
}
//...................................

使用特权

评论回复
dami| | 2009-11-11 13:59 | 显示全部楼层
Cosmic的强制类型转换确实是有问题.是个BUG,不光是float,LONG,把16位SHORT转到-->LONG也是.
前面加 volatile就可以啦.

使用特权

评论回复
dami| | 2009-11-11 14:02 | 显示全部楼层
变量定义前面加 volatile,KEIL C没这个问题.

使用特权

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

本版积分规则

8

主题

146

帖子

1

粉丝