MCUCapture - утилита для захвата данных из массива в памяти микроконтроллера

Иногда хочется посмотреть, как выглядят в виде графика данные, хранящиеся в каком-либо массиве в памяти микроконтроллера. Специально для этой цели я написал программу MCUCapture: github.com/iliasam/MCUCapture



В отличие от STM Studio, моя программа предназначена для работы именно с массивами, а не отдельными переменными.
Можно просматривать содержимое массива структур (на скриншоте выше как раз такой случай). Это может быть полезно, если в массиве содержатся данные, захваченные из нескольких каналов АЦП.

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

Дополнительно реализован захват данных из RAM framebuffer, и отображение на экране ПК (т.е. возможность делать скриншоты). Пока поддерживаются только Ч/Б индикаторы OLED (к примеру SDD1306) и LCD (к примеру ST7565R):


Использование программы
Соединение с микроконтроллером производится при помощи программы OpenOCD.

Управление захватом данных производиться элементами в панели «Data Source».
  1. В первую очередь нужно указать расположение массива в памяти «Start address» и его размер «Array size, bytes». Эти параметры можно установить автоматически, используя файлы *.elf, *.out, *.afx, сгенерированные компилятором. Для этого нужно нажать кнопку «Addr. from ELF»:
  2. Нажатие на кнопку «Manual Read» запускает считывание данных из массива. Так как при этом контроллер не останавливается, то данные могут изменится, и графики выйдут некорректными.
  3. Если нажать на кнопку «Wait End WP», то на последний байт данных будет установлен write watchpoint, т.е. при записи в эту ячейку RAM MCU остановит выполнение программы. После этого утилита автоматически захватит данные из RAM, уберет watchpoint, и выведет MCU из режима Halt. Этот режим нельзя использовать, если данные записываются в RAM при помощи DMA.
  4. Если нажать на кнопку «Wait Trigger», то на переменную, заданную в настройках Capture Trigger, будет установлен value watchpoint, т.е. MCU остановит выполнение программы, если в эту переменную будет записано определенное значение. В остальном все аналогично предыдущему режиму. Важно отметить, что в текущей версии OpenOCD работа с value watchpoint для Cortex-M не реализована, так что мне пришлось пропатчить OpenOCD. Ссылка на моя реализацию
  • +8
  • 21 декабря 2019, 15:02
  • citizen

Комментарии (3)

RSS свернуть / развернуть
Уточните пожалуйста, с какими МК это будет работать?
0
В теории — со всеми, что поддерживаются OpenOCD.
Я проверял с STM32 F1, F3, F4.
0
Ох, спасибо тебе, мил человек! Как же вовремя, как раз то, чего не хватало для полного счастья! Теперь будет чем перегонять данные с МК в Octave.
Было бы с чего — поставил бы плюсик в рейтинг!
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.