Eclipse plugin STM32 Atolic TrueSTUDIO-内存的图形视图
我使用Atolic TrueSTUDIO for STM32作为基于Eclipse的IDE对音频信号执行数字信号处理。我正在寻找一种从RAM内存中绘制16位音频样本阵列的方法。目前我正在使用: 内存视图 SWV实时数据时间线 这些工具都无法分析阵列上的信号,也不必是实时的:只需在到达断点后绘制阵列即可 有没有Eclipse插件或其他方法来实现这一点? 我正在考虑将RAM内存导出到一个文件中,并在Matlab中绘制它,但对于这样一件简单的事情来说,它似乎真的不合适Eclipse plugin STM32 Atolic TrueSTUDIO-内存的图形视图,eclipse-plugin,stm32,truestudio,Eclipse Plugin,Stm32,Truestudio,我使用Atolic TrueSTUDIO for STM32作为基于Eclipse的IDE对音频信号执行数字信号处理。我正在寻找一种从RAM内存中绘制16位音频样本阵列的方法。目前我正在使用: 内存视图 SWV实时数据时间线 这些工具都无法分析阵列上的信号,也不必是实时的:只需在到达断点后绘制阵列即可 有没有Eclipse插件或其他方法来实现这一点? 我正在考虑将RAM内存导出到一个文件中,并在Matlab中绘制它,但对于这样一件简单的事情来说,它似乎真的不合适 感谢您的建议虽然我个人并不知道有
感谢您的建议虽然我个人并不知道有任何Eclipse插件可以满足您的要求,但是有一个STM Studio,其主要目的是实时显示变量。它解析您的ELF文件以获取可用的变量,因此至少尝试一下应该是最少的 可在以下位置获取:
运行它需要ST Link。用C编写简单的应用程序。使用半托管将内存转储到文本文件中。打开它并显示 最近我遇到了MEMS es的问题,这篇文章在不到一个小时的时间里就完成了。在我看来,编写可视化数据的程序更容易,而不是浪费数小时或数天来搜索现成的数据:
虽然在Atolic/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脚本:
在Atolic中,您可以轻松地将gdb命令附加到断点。这样做,允许您自动转储任何变量。此外,您可以在之后执行一次外部程序,以绘制转储变量的内容 为此,转到断点属性并创建一个新操作。选择调试器命令操作并使用转储二进制值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"))
不要忘记将操作添加到当前断点。现在,一旦到达断点,就应该自动转储和打印变量 谢谢,我试过了。虽然它对某些应用程序可能有帮助,但对我的需求却没有真正的帮助。它在运行时实时记录数据。我想要的是更简单的,只是在µC停止时绘制我的内存范围。@SylMont那么实际上,您可能需要自己做一些事情,这取决于您对Matlab、Python、Java等的熟悉程度。
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"))