我将Atollic TrueSTUDIO for STM32用作基于Eclipse的IDE,以对音频信号执行数字信号处理。我正在寻找一种从RAM内存绘制阵列(16位音频样本)的方法。目前,我正在使用:
这些工具都没有强大的功能来分析阵列上的信号,并且不必实时:仅在达到断点后绘制阵列。
是否有Eclipse插件或其他方法可以做到这一点? 我正在考虑导出RAM内存并将其存储在文件中,并在Matlab中进行绘制,但对于这样简单的事情来说似乎真的不合适。
谢谢您的建议
答案 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...
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) ;
答案 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)