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 的配置示例:

以下为 Windowed ABI 的配置示例:

备注
如果你的工程使用了自定义的库,请确保根据所选 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_UPG 和 HIFI5_PROD_1123_asic_wUPG 两个文件夹, 并将分别用不同 ABI 编译的库分别放在对应目录中。
例如,原来将库放在 lib/audio/prebuilts
路径下:
在该路径下新建
/lib/audio/prebuilts/HIFI5_PROD_1123_asic_UPG
和/lib/audio/prebuilts/HIFI5_PROD_1123_asic_wUPG
两个文件夹。将 Library Search Paths 设置为
${workspace_loc}/.../lib/audio/prebuilts/$(TARGET_CONFIG)
。环境变量 $(TARGET_CONFIG) 会随 ABI 变化自动切换,确保能加载到正确的预编译库。