+сделано задание размера короткого имени + добавлена бета поддержка stm:+ - парс переменных из файла преокта Keil или makefile CubeIDE - запись в utf-8 для STM, вместо cp1251 для TMS - другой размер int (32 бита, вместо 16 бит) для STM
172 lines
11 KiB
Markdown
172 lines
11 KiB
Markdown
# DebugTools - Просмотр переменных по указателям
|
||
Модуль состоит из трех файлов:
|
||
- **debug_tools.c** - реализация считывания переменных
|
||
- **debug_tools.h** - объявление всякого для считывания переменных
|
||
- **debug_vars.c** - определение массива считываемых переменных
|
||
|
||
Этот модуль предоставляет функциональность для чтения значений переменных во встроенной системе, включая работу с IQ-форматами, защиту доступа и проверку диапазонов памяти.
|
||
|
||
Для чтения переменных можно использовать функции:
|
||
|
||
```c
|
||
int Debug_ReadVar(int var_ind, int32_t *return_long);
|
||
int Debug_ReadVarName(int var_ind, DebugVarName_t name_ptr);
|
||
```
|
||
|
||
|
||
Переменные доступные для чтения определяются в **debug_vars.c** (их можно прописывать вручную или генерировать через **DebugVarEdit**):
|
||
|
||
```c
|
||
// Определение массива с указателями на переменные для отладки
|
||
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" }, \
|
||
{(char *)&Bender[0].Times, pt_uint16, t_iq_none, t_iq_none, "Bend0.Time" }, \
|
||
};
|
||
```
|
||
|
||
# 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-файла
|
||
|
||
```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>
|
||
```
|
||
|
||
---
|
||
---
|
||
|
||
# Для разработчиков
|
||
|
||
### Структура проекта:
|
||
|
||
```bash
|
||
Src
|
||
├── build/
|
||
│ └── build_and_clean.py # Билдинг проекта в .exe (через nuitka или pyinstaller)
|
||
├── DebugVarEdit_GUI.py # Главное окно
|
||
├── 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
|
||
├── myXML.py # Утилиты для XML
|
||
├── makefile_parser.py # Парсинг makefile на .c/.h файлы
|
||
├── var_setup.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__`
|
||
- `DebugVarEdit_GUI.*`
|
||
|
||
> Все пути, имена файлов, временные папки и выбор между Nuitka и PyInstaller можно настроить в начале файла `build_and_clean.py`.
|
||
|
||
### Установка зависимостей
|
||
|
||
```bash
|
||
pip install clang PySide2 lxml nuitka pyinstaller
|
||
``` |