Go to file
2025-07-23 18:18:19 +03:00
parse_xml опять кууууча всего: 2025-07-23 17:13:28 +03:00
Src Обновлены readme 2025-07-23 18:18:19 +03:00
.gitignore опять кууууча всего: 2025-07-23 17:13:28 +03:00
debug_tools.c Начата работа над lowlevel терминалкой (по адресам из xml) 2025-07-19 18:01:40 +03:00
debug_tools.h все неплохо работает. 2025-07-21 13:40:52 +03:00
DebugVarEdit.exe опять кууууча всего: 2025-07-23 17:13:28 +03:00
DebugVarTerminal.exe опять кууууча всего: 2025-07-23 17:13:28 +03:00
README.md Обновлены readme 2025-07-23 18:18:19 +03:00

DebugTools - Просмотр переменных по указателям

Содержание

  1. Описание модуля
  2. Описание приложения для настройки
  3. Описание терминалки для считывания
  4. Для разработчиков

Программный модуль DebugTools

Модуль состоит из трех файлов:

  • debug_tools.c - реализация считывания переменных
  • debug_tools.h - объявление всякого для считывания переменных
  • debug_vars.c - определение массива считываемых переменных

Этот модуль предоставляет функциональность для чтения значений переменных во встроенной системе, включая работу с IQ-форматами, защиту доступа и проверку диапазонов памяти.

Для чтения переменных можно использовать функции:

/* Читает значение переменной по индексу */
int Debug_ReadVar(int var_ind, int32_t *return_long);
/* Читает имя переменной по индексу */
int Debug_ReadVarName(int var_ind, DebugVarName_t name_ptr, int *length);
/* Читает возвращаемый тип (IQ) переменной по индексу */
int Debug_ReadVarReturnType(int var_ind, int *vartype);
/* Читает тип переменной по индексу */
int Debug_ReadVarType(int var_ind, int *vartype);


/* Читает значение переменной с нижнего уровня */
int Debug_LowLevel_ReadVar(int32_t *return_long);
/* Инициализирует отладку нижнего уровня */
int Debug_LowLevel_Initialize(DateTime_t *external_date);
/* Читает возвращаемый тип (IQ) низкоуровнено заданной переменной */
int Debug_LowLevel_ReadVarReturnType(int *vartype);
/* Читает тип низкоуровнено заданной переменной.*/
int Debug_LowLevel_ReadVarType(int *vartype);

Переменные доступные для чтения определяются в debug_vars.c (их можно прописывать вручную или генерировать через DebugVarEdit):

// Определение массива с указателями на переменные для отладки
int DebugVar_Qnt = 5;
#pragma DATA_SECTION(dbg_vars,".dbgvar_info")
//												pointer_type    iq_type			return_iq_type  short_name
DebugVar_t dbg_vars[] = {\
{(uint8_t *)&freqTerm,                         	pt_float,       t_iq_none,      t_iq10,         "freqT"              }, \
{(uint8_t *)&ADC_sf[0][0],                      pt_int16,       t_iq_none,      t_iq_none,      "ADC_sf00"           }, \
{(uint8_t *)&ADC_sf[0][1],                      pt_int16,       t_iq_none,      t_iq_none,      "ADC_sf01"           }, \
{(uint8_t *)&ADC_sf[0][2],                      pt_int16,       t_iq_none,      t_iq_none,      "ADC_sf02"           }, \
{(uint8_t *)&ADC_sf[0][3],                      pt_int16,       t_iq_none,      t_iq_none,      "ADC_sf03"           }, \
{(uint8_t *)&Bender[0].KOhms,                   pt_uint16,      t_iq,      		t_iq10,      	"Bend0.KOhm"         }, \
{(uint8_t *)&Bender[0].Times,                   pt_uint16,      t_iq_none,      t_iq_none,      "Bend0.Time"         }, \
};

LowLevel - Просмотр абсолютно любых переменных

Также присутствует утилита parse_xml.exe, которая генерирует .xml файл с всеми переменными в программе и их адрессами Для её подключения:

  • В Pre-Build Steps добавить следующую команду. Это удаление debug_tools.obj файла для его перекомпиялции с актуальной датой компиляции
cmd /c del /Q "${CWD}\Src\DebugTools\debug_tools.obj" 
  • В Post-Build Steps добавить следующую команду. Это:
    • формирование с помощью утилиты компилятора ofd2000 .xml файла с полной отладочной информацией.
    • формирование отладочной информации в текстовом файле (для получения таймштампа)
    • запуск утилиты parse_xml.exe для формирования итогового <projname>_allVars.xml с информацией о переменных и адресах
"${CG_TOOL_ROOT}/bin/ofd2000" --obj_display=symbols --dwarf --dwarf_display=all --xml --xml_indent=1 --output="${BuildArtifactFileBaseName}_ofd_dump.xml" "${BuildArtifactFilePath}"
"${CG_TOOL_ROOT}/bin/ofd2000" "${BuildArtifactFilePath}" > ${CCS_PROJECT_DIR}/bin/temp.txt
"${CCS_PROJECT_DIR}/Src/DebugTools/parse_xml/parse_xml.exe" ${BuildArtifactFileBaseName}_ofd_dump.xml ${CCS_PROJECT_DIR}/bin/temp.txt ${BuildArtifactFileBaseName}_allVars.xml" 

После, с использованием терминалки можно прочитать любые переменные по адресам. (должен совпадать таймштапм в прошивке и .xml файла, иначе контроллер ответит ошибкой)

DebugVarEdit - Настройка переменных

DebugVarEdit — графическое приложение для Windows, предназначенное для настройки и генерации отладочных переменных (debug_vars.c) на основе исходного C-проекта. Работает с makefile проекта, сохраняет изменения в XML и позволяет удобно редактировать переменные и их типы через интерфейс.

Программа — один исполняемый файл DebugVarEdit.exe, не требующий установки и дополнительных зависимостей.

Требуется Windows 7 или новее.


Как использовать приложение

  1. Запустите DebugVarEdit.exe.

  2. Укажите пути и контроллер:

    • Путь к XML — новый или существующий файл настроек переменных;
    • Путь к проекту — путь к корню проека (папка, которая является корнем для проекта в Code Composer);
    • Путь к makefile — путь к makefile относительно корня проекта;
    • Путь для debug_vars.c — папка, куда будет сгенерирован файл debug_vars.c с переменными.
    • МК — TMS или STM. Они отличаются размером int, и также принятыми кодировками файлов (utf-8/cp1251)
  3. Нажмите Сканировать переменные:

    • Программа проанализирует исходники, указанные в makefile, и найдёт все переменные.
    • Результат сохранится в двух XML-файлах:
      • structs.xml — информация обо всех структурах и typedef;
      • аш_файл>.xml — список всех найденных переменных.
  4. Нажмите Добавить переменные:

    • В левой таблице отображаются все найденные переменные.
      Для добавления переменной в проект дважды кликните по ней или нажмите кнопку >, чтобы переместить в правую таблицу.
    • В правой таблице находятся переменные, выбранные для использования.
      Чтобы убрать переменную из проекта, переместите её обратно в левую таблицу двойным кликом или кнопкой <.
    • После выбора переменных нажмите Применить, чтобы обновить основной список переменных и включить их в проект.
  5. Настройте параметры выбранных переменных:

    • En — включение или отключение переменной для генерации;
    • Base Type — базовый тип переменной (например, int8, uint16 и т.д.);
    • IQ Type — формат IQ, если применимо;
    • Return Type — формат возвращаемого значения (IQ-тип или целочисленный);
    • Shortname — короткое имя переменной для для терминалки.

    Все параметры выбираются из выпадающих списков, которые можно настроить, чтобы отображались только нужные опции.

  6. Нажмите Сгенерировать файл для создания файла debug_vars.c с выбранными переменными.


Возможности

  • Загрузка и сохранение настроек переменных в XML-файлах.
  • Автоматическое определение исходных файлов с переменными для удобства работы.
  • Редактирование переменных: включение, короткого имени и типов через удобные списки.
  • Подсветка ошибок при вводе (неправильные имена, слишком длинные короткие имена).
  • Быстрая фильтрация переменных по столбцам.
  • Автоматическая генерация файла debug_vars.c с выбранными переменными.
  • Возможность сразу открыть сгенерированный файл в редакторе.
  • Умное автодополнение имён переменных и полей структур.

Пример XML-файла

<project proj_path="C:/myproj" makefile_path="Debug/Makefile" structs_path="Src/DebugTools/structs.xml">
  <variables>
    <var name="g_myvar">
      <enable>true</enable>
      <show_var>true</show_var>
      <shortname>myv</shortname>
      <pt_type>pt_float</pt_type>
      <iq_type>t_iq24</iq_type>
      <return_type>t_iq24</return_type>
      <type>float</type>
      <file>Src/main/main.c</file>
      <extern>true</extern>
      <static>false</static>
    </var>
  </variables>
</project>

DebugVarTerminal - Считывание переменных (для TMS)

DebugVarTerminal — терминалка для считывания переменных по RS-232 протоколу RS_Functions. Программа — один исполняемый файл DebugVarTerminal.exe, не требующий установки и дополнительных зависимостей.

Требуется Windows 7 или новее.


Как использовать приложение

  1. Запустите DebugVarTerminal.exe.

  2. Выберите COM Port и скорость Baud. Нажмиите Open

  3. Для считывания переменных заданных в *debug_vars.c:

    • Откройте вкладку Watch.
    • Выберите стартовый индекс переменной и количество переменных для считывания.
    • Нажмите одну из кнопок:
      • Update Service - считывает информацию об именах и возвращаемых IQ типах переемнных
      • Read Value(s) - считывает и форматирует значения переменных в соответствии с IQ типами
      • Start Polling - начать опрос выбранных переменных с заданным интервалом. При старте опроса, имя и тип переменных считываются автоматически
  4. Для считывания переменных по адресам:

    • Откройте вкладку LowLevel.
    • Выберите projname_allVars.xml в папке bin рядом с бинарником. Из него подгрузятся все доступные для считывания переменные
    • Выберите переменные кнопкной Выбрать переменные
    • Задайте IQ тип и возвращаемый IQ тип если требуется
    • Нажмите одну из кнопок:
      • Read Once - считывает выбранные переменные один раз
      • Start Polling - начать опрос выбранных переменных с заданным интервалом
  5. Запись в CSV:

    • Можно записывавать считываемые переменные в CSV файл, с разделителем ;
    • Нажмите кнопку Начать запись в CSV
    • Когда нужная выборка будет накоплена нажмите Остаовить запись в CSV
    • Нажмите Выбрать файл CSV для выбора пути для сохранения файла и нажмите Сохранить данные в CSV чтобы сохранить
    • Генерируется совместимый с LogView .csv файл

    Все параметры выбираются из выпадающих списков, которые можно настроить, чтобы отображались только нужные опции.


Возможности

Режим "Watch":

  • Быстрое и удобное чтение одной или нескольких переменных по их индексу.
  • Автоматическое получение имен, типов и параметров масштабирования (IQ) переменных.
  • Запуск постоянного опроса для отслеживания изменений значений в реальном времени.
  • Наглядное представление данных в таблице с отображением как сырых, так и масштабированных значений. Режим "LowLevel":
  • Прямое чтение данных из памяти по заданным адресам.
  • Возможность указания типов указателей, IQ-масштабирования и форматов возвращаемых данных.
  • Аналогично режиму "Watch", поддерживается постоянный опрос выбранных низкоуровневых переменных.
  • Умное автодополнение имён переменных и полей структур. Логирование в CSV
  • Записывайте все полученные значения в файл формата CSV для последующего анализа.
  • Легкое управление записью: запуск, остановка и сохранение данных в любой момент.


Для разработчиков

Структура проекта:

Src
├── build/
│   └── build_and_clean.py	  # Билдинг проекта в .exe (через nuitka или pyinstaller)
├── DebugVarEdit_GUI.py       # Главное окно
├── tms_debugvar_term.py      # Терминал DebugVarTerminal
├── tms_debugvar_lowlevel.py  # Виджет для выбора переменных для LowLevel Watch
├── var_table.py        	    # Таблица выбранных переменных
├── var_selector_window.py 	  # Окно выбора переменных
├── var_selector_table.py  	  # Таблица переменных в окне выбора переменных
├── scan_progress_gui.py   	  # Отображение процесса сканирования переменных 
├── scan_vars.py           	  # Сканирование переменных среди .c/.h файлов
├── generate_debug_vars.py 	  # Генерация debug_vars.c
├── allvars_xml_parser.py     # Парсинг XML со всеми переменными и структурами
├── csv_logger.py             # Логирование переменных в CSV
├── myXML.py                  # Утилиты для XML
├── makefile_parser.py     	  # Парсинг makefile на .c/.h файлы
├── var_setup.py              # Подготовка переменных для окна выбора переменных
├── path_hints.py             # Подсказки для автодополнения путей переменных
├── libclang.dll              # Бибилиотека clang
├── icon.ico                  # Иконка

Зависимости

Для запуска приложения:

  • Python 3.7+
  • clang — используется для парсинга C-кода (требуется libclang.dll, лежит в папке Src)
  • PySide2 — GUI-фреймворк
  • lxml — работа с XML

Python 3.7 и PySide2 рекомендуется для совместимости с Windows 7

Для сборки .exe:

  • Nuitka — создает полностью автономный .exe без внешних зависимостей
  • PyInstaller — создает .exe с зависимостью от pythonXX.dll (Python должен быть установлен для запуска .exe)

Сборка:

Если вы хотите собрать DebugVarEdit.exe самостоятельно из исходников, используйте скрипт build/build_and_clean.py. Он автоматически собирает проект с помощью Nuitka или PyInstaller:

  • Собирает проект в DebugVarEdit.exe в корневой папке.
  • Включает:
    • все необходимые .dll (например, libclang.dll),
    • иконку (icon.ico),
    • плагины PySide2.
  • Очищает временные папки после сборки:
    • build_temp
    • __pycache__
    • <MAIN_SCRIPT_NAME>.*

Все пути, имена файлов, временные папки и выбор между Nuitka и PyInstaller можно настроить в начале файла build_and_clean.py.

Установка зависимостей

pip install clang PySide2 lxml nuitka pyinstaller