DSP 编译和烧录
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)。
Note
请将
Xtensa Tools
目录添加到系统 PATH 环境变量中。默认路径是/opt/xtensa/XtDevTools/install/tools/RI-2021.8-linux/XtensaTools/bin
。auto_build.sh
脚本会自动清空并重新导入项目,否则本地 Xplorer 的项目修改无法同步。因此该脚本每次都是全量编译,当前只有 GUI 才支持增量编译。
步骤 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
。
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
的配置:
参考 <FreeRTOS SDK 使用指南> 配置 menuconfig 进入
CONFIG Link Option
配置。DSP 使能后默认将 SRAM 空间给 DSP 使用,因此 IMG2 Data 和 Heap 需要使用 PSRAM 。MCU 的 code 一般选择 XiP,如果有性能要求也可以将 code 加载进 PSRAM。
/* select SRAM */ CONFIG Link Option ---> IMG2 Data and Heap in SRAM or PSRAM? ( ) SRAM (X) PSRAM
进入
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
中。
Note
此方案不便于安全校验和 OTA 升级,因此建议仅在设备 DSP 开发阶段使用。量产时请把 DSP 固件合并到 MCU 的应用固件中。
在此方案中, Flash 布局中分别有两个名为 IMG_APP_OTA1
和 IMG_APP_OTA2
的分区。由于 DSP 固件被合并到应用程序固件中,这样可以避免当只有一个 DSP 分区时,由于通过 OTA 应用更新 DSP 固件可能导致的 DSP 启动失败的问题。
对于 MP (量产)设备,推荐使用 DSP 固件合并到应用固件中的方案,这样 DSP 可以选择从 OTA1 或 OTA2 启动。
生成 kr4_km4_dsp_app.bin
的步骤如下:
参考 <FreeRTOS SDK 使用指南> 配置 menuconfig 进入
CONFIG Link Option
配置。DSP 使能后默认将 SRAM 空间给 DSP 使用,因此 IMG2 Data 和 Heap 需要使用 PSRAM 。MCU 的 code 一般选择 XiP,如果有性能要求也可以将 code 加载进 PSRAM。
/* select SRAM */ CONFIG Link Option ---> IMG2 Data and Heap in SRAM or PSRAM? ( ) SRAM (X) PSRAM
进入
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
Note
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 输出信息。
Tip
Hello DSP World 日志可能会与 KM4/KR4 的日志输出混杂,可通过修改 DSP 端的打印信息来提高辨识度。
项目配置
添加项目文件夹或文件
SDK 使用虚拟文件夹来管理项目文件。使用虚拟文件夹时,从项目中删除文件不会影响磁盘上的原始文件,同时也不会将文件复制到项目文件夹中。
假设我们的应用文件 test1.c
和 test2.c
存放在名为 application
的文件夹中,现在将这些文件添加到当前项目:
右键点击 project_dsp,选择 ,在文件夹名称中输入
application
,勾选 Folder is not located in the file system,点击 Finish。右键单击
application
文件夹,选择 Import,依次点击 。在位置 1 浏览到文件夹路径,在位置 2 选择要包含的文件,点击 Advanced 并勾选位置 3 的选项。
Caution
添加项目文件时,请务必使用相对路径。如上图所示,勾选 Create link locations relative to:
,并设置为 PROJECT_LOC
。
目前我们强烈推荐使用 Xplorer GUI 修改项目配置。若无法使用 GUI, 可以直接编辑 <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
。点击
Apply
和OK
按钮,完成修改。
Note
尽量不要出现同名的头文件,若无法避免请使用不同的路径。
添加库文件搜索路径
在 Build Properties 中选择 Libraries 标签页:
点击右上角 Add 标志。然后输入路径。建议使用相对路径 ${workspace_loc},此地址为
<dsp_sdk>/project
。建议使用$(TARGET_CONFIG)变量, 按不同 ABI 配置库路径 。点击
Apply
和OK
按钮,完成修改。
编译优化
Co-processor、-O3 和 SIMD 编译选项可以大幅提高 DSP 硬件资源的利用率。高等级优化下编译器可能会调整代码执行顺序和 CPU 行为,因此这些选项并非适用于所有代码。 比如 FreeRTOS 源文件和其他 ISR 处理程序不能使用 Co-processor、SIMD 向量优化(-LNO:simd 和 -mcoproc)。

缩减 DSP 固件体积
工程代码中可能存在未使用但被一同编译的函数。虽然这些函数未被调用,但它们往往会被链接到可执行文件中,从而浪费 Flash 和 RAM 空间。
为解决这个问题,可以增加以下编译和链接参数:
添加编译器
-function-sections
、-fdata-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
Note
该链接脚本在每次修改 LSP 后会被自动覆盖,需重新手动修改新生成的脚本。
库链接顺序
链接静态库时,若多个静态库之间存在依赖关系,则需注意被依赖静态库的链接顺序,否则会出现 the symbol cannot be found
错误。
例如:liborder2.a
依赖于 liborder1.a
,且最终可执行文件 test 依赖 liborder2.a
,
那么链接选项应为: -lorder2 -lorder1
,否则会报 liborder1.a
中的某些符号未定义。
