DSP ABI 调用

调用约定

Xtensa 支持两种不同的应用程序二进制接口(ABI):​​Window ABI​​(Window register ABI)和 Call0 ABI​​,两者均包含调用约定。

  • Window ABI​​:函数调用和返回必须位于同一 1GB 对齐区域内。

  • Call0 ABI​​:函数调用和返回可在整个 4GB 区域内执行。

SRAM 地址范围​为 0x2000_0000 ~ 0x2008_0000。PSRAM 起始地址​为 0x6000_0000,结束地址取决于 PSRAM 的类型。由于 SRAM 和 PSRAM 不在同一个 1GB 区域,Window ABI 无法跨 SRAM、PSRAM 调用函数。

切换 Call0 ABI 与 ​Window ABI

不同 Configuration 对应不同的 ABI 类型:

  • HIFI5_PROD_1123_asic_UPG:对应 Call0 ABI

  • HIFI5_PROD_1123_asic_wUPG:对应 Window ABI

如果使用 Xplorer 管理工程,只需切换 Configuration 即可选择所需的 ABI。以下为 Call0 ABI 的配置示例:

../../rst_dsp/dsp_abi/figures/dspcfg_chosen_for_call0_abi.png

以下为 Windowed ABI 的配置示例:

../../rst_dsp/dsp_abi/figures/dspcfg_chosen_for_windowed_register_abi.png

备注

  • 如果你的工程使用了自定义的库,请确保根据所选 ABI 重新编译相应库文件。

  • 若使用 CMD 命令行(auto_build.sh )编译工程,自动编译脚本的 Configuration 配置文件为 project/auto_build /dsp_batch.xml (HIFI5_PROD_1123_asic_wUPG 或 HIFI5_PROD_1123_asic_UPG)。

按不同 ABI 配置库路径

使用环境变量避免修改搜索路径

在 ABIs 之间切换时,如果每次都修改库搜索路径会很繁琐。可在库路径下创建 HIFI5_PROD_1123_asic_UPGHIFI5_PROD_1123_asic_wUPG 两个文件夹, 并将分别用不同 ABI 编译的库分别放在对应目录中。

例如,原来将库放在 lib/audio/prebuilts 路径下:

  1. 在该路径下新建 /lib/audio/prebuilts/HIFI5_PROD_1123_asic_UPG/lib/audio/prebuilts/HIFI5_PROD_1123_asic_wUPG 两个文件夹。

  2. Library Search Paths 设置为 ${workspace_loc}/.../lib/audio/prebuilts/$(TARGET_CONFIG)。环境变量 $(TARGET_CONFIG) 会随 ABI 变化自动切换,确保能加载到正确的预编译库。

    ../../rst_dsp/dsp_abi/figures/dspcfg_library_search_path.png