1、 文檔目標(biāo)
記錄S32 DS中如何設(shè)置Float Point,以及分析其不同設(shè)置的區(qū)別。
2、 問(wèn)題場(chǎng)景
客戶之前使用浮點(diǎn)型函數(shù)并不了解如何在S32DS中設(shè)置Float Point以及相關(guān)設(shè)置具有如何影響,并且部分客戶使用S32DS去調(diào)用GHS的編譯器進(jìn)行使用,節(jié)約授權(quán)的占用率。
3、軟硬件環(huán)境
1)、軟件版本:Mutil 8.14
2)、電腦環(huán)境:Windows 11
3)、外設(shè)硬件:無(wú)
4、解決方法
1)、打開(kāi)S32DS,選中項(xiàng)目點(diǎn)擊右鍵,選中“Properties”,進(jìn)入設(shè)置界面。

圖4-1
2)、進(jìn)入“Properties for test”,選擇“C/C++Build” -->"Settings"-->"Target"-->"Floating-Point",在<Floating-Point Mode>框內(nèi),選擇相應(yīng)的浮點(diǎn)模式進(jìn)行使用。

圖4-2
3)、Floating-Point Mode
指示應(yīng)該使用軟件、硬件還是兩者的組合來(lái)計(jì)算浮點(diǎn)運(yùn)算。此選項(xiàng)還允許您完全禁用浮點(diǎn)操作。此選項(xiàng)允許的設(shè)置為:
No Floating-Point (-fnone):禁止所有浮點(diǎn)操作。除了在沒(méi)有FPU的處理器上使用之外,如果您試圖最小化程序大小,這個(gè)設(shè)置也可能是合適的。要理解其中的原因,請(qǐng)考慮-fnone對(duì)程序編譯的兩個(gè)主要影響。
1. 首先,C和c++編譯器對(duì)任何浮點(diǎn)變量或常量的使用都會(huì)給出錯(cuò)誤。這將大大減少諸如printf和scanf之類的庫(kù)函數(shù)的大小。
2. 其次,編譯器將傳遞-D__NoFloat__以允許源代碼和頭文件隱藏對(duì)浮點(diǎn)對(duì)象的引用。
注意:與浮點(diǎn)操作相關(guān)的代碼可以鏈接到可執(zhí)行文件中,即使它不使用浮點(diǎn)變量。排除這些代碼可以導(dǎo)致程序大小的額外顯著減少。最后,由于此設(shè)置需要系統(tǒng)庫(kù)和頭文件的支持,因此對(duì)于使用具有自己的C或c++頭文件和庫(kù)的嵌入式操作系統(tǒng)的環(huán)境不支持此設(shè)置。其他目標(biāo)可能使用特定于目標(biāo)的頭文件,這些頭文件需要使用浮點(diǎn)類型。該設(shè)置意味著-no_float_scanf。
VFP Hardware Coprocessor (-fhard):硬件浮點(diǎn)(HFP)模式。此設(shè)置使目標(biāo)將浮點(diǎn)數(shù)據(jù)存儲(chǔ)在浮點(diǎn)寄存器中,并使用浮點(diǎn)指令執(zhí)行浮點(diǎn)操作。這與軟件模擬的浮點(diǎn)模式(參見(jiàn)下面的-fsoft)形成對(duì)比。HFP模式使用ARM VFP協(xié)處理器,僅支持v5或更高的體系結(jié)構(gòu)。要識(shí)別默認(rèn)使用-fhard的處理器,請(qǐng)參見(jiàn)“ARM處理器變體”下的第二個(gè)表。對(duì)于Cortex-A和Cortex-R52處理器,- hard還提供了對(duì)NEON協(xié)處理器的支持。
Hardware Single, Software Double (-fsingle):為單精度操作指定硬件浮點(diǎn)模式,為雙精度操作指定軟件浮點(diǎn)模式。與- hard相同的處理器支持此設(shè)置。對(duì)于Cortex-M4F,默認(rèn)開(kāi)啟-fsingle。
Software Emulation (-fsoft): SFP (software floating-point)模式。此設(shè)置使目標(biāo)使用整數(shù)寄存器來(lái)保存浮點(diǎn)數(shù)據(jù),并使用庫(kù)子例程調(diào)用來(lái)模擬浮點(diǎn)操作。對(duì)于沒(méi)有FPU的目標(biāo),這是默認(rèn)設(shè)置。如果目標(biāo)有一個(gè)FPU,這個(gè)設(shè)置選擇一組不同的浮點(diǎn)庫(kù)。