madsnail 发表于 3 天前

AI8051U_32_TFPU.LIB 怎么使用?强制转换失效

    int i;
      float b;
      b=1.2f;
      i = (int)(b);
正常结果应该为i=1;
在项目中添加AI8051U_32_TFPU.LIB后,计算结果为i=0x999A;
这怎么搞?


乘风飞扬 发表于 3 天前

AI8051U_32_TFPU.LIB 需要使用芯片的硬件运算单元进行计算。
而你使用的是软件模拟仿真(运行过的指令左侧变绿),跟硬件没有关联,自然得不到正常的硬件计算结果。

狂热主宰 发表于 3 天前

对于可能涉及浮点数的操作
可能需要启用硬件资源
注意C可能有优化

madsnail 发表于 前天 08:05

乘风飞扬 发表于 2026-4-1 16:59
AI8051U_32_TFPU.LIB 需要使用芯片的硬件运算单元进行计算。
而你使用的是软件模拟仿真(运行过的指令左侧 ...

使用硬件仿真结果是0

乘风飞扬 发表于 前天 10:44

madsnail 发表于 2026-4-2 08:05
使用硬件仿真结果是0

参照硬件仿真帖子或者视频看看仿真设置是否正确



演示视频:

madsnail 发表于 前天 11:37

乘风飞扬 发表于 2026-4-2 10:44
参照硬件仿真帖子或者视频看看仿真设置是否正确




我知道怎么回事了。但是很奇怪,可能是我理解不够

第一种情况
void main(void)
{
int i;
float f;
f=1.2f;
i=(int)(f);
}

结果是f=0,i=0;
第二种情况
int i;
float f;
void main(void)
{

f=1.2f;
i=(int)(f);
}

结果i=1;f=1.2,正常。

不懂为啥。

乘风飞扬 发表于 前天 11:49

madsnail 发表于 2026-4-2 11:37
我知道怎么回事了。但是很奇怪,可能是我理解不够

第一种情况


全局变量有分配地址,仿真只能观察全局变量

madsnail 发表于 前天 12:02

乘风飞扬 发表于 2026-4-2 11:49
全局变量有分配地址,仿真只能观察全局变量

我又试了试,这样可以
void main(void)
{
int data i;
float data f;
f=1.2f;
i=(int)(f);
}
页: [1]
查看完整版本: AI8051U_32_TFPU.LIB 怎么使用?强制转换失效