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.

[参考译文] EVM430-FR6047:FFT (通过 DSP 库 API)通过 LEA (使用256个样本而不是128个样本)不适合现有存储器

Guru**** 2577385 points
Other Parts Discussed in Thread: MSP430FR6047

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/699893/evm430-fr6047-fft-via-dsp-library-api-via-lea-with-256-samples-instead-of-128-does-not-fit-into-existing-memory

器件型号:EVM430-FR6047
主题中讨论的其他器件:MSP430FR6047

您好!

我按照 DSP 库示例"transform_ex1_FFT_fixed_Q15"来实现代码中快速傅里叶变换的使用、该变换应进行测量并计算 FFT (目标是通过希尔伯特变换获得包络)。

到目前为止、所有操作都正常、但样本大小仅为128。 刷写后、显示"430 mm:flash/FRAM 的使用量为40180字节。 RAM 的使用是4958字节。'

但样本大小为256时、会出现以下错误:"../lnk_msp430fr6047.cmd"、第257行:错误#10099-D:程序将无法放入可用内存中。 对齐方式对".leaRAM"大小为0xea0的运行放置失败。 可用存储器范围:  LEARAM      大小:0xec8      未使用:0xec8      最大空洞:0xec8

但是、应该不会留下足够的内存? MSP430-FR6047具有8KB RAM、LEA 和 CPU 共享4KB RAM。 我是否能俯瞰明显的事物?

相关的代码片段为:

全局:

#define FFTsamples 256

DSPLIB_DATA (输入、MSP_ALIGIN_FFT_Q15 (FFTSAples))_Q15 INPUT [FFTSamples];

在主流程中:

//使用 ADC 波形填充输入数组
uint16_t* pUPSCap16 =(uint16_t*)(USS_getUPSPtr (&gUssSWConfig));
uint16_t c = 0;
while (c < FFTsamples){
input[c]=*pUPSCap16;
pUPSCap16++;
C++;

// FFT
MSP_FFT_Q15_params FFtParams;
fftParams.length = FFTsamples;
fftParams.bitReverse = true;
MSP_FFT_FIXED_Q15 (&fftParams、输入);

另一个问题:我想知道、FFT 样本大小为128、例如只有160个可用的 ADC 样本、该代码如何能够生成128个有效的 FFT 值。 实数矢量的 FFT 不会导致大小相同的矢量、而是镜像的、因此应该只有一半可用吗? 是否涉及某种内插或任何其他内容?

此致

Daniel

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

    Daniel、您好!

    是的、LEA RAM 大小为4KB。 您可以在 cmd 文件中看到定义。 实际上、LEA 需要为堆栈保留一些存储器。 LEA RAM 的大小可用于数据、为0xec8。

    我想您可以将 FFTsamples 更改为128、并编译代码以查看映射文件。 在映射文件中、您可以确定占用哪些变量

    LEA RAM 存储器。

    对于您的第二个问题、我不是 FFT 算法专家、但我将咨询我们的 FFT 专家、稍后再与您联系。

    B.R.

    冬季

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

    非常感谢您的支持。 在"内存分配"工具的帮助下、我发现 LEA RAM 确实有点短(确切地说是56个字节;但我仍然希望释放更多的内存)。

    现在、主要问题被指出为:

    leaRAM:init (USS_userConfig.obj) 1568字节
    leaRAM:uninit (USS_userConfig.obj) 1568字节

    首先:初始化和取消初始化占用完全相同的空间是什么?取消初始化部件的作用是什么?

    我看到问题是我希望同时运行您的算法和我的算法来比较这两者、而您的配置结构已经占用了太多空间。 现在、我想知道如何解决这个问题。

    必须有机会从 LEA RAM 中释放一些内存、但我不熟悉内存管理。 我尝试在结构以及链接器映射文件上进行医生检查、但没有成功。 例如、我想我可以将这些结构放入正常的 RAM 中。 毕竟、我不依赖于演示 GUI、也不依赖于在断电或类似情况下持续存在的配置。

    任何建议都将不胜感激。


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

    您好!

    仍然想知道内存问题。 任何评论都是有用的。

    大家好

    Daniel

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

    Daniel、您好!

    您可以提供您的项目吗? 我想在我旁边检查您的项目。

    B.R

    冬季

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

    当然。 我该怎么做? 我找不到您的电子邮件地址或任何内容。


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

    Daniel、您好!

    单击"答复"时、将出现"插入代码、附加文件等..." 链接。 单击它并输入一个具有 "附加文件"功能的新答复页。 请参见下图。

    B.R

    冬季

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

    嗨、冬天、

    感谢您提供信息。 只需在 USS_WATE_Demo 中调用该 c 文件中的函数,而不是 USSLibGUIApp_Engine()。

    此致

    Daniel

    e2e.ti.com/.../mainLoop.c

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

    Daniel、您好!

    我不知道您使用的 USSSWLib 版本。 实际上、我们已经采用 了希尔伯特变换、 以便在之后的 USSSWLib 版本中获得算法中的包络 。 该算法也使用 LEA。 最新的  ,您可以按 配置选择 Lobe Tracking 或 Hilbert Transformation。 因此、您可以比较两种算法的性能。 有关 USSSWLib 的更多新特性信息、请参阅发行说明。

    B.R

    冬季

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

    您好、冬季、

    感谢你的答复。 我知道这些特性、因为我已经在使用 USSSWLib 02_10_00_07。 但实际上、我希望同时运行您的算法和我的算法、问题是您的已经占用了几乎所有的有限 LEA-RAM、因此我无法将 LEA 用于我自己的算法。 这是关于内存管理、我显然还不能完全理解。

    很抱歉出现问题。

    此致

    Daniel

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

    Daniel、您好!

    USSLib 使用的 LEA 存储器的定义如下。 您可以在 USS_userConfig.c 和 USS_userConfig.h 中找到该选项

    您可以通过两种方式来满足您的需求。

    1.将"USS_SW_LIB_APP_MAX_CAPTURE_SIZE"从372降低到较小的值。 但捕获样本太少可能导致结果不准确。

    2.用 您自己的算法函数替换 USS_runAlgorithmsFixedPoint()。 然后、您可以重复使用 上述定义的 LEA 存储器空间。 ADC 捕获结果存储在 LEA 变量的上方。 但您无法同时评估两种算法。  

    B.R

    冬季

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

    您好、冬季、

    非常感谢。 这对我帮助很大。

    此致

    Daniel