2012-10-12 53 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