Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse plugin STM32 Atolic TrueSTUDIO-内存的图形视图_Eclipse Plugin_Stm32_Truestudio - Fatal编程技术网

Eclipse plugin STM32 Atolic TrueSTUDIO-内存的图形视图

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中绘制它,但对于这样一件简单的事情来说,它似乎真的不合适 感谢您的建议虽然我个人并不知道有

我使用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"))