This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C129XNCZAD:Opus 编解码器中止编解码

Guru**** 2418170 points
Other Parts Discussed in Thread: TM4C129XNCZAD, EK-TM4C1294XL

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/688816/tm4c129xnczad-opus-codec-abort-codification

器件型号:TM4C129XNCZAD
Thread 中讨论的其他器件: EK-TM4C1294XL

我在 TM4C129XNCZAD 上运行德州(CODEC Opus)的 SPMA 076示例、当我编码 wav 文件时、该过程在内存分配后中止。
知道编码器逐帧编码后、我注意到在编码了一些帧后、该过程被中止。 因此、我认为内存分配正常运行、内存分配不能正常工作。 我认为、由于在编码某些帧后、系统无法为编码下一个帧分配更多的内存。

是否有人能帮助我解决这个问题或确定问题的原因?

请参阅我使用的示例的链接 :www.ti.com/.../spma076.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Joao、

    您的项目的堆和堆栈设置是什么? 您是否根据示例代码设置了它们?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、  

    感谢您的回答、最初我的堆和堆栈设置与示例设置相同、使用该设置、我只能对长度为5秒或更短的 WAV 文件的一半帧进行编码。

    如果我添加更多的堆大小(TM4C 存储器允许的最大堆大小)、我可以为同一文件编码更多的帧、即文件的75%或75%以下、如下图所示。

    我将堆大小从98304 (原始示例)修改为230000。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Joao、

    您在应用手册中使用了哪些项目? 您是否通过 SD 卡执行此操作?

    您是否有关于正在处理的.wav 文件的详细信息? 采样率等
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ralph、
    我正在使用来自德州的示例 spma076的 opus_enc_dec 项目。 我使用内部存储器来存储.wav 文件(~7000字节)、并通过 Code Composer Studio 的"加载存储器"导入文件。 编码器的输出也存储在内部存储器中(静态矢量中)。 我不使用 SD 卡、因为它对我的项目不有用。

    .wav 详细信息:
    采样率:8000
    每个样本的位数:8
    通道:1.

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Joao、

    Opus 编码器/解码器占用大量内存、因此我们不建议为此使用内部器件内存。 这是使用 SD 卡接口的主要原因。 您看到的限制可能与此直接相关。

    还有一个问题、使用的帧大小是多少?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、

    该工程默认设置帧大小(20ms)。

    今天、我尝试在内部存储器中插入一个较小的.wav 文件(大小是前一个文件的一半)、并且能够对文件进行编码而没有问题。 在文件 memory.c (CCS)中存在一个名为"memmap()"的函数、但我无法使用它、我已经定义了 malloc_debug。  

    我想知道我在运行时使用了多少个分配和空闲存储器、所以我尝试修改 memory.c、但 不幸的是、该更改不会影响项目。 如何使用修改后的 memory.c 文件运行工程?

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Joao、

    您能否将 CCS 项目发送给我、以便我可以尝试在我的硬件上复制该问题? 我同时拥有 DK-TM4C129X 和 EK-TM4C1294XL、因此任一电路板都可以供我使用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、

    好的。 我将项目发送到这里。  如果您对该项目有任何疑问、请向我提问。

    谢谢

    e2e.ti.com/.../opus_5F00_enc_5F00_dec_5F00_my.rar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Joao、

    谢谢、我一直在努力构建它(由于我没有 D 驱动器、所以必须首先解决 opus 库的问题...) 并在程序中单击几个未正确声明的函数。

    minit 是一个、UARTgetdata 是另一个

    if (need_mem_init) minit();
    
    numbytes = UARTgetdata (pcWriteMem、15000); 

    您能否为我提供如何编译这些函数的步骤? 至少是最小值、因为这似乎是存储器设置的核心。 如果您认为 UART 与之无关、我可以将其注释掉。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、

    这些函数是我的函数、我这么做是为了调试代码、我已经对它们进行了注释、我将把项目附加到这里、您可以替换主函数。 UART 在该部分中不相关。

    e2e.ti.com/.../3531.opus_5F00_enc_5F00_dec_5F00_my.rar

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Joao、

    我现在已经正确编译了该项目、谢谢。 遗憾的是、我的 DK 电路板出现了一些问题、因此在下周之前、我可能无法提供更多反馈。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Joao、

    我需要一个全新的 DK 电路板才能正确运行您的示例、因此在该示例发布之前、我还需要几天时间才能进行进一步调试。 如果您在最终取得了任何进展、请告诉我、我可以尽力帮助您。

    很抱歉耽误您的支持。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、

    在这几天里、我只验证了对于短的.wav 文件(小于1秒)、它可以进行编码和解码、而不会出现任何问题。  

    谢谢

    João μ A  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Joao、

    很抱歉耽误您的时间、但我启动并运行了新电路板、现在运行了示例。 我应该更快地阅读这些帖子、但您能否提供一个有问题的.wav 文件、以便我可以使用 CCS 中的加载存储器功能上载它、以测试您看到的确切问题? 我认为我拥有的任何一个都不适合器件存储器。 另外、您使用什么命令行来触发转换、因为存储器中的所有数据都没有涉及任何实际文件名?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、

    我使用"enc xxx xxx"行命令来触发编码、使用"dec xxx xxx"来触发解析、其中"xxx"可以是任何值。

    在这几天里、我一直在改进代码、因此我在这里发送主文件、您只需要替换文件的整个文本。  

    我可以毫无问题地编写代码的 wav 文件是 veryShort_wav.bin、它只是 clear_wav.bin 的一个示例。 您必须将文件.bin 加载到"array_mcoo"的地址、TYPE_SIZE = 32位。

    谢谢

    e2e.ti.com/.../files.rar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Joao、

    谢谢您、我已经能够重新创建您在电路板上看到的问题、以及在对 clean_wav.bin 文件进行编码期间、ALLOC 调用后会出现 LOADER_EXIT 的问题。

    不幸的是、我电路板上的问题导致了一些时序问题、因为帮助开发 Opus 代码的工程师现在已不在办公室、因此、尽管我将会更深入地研究这一点、 我不确定我是否会取得任何积极进展、直到与他们取得成功。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、

    您是否已经获得任何结果?

    谢谢  

    João Louro

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Joao、

    不幸的是、不是、本周我将无法再深入了解它。 下周、我的同事将回来、我可以和他谈论该主题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、

    您是否已经获得任何结果?

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Joao、

    不幸的是,还没有。 这个问题一直存在、但由于我需要与工程师合作、而且我在不同的小组中、因此很难调整我们的时间表。 我们已在星期二安排时间进一步研究这一点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Joao、

    我和我的同事终于能够花适当的时间来处理这个问题、以发现如何解决这个问题。 问题的核心肯定是堆空间不足、这就是您增加堆后、结果可以进一步处理的原因。

    问题已出现、因为您正在以非典型的方式处理 Opus 数据。 Opus 背后的理念是尝试实时编码、运行 Opus 库的处理器应读取数据块、对其进行编码、然后将结果发回。 这是 TI 提供的示例如何与 SD 卡配合使用的原则。

    将整个数据存储在 MCU 存储器中并从中进行处理的做法并不是 Opus 库或 TI 示例的预期用途。

    因此、对于我们来说、堆空间不足的根本原因不清楚、 但一种可能的理论是、由于 Opus 源代码导致存储器泄漏、而 Opus 源代码仅在尝试执行与您尝试的应用类似的应用时才会出现。 这将是一个问题、您可以直接向 Opus Codec 组(Xith)提出、看看他们是否知道他们提供的源代码可能存在任何内存泄漏。

    我们的 Opus 应力测试包括通过以太网编码3分钟长的文件、MCU 同时处理以太网堆栈和 Opus 编码、在根据应用手册配置堆和堆栈时、显示出存储器没有问题。

    遗憾的是、从 TI 的最终产品来看、我们在这个问题上还没有太多的其他产品可以提供、因为
    1) 1)它在很大程度上偏离了 Opus 编码的意图以及我们选择制作 Opus Example+App Note 的原因
    2) 2)问题似乎是由 Opus 源代码引起的、因为我们在所做的适用于 Opus 示例的任何应力测试中、没有看到堆存在任何问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Rsh

    感谢你的帮助。

    您能否向我发送项目解决方案、了解"通过以太网传输3分钟文件、且 MCU 同时处理以太网协议栈和 Opus 编码"。 我想测试此实现、并在后面做进一步的说明。

    谢谢、
    João μ A
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Joao、

    当然、您可以在此 TI 参考设计中找到所有详细信息、包括软件 :www.ti.com/.../TIDM-TM4C129POEAUDIO