ARM EABI工具链

时间:2012-10-12 04:39:37

标签: arm eabi

今天,我遇到了ARM工具链EABI(交叉编译器)的一些奇怪问题。

问题是当我尝试使用snwprintf()将浮点值转换为字符串时,我得到了一些没有实际浮点值的垃圾字符串。

像这样的代码looke:

float floatValue = 1.0;
snwprintf (buffer, bufferSize, _T("%g"), floatValue);

然后我调试了snwprintf,我发现变量参数列表(va_arg)没有指向精确的数据值。通过转储内存,我们能够找到变量参数列表中存在的确切数据。 va_arg应该指出的数据是不同的。

我不认为这是一个endianess问题,因为整合值工作正常。问题只有双值。

有谁可以帮我解决这个问题?

1 个答案:

答案 0 :(得分:1)

你应该将它格式化/打印为double,因为浮点数被加宽为可变函数的双倍。

以下

中的ARM体系结构调用标准
  
    

5.5参数传递
    对于基本标准,可变参数函数总是被编组。

         

7.2论证传递约定
    对于可变参数函数,与省略号(...)匹配的浮点参数将转换为double类型。

  

Afaik 7.2一般适用于C.