我正在观察一些行为,我发现很难对其进行推理。
我有一段代码如下:
int timer_temp_var;
if ((timer_temp_var/1000.0) > 5.0)
{
//Do something
}这个片段会导致链接错误。
>
> dld: warning: Undefined symbol _d_fle"
> dld: no output written make[1]: ***
> [app.elf] Error 1但在将相等检查替换为:
if ((timer_temp_var/1000.0) < 5.0) // replace '>' with '<'.我看不出有什么问题。
同样,如果我除以1000.0,而不是除以1000,如下所示:
if ((timer_temp_var/1000) > 5)
{
//Do something
}不管是哪种平等检查,我都看不到任何问题。
该应用程序被编译为在pSOS操作系统上运行。
这种行为的原因是什么?
发布于 2009-01-20 15:23:40
似乎你的编译器用对_d_fle()函数的调用代替了">“操作符,所以你需要将一些库链接到你的可执行文件中。
令人惊讶的是,"<“可以工作,尽管它应该替换为最有可能位于同一个库中的d_fgt()函数。
从CPU改为100会使">“的左操作数变成整数,似乎整数比较不需要任何函数调用--很可能编译成CPU指令而不是函数调用。
编辑:看起来你需要SFPE (软件浮点仿真)库。你有像libsfpe这样的东西吗?
发布于 2009-01-20 15:27:35
从1000.0到1,000的变化表明浮点运算存在问题。尝试将1000.0转换为(int),看看是否有任何进展。
将符号<更改为>听起来不合理,不会导致任何更改...
发布于 2009-01-20 20:35:45
您缺少一个浮点库。尝试包含数学库(libm.a),看看这样做是否有效。
https://stackoverflow.com/questions/461655
复制相似问题