STM32 Atollic TrueSTUDIO-存储器的图形视图

时间:2018-12-15 16:38:36

标签: eclipse-plugin stm32 truestudio

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

  • 内存视图
  • SWV实时数据时间线

这些工具都没有强大的功能来分析阵列上的信号,并且不必实时:仅在达到断点后绘制阵列。

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

谢谢您的建议

4 个答案:

答案 0 :(得分: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) ;                                             

The sinus wave plotted in Matlab

答案 1 :(得分:1)

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

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

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

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"))

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

答案 2 :(得分:0)

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

可在此处使用:https://www.st.com/en/development-tools/stm-studio-stm32.html

需要ST-Link来运行它。

答案 3 :(得分:0)

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

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

enter image description here