2

我正在使用 Atollic TrueSTUDIO for STM32 作为基于 Eclipse 的 IDE 来对音频信号执行数字信号处理。我正在寻找一种从 RAM 内存中绘制数组(16 位音频样本)的方法。目前我正在使用:

  • 记忆观
  • SWV实时数据时间线

这些工具都不能强大地分析阵列上的信号,而且它不一定是实时的:只是在到达断点后绘制一个阵列。

是否有 Eclipse 插件或其他一些方法可以做到这一点?我正在考虑将 RAM 内存和文件导出并在 Matlab 中绘制,但对于这么简单的事情似乎真的不合适。

感谢您的任何建议

4

4 回答 4

2

在 Atollic 中,您可以轻松地将 gdb 命令附加到断点。这样做可以让您自动转储任何变量。此外,您可以在之后执行一次外部程序,以绘制转储变量的内容。

为此,请转到断点属性并创建一个新操作。选择“调试器命令操作”并使用 dump binary value x.bin x将变量 x 转储到文件 x.bin

您还可以从断点启动 python 脚本来绘制数据。使用附加的“外部工具操作”并选择您的 python 位置。确保选择您当前的工作词典。使用参数传递 python 文件的完整路径。以下文件将导入一个浮点数组并绘制它。

import struct
import numpy as np
import matplotlib.pyplot as plt
import os

def readBinaryDump(filename):
    result = []
    N=8
    with open(filename,'rb') as f:
        while(True):
            b = f.read(4*N);
            if len(b) ==0:
                break
            fn = "f"*N
            result.append(struct.unpack(fn,b))

    result = np.array(result)  
    return result.ravel()  

plt.plot(readBinaryDump("x.bin"))

不要忘记将操作添加到当前断点。现在一旦到达断点,变量应该被自动转储和绘制。

于 2019-05-08T08:51:17.483 回答
1

虽然在 Atollic/Eclipse 中无法嵌入任何内容令人惊讶,但我还是遵循了编写特定应用程序的想法。以下是我使用的步骤:

转储内存:

  • 调试你的软件
  • 停在断点上
  • 查看>内存>导出按钮>格式:“纯文本”

代表正弦波的文件如下所示:

00 00 3E 00 7D 00 BC 00 FB 00 39 01 78 01 
B7 01 F6 01 34 02 73 02 B2 02 F0 02 2F 03 

您应该像这样阅读这些 int16 示例:

 1. 0x0000
 2. 0x003E
 3. 0x007D
 4. etc...

编写这个 Matlab 脚本:

fileID = fopen('your_file','r');    
samples =  textscan(fileID,'%s')   
fclose(fileID);                   
samples = samples{1};              
words = strcat(samples(2:2:end,1), samples(1:2:end,1));  
values = typecast(uint16(hex2dec(words)),'int16');      
plot(values) ;                                             

在 Matlab 中绘制的正弦波

于 2018-12-16T17:42:58.807 回答
0

虽然我个人知道没有任何 Eclipse 插件可以满足您的要求,但 STM Studio 的主要目的是实时显示变量。它会解析您的 ELF 文件以获取可用的变量,因此至少尝试一下的工作量应该很小。

它在这里可用:https ://www.st.com/en/development-tools/stm-studio-stm32.html

运行它需要 ST-Link。

于 2018-12-15T18:47:16.857 回答
0

用 C# 编写简单的应用程序。使用半托管将内存转储到文本文件。打开它并显示。

最近我遇到了 MEMS-es 的问题,这是在不到一小时的时间内完成的。IMO(在我看来)更容易编写程序来可视化数据,而不是浪费数小时或数天来寻找现成的数据:

在此处输入图像描述

于 2018-12-16T15:29:12.927 回答