DSP 编译和烧录
工程编译
根据使用的操作系统不同,用户可以选择以下方式之一来编译 DSP 工程:
方式一:命令行编译,适用于 Linux 系统
方式二:Xplorer GUI 编译,适用于 Windows 或 Linux 系统
在 Linux 服务器上,运行 auto_build.sh
来编译默认项目。
cd project/auto_build/
chmod +x auto_build.sh
./auto_build.sh
Xplorer 会将 project_dsp
复制到新工作区 auto_ws
后进行编译。
生成的
dsp_all.bin
和dsp.bin
默认保存在<SDK>/dsp/project/image
目录中间编译文件会保留在
auto_ws
目录
具体用法请参考 <SDK>/dsp/project/auto_build/readme.txt
。
自动编译脚本的配置文件是 project/auto_build/dsp_batch.xml
。在该脚本中,用户可以修改配置项(HIFI5_PROD_1123_asic_wUPG 或 HIFI5_PROD_1123_asic_UPG)。
备注
请将 Xtensa Tools
目录添加到系统 PATH 环境变量中。默认路径是 /opt/xtensa/XtDevTools/install/tools/RI-2021.8-linux/XtensaTools/bin
。
步骤 1:将项目导入工作区
选择 Workspace:打开 Xplorer,点击 Browse 将工作区设置为
<dsp_sdk>\project
。添加
project_dsp
工程到工作区:点击 ,选择 。选择默认的
project_dsp
工程和RTK_LSP
链接配置工程,点击 Finish。
步骤 2:工程编译
在 Xplorer 的工具栏里,设置 P 为 project_dsp
,C 为 HIFI5_PROD_1123_asic_UPG
(或 HIFI5_PROD_1123_asic_wUPG
), T 为 Release
,点击 Build Active。

生成的固件将存放在 project\image
目录下,文件名为 dsp_all.bin
。
备注
需要把 Xtensa 工具目录添加到系统 PATH 环境变量中。本例中路径为
C:\usr\xtensa\XtDevTools\install\tools\RI-2021.8-win32\XtensaTools\bin
。确保对
image
和img_utility
文件夹中的文件具有访问权限。安装 Python(高于 3.8.0 版本),并将其路径添加到环境变量,以保证后处理正常工作。我们使用 Python 作为命令,若您的系统使用 Python3 或 python3.8 等命令,需相应调整下面红框中的命令:

DSP 反汇编和 map 文件说明:
默认情况下,生成 DSP 固件时不会生成对应的反汇编代码。如需通过反汇编调试代码,需在后处理脚本
<dsp_sdk>/project/img_utility/code_analyze.py
中将 ENABLE_Disassembler 设置为 1。生成反汇编会降低编译速度,建议仅在需要时启用。生成的 ASM 文件为<dsp_sdk>/project/image/project_dsp.asm
。可以在 map 文件中查找函数或数据位置:
命令行编译方式:
<dsp_sdk>/auto_ws/proiect/dsp/bin/HIFI5_PROD_1123_asic_UPG/UPG/Release/project_dsp.map
Xplorer-GUI 编译方式:
<dsp_sdk>/proiect/proiect_dsp/bin/HIFI5_PROD_1123_asic_UPG/Release/proiect_dsp.map
MCU 工程编译和固件烧录
用户可以通过以下两种方案加载 DSP 固件:
在此方案中, Flash 布局中只有一个名为 IMG_DSP
的区域用于下载 DSP 固件。
当 DSP 应用程序被修改时, 用户只需将名为 dsp_all.bin
的 DSP 固件重新下载到 IMG_DSP
中。因此,在设备处于 DSP 开发阶段时,建议使用此方案以便便捷高效地开发 DSP 应用程序。
要选择此方案,用户可以通过以下步骤禁用 DSP within APP image
的配置:
参考 配置 SDK (menuconfig) 进入
CONFIG DSP Enable
配置,取消勾选DSP within APP image
。CONFIG DSP Enable ---> [*] Enable DSP [ ] DSP within APP image
重新编译项目。
kr4_km4_app.bin
文件生成在<mcu_sdk>\amebalite_gcc_project
中。

注意
此方案不便于安全校验和 OTA 升级,因此建议仅在设备 DSP 开发阶段使用。量产时请使用另一个方法。
在此方案中, Flash 布局中分别有两个名为 IMG_APP_OTA1
和 IMG_APP_OTA2
的分区。由于 DSP 固件被合并到应用程序固件中,
这样可以避免当只有一个 DSP 分区时,由于通过 OTA 应用更新 DSP 固件可能导致的 DSP 启动失败的问题。对于 MP (量产)设备,
推荐使用 DSP 固件合并到应用固件中的方案,这样 DSP 可以选择从 OTA1 或 OTA2 启动。
生成 kr4_km4_dsp_app.bin
的步骤如下:
参考 配置 SDK (menuconfig) 进入
CONFIG DSP Enable
配置,勾选Enable DSP
和DSP within APP image
,以启用应用程序固件中的 DSP
配置。配置
DSP_IMAGE_TARGET_DIR
为dsp.bin
的路径。CONFIG DSP Enable ---> [*] Enable DSP [*] DSP within APP image (../component/dsp) DSP_IMAGE_TARGET_DIR
注意
DSP_IMAGE_TARGET_DIR 是相对于 amebalite_gcc_project 来设置的。
例如,一旦 DSP SDK 编译完成,将生成两个文件:dsp.bin
和 dsp_all.bin
,它们位于 <dsp_sdk>\project\image
目录。
将
dsp.bin
复制到<mcu_sdk>\component\dsp
中,因此dsp.bin
的路径为../component/dsp
。按照上面的第 3 步设置路径。在
<mcu_sdk>\amebalite_gcc_project\menuconfig\.config
文件中检查路径设置是否正确。# CONFIG DSP Enable # CONFIG_DSP_EN=y CONFIG_DSP_WITHIN_APP_IMG=y CONFIG_DSP_IMAGE_TARGET_DIR="../component/dsp" # end of CONFIG DSP Enable
重新编译项目。
kr4_km4_dsp_app.bin
文件生成在<mcu_sdk>\amebalite_gcc_project
中。
选择此方案后,只需下载一个名为 kr4_km4_dsp_app.bin
的应用程序固件。

下载完成后复位开发板。正常启动后,可以通过 UART 工具可以看到 Hello DSP World 输出信息。
备注
Hello DSP World 日志可能会与 KM4/KR4 的输出混杂。可通过修改 DSP 端的打印信息来提高辨识度。
项目配置
添加项目文件夹或文件
SDK 使用虚拟文件夹来管理项目文件。使用虚拟文件夹时,从项目中删除文件不会影响磁盘上的原始文件,同时也不会将文件复制到项目文件夹中。
假设我们的应用文件 test1.c
和 test2.c
存放在名为 application 的文件夹中,现在将这些文件添加到当前项目:
创建名为 application 的虚拟文件夹。右键点击 project_dsp,选择 :
在文件夹名称中输入
application
,勾选 Folder is not located in the file system,然后点击 Finish。右键点击 application 文件夹,选择 Import。
点击
。在位置 1 浏览到文件夹路径,在位置 2 选择要包含的文件。点击 Advanced 并勾选位置 3 的选项。
小心
添加项目文件时,请务必使用相对路径。如上图所示,点击 Create link locations relative to:
并设置为 PROJECT_LOC
。
目前我们强烈推荐使用 Xplorer GUI 修改项目配置。若无法使用 GUI, 可以直接编辑:file:<dsp sdk>/project/project_dsp/.project 文件来增删项目文件。比如以下操作:
添加新虚拟文件夹:
<link> <name>TestFolder</name> <type>2</type> <locationURI>virtual:/virtual</locationURI> </link>
向虚拟文件夹添加文件:
<link> <name>TestFolder/test_file.c</name> <type>1</type> <locationURI>PARENT-2-PROJECT_LOC/testfolder/test_file.c</locationURI> </link>
添加搜索路径
添加头文件搜索路径
进入 Build Properties:
在
标签页,点击右上角 Add 标志。然后输入路径。建议使用相对路径 ${workspace_loc},此地址为<dsp_sdk>/project
。点击 OK 和 Applay。
备注
尽量不要出现同名的头文件。若无法避免请使用不同的路径。
添加库文件搜索路径
在 Build Properties 中选择 Libraries 标签页:
点击右上角 Add 标志。然后输入路径。建议使用相对路径 ${workspace_loc},此地址为
<dsp_sdk>/project
。建议使用$(TARGET_CONFIG)变量, 按不同 ABI 配置库路径 。点击 OK 和 Applay。
编译选项
Co-processor、-O3 and SIMD 编译选项可以大幅提高 DSP 硬件资源的利用率。 但这些选项并非适用于所有代码。使用-O3 选项时,编译器可能会显著调整执行顺序。 这些优化选项通常是安全的,但存在使用限制:RTOS 源文件和其他 ISR 处理程序不能使用 Co-processor、SIMD 向量优化(-LNO:simd and -mcoproc)。

缩减 DSP 固件体积
工程代码中可能存在未使用但被一同编译的函数。虽然这些函数未被调用,但它们往往会被链接到可执行文件中,从而浪费 Flash 和 RAM 空间。为解决这个问题可以增加以下编译和链接参数:
在编译器中添加
-ffunction-sections
和-Os
选项:添加链接器选项
-Wl,-gc-sections
:此方法可能会遇到以下警告(可忽略):
ld: warning: The min-sizing binary cannot be generated if -gc-sections is specified.
此时,.command 和 .ipc_table 段的内容因未被显式调用而无法加载到固件中。需在链接脚本
RTK_LSP/ldscripts/elf32xtensa.x
中为这两个段添加 KEEP 属性:.ipc_table : ALIGN(4) { _ipc_table_start = ABSOLUTE(.); KEEP(*(.ipc_table)) . = ALIGN (4); _ipc_table_end = ABSOLUTE(.); } >psram0_seg :psram0_phdr .command : ALIGN(4) { _command_start = ABSOLUTE(.); KEEP(*(.command)) . = ALIGN (4); _command_end = ABSOLUTE(.); } >psram0_seg :psram0_phdr
备注
该链接脚本在每次修改 LSP 后会被自动覆盖,需重新手动修改新生成的脚本。
库链接顺序
链接静态库时,若多个静态库之间存在依赖关系,则需注意被依赖静态库的链接顺序。否则会出现 the symbol cannot be found 错误。
例如:liborder2.a
依赖于 liborder1.a
,且最终可执行文件 test 依赖 liborder2.a
。
那么链接选项应为: -lorder2 -lorder1
,否则会报 liborder1.a
中的某些符号未定义。

Realtek 提供的库
Realtek 提供的库提供了 Window ABI 和 Call0 ABI 两种。两种 ABI 的区别可以 参考此处。
libaudio_base.a 和 librpc_hal.a
路径: dsp/lib/audio/prebuilts/$(TARGET_CONFIG)
。
libaudio_base.a:MCU 与 DSP 间的 RPC 框架,用于数据和信号同步。
librpc_hal.a:硬件适配层,支持不同 RPC 平台。
libxa_nnlib.a 和 libhifi5_dsp.a
libxa_nnlib.a:HiFi 5 神经网络库,路径为
dsp/lib/xa_nnlib/v1.7.0/bin/$(TARGET_CONFIG)/Release
libhifi5_dsp.a:NatureDSP 信号处理库,路径为
dsp/lib/lib_hifi5/project/hifi5_library/bin/$(TARGET_CONFIG)/Release