2012-10-12 54 views
1

今天,我面临着ARM工具链EABI(交叉编译)一些奇怪的问题。ARM EABI工具链

THS的问题是,当我尝试使用snwprintf()的浮点值转换为字符串,我是越来越不具备,我通过实际浮点值,一些垃圾串。

smaple代码looke这样的:

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

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

我不认为这是一个字节序问题,因为integre值是工作的罚款。问题只有双重值。

任何人都可以帮助我解决这个问题吗?

+1

不要你需要加倍%LG?否则它可能会在堆栈上传入两倍的东西或传入参数,并且printf只占该参数的一半。你有 - 在你的gcc命令行上打开? –

回答

1

你应该格式化/打印为double,因为浮子扩大至双打可变参数的功能。以下

5.5参数传递
甲可变参数函数ARM体系结构状态

过程调用标准总是编组作为基本标准。

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

Afaik 7.2持有C一般。

+0

@dwelch比我快,但我不想浪费我对各种ARM文档的研究:) – auselen

+0

如果这确实是不匹配的格式和变量类型,因为我怀疑它与ARM无关,它是一个通用的C问题你看到在大多数或所有平台(一旦越过从单个参数条目大小的边界,例如32位寄存器或保持一个64位项栈位置,printf的认为有一个32位项目,编译器已经消耗2 32位因为变量类型)。 –

+0

dwelch - 你能提出一些解决方案吗? – Santhosh