你好,
,我正在制作一个音频处理演示,该演示在 R685-AUD-EVK 上运行。我已按照入门资源的要求进行了操作,MCU 和 DSP FW 主要基于 SDK 中的"audio_demo_bm" 。
MCU FW 仅对 GPIOS 进行基本初始化,以实现简单的用户界面。
DSP FW 初始化音频输入/输出的 I2S 和 DMA,数据使用 " 三重缓冲器 " 方法进行缓冲,如恩智浦的一份应用笔记中所建议。
一旦接收到 1 毫秒的音频数据(即 1 毫秒),I2S/DMA 接收 ISR 就会调用实际的音频处理功能。已收到 48 个左样本和 48 个右样本)。
音频数据的处理使用 natureDSP 库函数。
到目前为止,当构建 MCU 固件和 DSP 固件并在调试模式下运行时,一切都按预期运行,但我观察到从 MCU 加载 DSP 固件时会出现问题(发布版本,DSP_IMAGE_COPY_TO_RAM = 1)。
当音频处理函数(从 ISR 调用)放在".iram0.text 中时"(指令 TCM 存储器)时,DSP FW 出现异常。
xt-ocd 打印:
错误:Exception details: exccause:0x0, excvaddr:0xff0042, epc:0x240205bc, epcdbg:20e022
如果将函数放在非 TCM 内存中,或者在调试模式下加载 DSP FW,则不会出现这种情况。
有没有什么东西可以解释观察到的问题?
这是否与内存对齐有关?
@Omar_Anguiano感谢您的回复。
我发现 post_build 脚本没有复制".iram0.text"切入包含在 MCU 代码中的二进制文件,因此实际的功能代码不存在于内存中。
我没有进一步研究对齐问题,因为我目前可以继续使用"调试" 模式工作。
BR Witali
对齐问题可能是一个潜在的问题,我发现如果它是为调试版本而构建的,则不会发生这种情况。
在为发布版本进行构建时,编译器可能会添加一些优化级别,这可能会影响示例的工作方式。
如果 MCU 无法正确复制 .iram0.text 或对齐,DSP 可能会获取无效指令,从而导致出现 exccause:0x0(非法指令)。
致以最崇高的敬意,
Omar