STM32 Atollic TrueSTUDIO - Графическое представление памяти

Я использую Atollic TrueSTUDIO для STM32 в качестве интегрированной среды разработки на базе Eclipse для выполнения цифровой обработки сигналов аудиосигнала. Я ищу способ построения массива (16-битных аудиосэмплов) из оперативной памяти. На данный момент я использую:

  • Вид памяти
  • Линия времени данных в реальном времени SWV

Ни один из этих инструментов не является мощным средством анализа сигнала в массиве, и он не обязательно должен быть в режиме реального времени: просто построение массива после достижения точки останова.

Есть ли Eclipse Plugin или какие-то другие способы сделать это? Я подумываю экспортировать оперативную память и файл и выложить ее в Matlab, но она кажется неподходящей для такой простой вещи.

Спасибо за любые советы

3 ответа

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

Не забудьте добавить действия к текущей точке останова. Теперь, когда точка останова достигнута, переменная должна быть автоматически выгружена и нанесена на график.

Удивительно, что в 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

Написать простое приложение на C#. Используйте полу хостинг для сброса памяти в текстовый файл. Откройте его и отобразите.

Недавно у меня возникли проблемы с MEMS, и это было написано менее чем за час. IMO (по моему мнению) проще написать программу, которая будет визуализировать данные, а не тратить часы или дни на поиск готового:

Хотя нет никаких плагинов Eclipse, которые бы выполняли то, что вы просите, о которых я лично знаю, есть STM Studio, основная цель которой - отображение переменных в режиме реального времени. Он анализирует ваш файл ELF, чтобы получить доступные переменные, поэтому попытка хотя бы попробовать его должна быть минимальной.

Это доступно здесь: https://www.st.com/en/development-tools/stm-studio-stm32.html

ST-Link требуется для его запуска.

Другие вопросы по тегам