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) ;
Написать простое приложение на C#. Используйте полу хостинг для сброса памяти в текстовый файл. Откройте его и отобразите.
Недавно у меня возникли проблемы с MEMS, и это было написано менее чем за час. IMO (по моему мнению) проще написать программу, которая будет визуализировать данные, а не тратить часы или дни на поиск готового:
Хотя нет никаких плагинов Eclipse, которые бы выполняли то, что вы просите, о которых я лично знаю, есть STM Studio, основная цель которой - отображение переменных в режиме реального времени. Он анализирует ваш файл ELF, чтобы получить доступные переменные, поэтому попытка хотя бы попробовать его должна быть минимальной.
Это доступно здесь: https://www.st.com/en/development-tools/stm-studio-stm32.html
ST-Link требуется для его запуска.