DSP ABI 调用
调用约定
Xtensa 支持两种不同的应用程序二进制接口(ABI):Window ABI(Window register ABI)和 Call0 ABI,两者均包含调用约定。
Window ABI:函数调用和返回必须位于同一 1GB 对齐区域内。发生函数调用时,使用寄存器轮转的方式实现 CPU 寄存器切换,节约了保存、恢复 CPU 寄存器状态的时间。
Call0 ABI:函数调用和返回可在整个 4GB 区域内执行。发生函数调用时,将 CPU 寄存器状态保存在栈中。
SRAM 地址范围为 0x2000_0000 ~ 0x2008_0000
;PSRAM 起始地址为 0x6000_0000
,结束地址取决于 PSRAM 的类型。由于 SRAM 和 PSRAM 不在同一个 1GB 区域,所以 Window ABI 无法跨 SRAM、PSRAM 调用函数。
切换 Call0 ABI 与 Window ABI
不同 Configuration 对应不同的 ABI 类型,如果使用 Xplorer 管理工程,只需切换 Configuration 即可选择所需的 ABI。
HIFI5_PROD_1123_asic_UPG:对应 Call0 ABI
HIFI5_PROD_1123_asic_wUPG:对应 Window ABI
以下为 Call0 ABI 的配置示例:

以下为 Window ABI 的配置示例:

Note
如果你的工程使用了自定义的库,请确保根据所选 ABI 重新编译相应库文件。
若使用 CMD 命令行(
auto_build.sh
)编译工程,自动编译脚本的 Configuration 配置文件为project/auto_build /dsp_batch.xml
(HIFI5_PROD_1123_asic_wUPG 或 HIFI5_PROD_1123_asic_UPG)。
按不同 ABI 配置库路径
在 ABI 之间切换时,如果每次都修改库搜索路径会很繁琐。可使用 $(TARGET_CONFIG)
环境变量来设置搜索路径:
在库路径下创建 HIFI5_PROD_1123_asic_UPG 和 HIFI5_PROD_1123_asic_wUPG 两个文件夹,并将用不同 ABI 编译的库分别放在对应目录中。
例如,原来将库放在 lib/audio/prebuilts
路径下: