SylixOS 在 t_main 中使用硬浮點方法

1. 問題描述

在某些使用場景中,應用程序不使用動態加載的方式執行,而是跟隨BSP在 t_main 線程中啓動,此時應用代碼是跟隨 BSP 進行編譯的。由於 BSP 默認使用軟浮點,所以會導致應用代碼中的浮點運算採用軟浮點的方式實現,最終產生浮點運算性能下降的現象。

2. SylixOS中的軟硬浮點選項

在 BSP 工程中,FPU_TYPE 類型通常會按照如下圖所示方式定義。
BSP中默認採用軟浮點
此時,當 BSP 工程中有浮點運算的實現時,會採用軟浮點的指令代替硬浮點的指令實現。 BSP 工程默認採用軟浮點的原因在於使用硬浮點會操作 FPU 相關的寄存器,但是在函數調用過程中,硬浮點與軟浮點的參數傳遞方式可能存在區別。硬浮點可能會使用 FPU 的寄存器完成參數或返回值的傳遞,而軟浮點就會採用寄存器或是內存的方式完成參數和返回值的傳遞,所以硬浮點和軟浮點的 ABI 可能存在不兼容。
爲了保證 BSP 本身的兼容性,一般都採用軟浮點方式實現。

3. 解決方法

在確保軟硬浮點在 ABI 使用上不存在不兼容時,可以將應用程序採用如下的方式單獨使用硬浮點進行編譯。
1、將 t_main 中的浮點運算邏輯新建“SylixOS Static Kernel Lib”實現;
2、手動修改”SylixOS Static Kernel Lib”工程的 config.mk 文件,使其爲 hard-float,如下圖所示;
修改內核模塊工程的config.mk
3、將編譯生成的 .a 文件鏈入 BSP 工程;
4、在 t_main 中仍調用 .a 文件中生成的符號。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章