在vdsp提供的《VisualDSP++ 5.0 C/C++ Compiler and Library Manual for Blackfin Processors Revision 5.1, August 2008》中列出了vdsp支持的所有數據類型,其中與浮點有點的類型有:
Type Bit Size Number Representation sizeof returns double 32 bits 32-bit IEEE single-precision 4 float 32 bits 32-bit IEEE single-precision 4 double 64 bits 64-bit IEEE double-precision 8 long double 64 bits 64-bit IEEE 8 fract16 16 bits signed 1.15 fract 2 fract32 32 bits signed 1.31 fract 4
其中前4個采用了IEEE的格式,而fract則是ADI自己定義的格式。
在這裡容易混淆的一點是通過project options -> compilers中的參數配置可以控制使用的double類型是32位的還是64位的,可惡的是在默認情況下,vdsp是將double當成32位來處理的,這對於某些科學計算相關的代碼來說簡直是一個噩夢!
當然了,由於bf561硬件本身不支持浮點運算,只能通過軟件模擬來實現,所以文檔中這樣解釋為什麼默認情況下要使用32位的double:
On Blackfin processors, the float data type is 32 bits, and the double data type default size is 32 bits. This size is chosen because it is the most efficient. The 64-bit long double data type is available if more precision is needed, although this is more costly because the type exceeds the data sizes supported natively by hardware.
似乎勉強也說得過去。
但由此造成的一個問題是:如果在要使用的dlb庫和調用者之間是使用不同的選項來編譯的,那麼將造成程序運行時不可避免的錯誤!