Compare commits
4 Commits
69c0bf1574
...
05bde87c38
Author | SHA1 | Date | |
---|---|---|---|
05bde87c38 | |||
02f3124224 | |||
21082a38e0 | |||
42ac3eb65d |
BIN
DebugVarEdit.exe
BIN
DebugVarEdit.exe
Binary file not shown.
@ -413,16 +413,18 @@ class VarEditor(QWidget):
|
||||
|
||||
except Exception as e:
|
||||
QMessageBox.critical(self, "Ошибка", f"Не удалось загрузить переменные:\n{e}")
|
||||
|
||||
|
||||
def delete_selected_rows(self):
|
||||
selected_rows = sorted(set(index.row() for index in self.table.selectedIndexes()), reverse=True)
|
||||
if not selected_rows:
|
||||
# Получаем имена всех выбранных переменных из первого столбца
|
||||
selected_names = self.table.get_selected_var_names()
|
||||
|
||||
if not selected_names:
|
||||
return
|
||||
|
||||
for row in selected_rows:
|
||||
if 0 <= row < len(self.vars_list):
|
||||
# Меняем флаг show_var для переменной с этим индексом
|
||||
self.vars_list[row]['show_var'] = 'false'
|
||||
# Меняем флаг show_var по имени
|
||||
for var in self.vars_list:
|
||||
if var.get('name') in selected_names:
|
||||
var['show_var'] = 'false'
|
||||
|
||||
self.table.populate(self.vars_list, self.structs, self.write_to_xml)
|
||||
self.write_to_xml()
|
||||
@ -517,6 +519,11 @@ class VarEditor(QWidget):
|
||||
el = ET.SubElement(parent, tag)
|
||||
el.text = str(text)
|
||||
|
||||
pt_type_val = v_table['pt_type'] if v_table and 'pt_type' in v_table else v.get('pt_type', '')
|
||||
|
||||
if 'arr' in pt_type_val or 'struct' in pt_type_val or 'union' in pt_type_val:
|
||||
continue
|
||||
|
||||
show_var_val = str(v.get('show_var', 'false')).lower()
|
||||
enable_val = str(v_table['enable'] if v_table and 'enable' in v_table else v.get('enable', 'false')).lower()
|
||||
|
||||
@ -525,7 +532,6 @@ class VarEditor(QWidget):
|
||||
|
||||
# Тут подтягиваем из таблицы, если есть, иначе из v
|
||||
shortname_val = v_table['shortname'] if v_table and 'shortname' in v_table else v.get('shortname', '')
|
||||
pt_type_val = v_table['pt_type'] if v_table and 'pt_type' in v_table else v.get('pt_type', '')
|
||||
iq_type_val = v_table['iq_type'] if v_table and 'iq_type' in v_table else v.get('iq_type', '')
|
||||
ret_type_val = v_table['return_type'] if v_table and 'return_type' in v_table else v.get('return_type', '')
|
||||
|
||||
|
@ -2,7 +2,7 @@ import re
|
||||
import xml.etree.ElementTree as ET
|
||||
from PySide2.QtWidgets import (
|
||||
QDialog, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QPushButton,
|
||||
QLineEdit, QLabel, QHeaderView, QCompleter, QCheckBox, QHBoxLayout
|
||||
QLineEdit, QLabel, QHeaderView, QCompleter, QCheckBox, QHBoxLayout, QSizePolicy
|
||||
)
|
||||
from PySide2.QtGui import QKeySequence, QKeyEvent
|
||||
from PySide2.QtCore import Qt, QStringListModel, QSettings
|
||||
@ -20,7 +20,7 @@ class VariableSelectorDialog(QDialog):
|
||||
super().__init__(parent)
|
||||
self.setWindowTitle("Выбор переменных")
|
||||
self.setAttribute(Qt.WA_DeleteOnClose)
|
||||
self.resize(600, 500)
|
||||
self.resize(1200, 500)
|
||||
self.selected_names = []
|
||||
self._bckspc_pressed = False # флаг подавления добавления разделителя
|
||||
self.table = table
|
||||
@ -45,27 +45,55 @@ class VariableSelectorDialog(QDialog):
|
||||
# При изменении состояния чекбокса сохраняем его
|
||||
self.autocomplete_checkbox.stateChanged.connect(self.save_checkbox_state)
|
||||
|
||||
# Кнопки между таблицами
|
||||
self.btn_right = QPushButton(">")
|
||||
self.btn_right.clicked.connect(self.on_move_right)
|
||||
self.btn_left = QPushButton("<")
|
||||
self.btn_left.clicked.connect(self.on_move_left)
|
||||
|
||||
# Создаем кнопки, они остаются в диалоге
|
||||
self.btn_add = QPushButton("Добавить выбранные")
|
||||
self.btn_delete = QPushButton("Удалить выбранные")
|
||||
|
||||
# Создаем экземпляр вашего готового виджета
|
||||
self.vars_widget = selectTable.VariableSelectWidget(self)
|
||||
self.selected_vars_widget = selectTable.VariableSelectWidget(self)
|
||||
|
||||
# Собираем новую, более простую компоновку
|
||||
search_layout = QHBoxLayout()
|
||||
search_layout.addWidget(QLabel("Поиск:"))
|
||||
search_layout.addStretch()
|
||||
search_layout.addWidget(self.autocomplete_checkbox)
|
||||
|
||||
layout = QVBoxLayout(self)
|
||||
layout.addLayout(search_layout)
|
||||
layout.addWidget(self.vars_widget) # Добавляем ваш виджет целиком
|
||||
# --- Лэйауты ---
|
||||
main_layout = QVBoxLayout(self) # главный вертикальный layout окна
|
||||
|
||||
tables_layout = QHBoxLayout() # горизонтальный layout с таблицами и кнопками
|
||||
|
||||
# Левая таблица
|
||||
self.vars_widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
||||
tables_layout.addWidget(self.vars_widget)
|
||||
|
||||
# Кнопки ">" и "<" между таблицами
|
||||
middle_buttons_layout = QVBoxLayout()
|
||||
middle_buttons_layout.addStretch()
|
||||
middle_buttons_layout.addWidget(self.btn_right)
|
||||
middle_buttons_layout.addWidget(self.btn_left)
|
||||
middle_buttons_layout.addStretch()
|
||||
tables_layout.addLayout(middle_buttons_layout)
|
||||
|
||||
# Правая таблица
|
||||
self.selected_vars_widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
||||
tables_layout.addWidget(self.selected_vars_widget)
|
||||
|
||||
# Добавляем горизонтальный layout с таблицами в главный вертикальный
|
||||
main_layout.addLayout(tables_layout)
|
||||
|
||||
# Кнопки "Добавить выбранные" и "Удалить выбранные" под таблицами
|
||||
buttons_layout = QVBoxLayout()
|
||||
buttons_layout.addWidget(self.btn_add)
|
||||
buttons_layout.addWidget(self.btn_delete)
|
||||
main_layout.addLayout(buttons_layout)
|
||||
|
||||
# Важно, если окно — QDialog или QWidget, установи layout
|
||||
self.setLayout(main_layout)
|
||||
|
||||
|
||||
button_layout = QHBoxLayout()
|
||||
button_layout.addWidget(self.btn_add)
|
||||
button_layout.addWidget(self.btn_delete)
|
||||
layout.addLayout(button_layout)
|
||||
|
||||
# Соединяем сигналы кнопок с методами диалога
|
||||
self.btn_add.clicked.connect(self.on_add_clicked)
|
||||
@ -75,19 +103,60 @@ class VariableSelectorDialog(QDialog):
|
||||
self.autocomplete_checkbox.stateChanged.connect(self.vars_widget.set_autocomplete)
|
||||
# Устанавливаем начальное состояние автодополнения в виджете
|
||||
self.vars_widget.set_autocomplete(self.autocomplete_checkbox.isChecked())
|
||||
self.selected_vars_widget.set_autocomplete(self.autocomplete_checkbox.isChecked())
|
||||
|
||||
# --- Код в конце __init__ ---
|
||||
self.expanded_vars = setupVars.expand_vars(self.all_vars, self.structs, self.typedefs)
|
||||
# Передаем данные в виджет
|
||||
self.vars_widget.set_data(self.expanded_vars)
|
||||
self.update_vars_widget()
|
||||
|
||||
def on_add_clicked(self):
|
||||
# 5. Получаем имена из виджета
|
||||
selected_items = self.vars_widget.get_selected_items()
|
||||
if not selected_items:
|
||||
def on_move_right(self):
|
||||
# Устанавливаем show_var=True для всех выбранных переменных из ЛЕВОЙ таблицы
|
||||
selected = self.vars_widget._get_internal_selected_var_names()
|
||||
if not selected:
|
||||
return
|
||||
|
||||
for item in selected_items:
|
||||
def mark_selected_show_var(data):
|
||||
for var in data:
|
||||
if var['name'] in selected:
|
||||
var['show_var'] = 'true'
|
||||
if 'children' in var:
|
||||
mark_selected_show_var(var['children'])
|
||||
mark_selected_show_var(self.expanded_vars)
|
||||
|
||||
self.update_vars_widget()
|
||||
|
||||
def on_move_left(self):
|
||||
# Сбрасываем show_var=False для всех выбранных переменных из ПРАВОЙ таблицы
|
||||
selected = self.selected_vars_widget._get_internal_selected_var_names()
|
||||
if not selected:
|
||||
return
|
||||
|
||||
def mark_selected_hide_var(data):
|
||||
for var in data:
|
||||
if var['name'] in selected:
|
||||
var['show_var'] = 'false'
|
||||
if 'children' in var:
|
||||
mark_selected_hide_var(var['children'])
|
||||
mark_selected_hide_var(self.expanded_vars)
|
||||
|
||||
self.update_vars_widget()
|
||||
|
||||
def update_vars_widget(self):
|
||||
self.selected_vars, self.unselected_vars = setupVars.split_vars_by_show_flag(self.expanded_vars)
|
||||
self.vars_widget.set_data(self.unselected_vars)
|
||||
self.vars_widget.filter_tree()
|
||||
self.selected_vars_widget.set_data(self.selected_vars)
|
||||
self.selected_vars_widget.filter_tree()
|
||||
|
||||
|
||||
def on_add_clicked(self):
|
||||
# Получаем все переменные из правой таблицы (selected_vars_widget)
|
||||
var_names = self.selected_vars_widget.get_all_var_names()
|
||||
all_items = self.selected_vars_widget.get_all_items()
|
||||
if not all_items:
|
||||
return
|
||||
|
||||
def add_to_var_map_recursively(item):
|
||||
name = item.text(0)
|
||||
type_str = item.text(1)
|
||||
|
||||
@ -109,51 +178,72 @@ class VariableSelectorDialog(QDialog):
|
||||
self.all_vars.append(new_var)
|
||||
self.var_map[name] = new_var
|
||||
|
||||
self.accept() # Используем accept() вместо done(QDialog.Accepted)
|
||||
for item in all_items:
|
||||
add_to_var_map_recursively(item)
|
||||
|
||||
def on_delete_clicked(self):
|
||||
# 5. Получаем имена из виджета
|
||||
selected_names = self.vars_widget.get_selected_var_names()
|
||||
if not selected_names:
|
||||
print("nothing selected")
|
||||
return
|
||||
|
||||
# Обновляем var_map и all_vars
|
||||
for name in selected_names:
|
||||
if name in self.var_map:
|
||||
self.var_map[name]['show_var'] = 'false'
|
||||
self.var_map[name]['enable'] = 'false'
|
||||
|
||||
self.update_xml_vars(selected_names, 'false', 'false')
|
||||
self.accept()
|
||||
|
||||
|
||||
|
||||
def on_delete_clicked(self):
|
||||
# Получаем все элементы (QTreeWidgetItem) из правой таблицы
|
||||
all_items = self.selected_vars_widget.get_all_items()
|
||||
if not all_items:
|
||||
return
|
||||
|
||||
affected_names = []
|
||||
|
||||
def disable_var_recursively(item):
|
||||
name = item.text(0)
|
||||
if name in self.var_map:
|
||||
self.var_map[name]['show_var'] = 'false'
|
||||
self.var_map[name]['enable'] = 'false'
|
||||
affected_names.append(name)
|
||||
|
||||
# Рекурсивно отключаем детей
|
||||
for i in range(item.childCount()):
|
||||
child = item.child(i)
|
||||
disable_var_recursively(child)
|
||||
|
||||
for item in all_items:
|
||||
disable_var_recursively(item)
|
||||
|
||||
# Обновляем XML и таблицу
|
||||
self.update_xml_vars(affected_names, 'false', 'false')
|
||||
self.update_vars_widget()
|
||||
|
||||
|
||||
def update_xml_vars(self, names, show, enable):
|
||||
"""Обновляет флаги show_var и enable в XML файле."""
|
||||
"""Обновляет флаги show_var и enable в XML файле, только если у переменной нет вложенных структур."""
|
||||
if not self.xml_path:
|
||||
return
|
||||
root, tree = myXML.safe_parse_xml(self.xml_path)
|
||||
if root is None: return
|
||||
if root is None:
|
||||
return
|
||||
vars_section = root.find('variables')
|
||||
if vars_section is None: return
|
||||
if vars_section is None:
|
||||
return
|
||||
|
||||
for var_elem in vars_section.findall('var'):
|
||||
if var_elem.attrib.get('name') in names:
|
||||
def set_text(tag, value):
|
||||
el = var_elem.find(tag)
|
||||
if el is None: el = ET.SubElement(var_elem, tag)
|
||||
el.text = value
|
||||
set_text('show_var', show)
|
||||
set_text('enable', enable)
|
||||
# Проверяем наличие вложенных структур или объединений
|
||||
has_nested_structs = any(
|
||||
var_elem.find(tag) is not None for tag in ('struct', 'union')
|
||||
)
|
||||
if not has_nested_structs:
|
||||
def set_text(tag, value):
|
||||
el = var_elem.find(tag)
|
||||
if el is None:
|
||||
el = ET.SubElement(var_elem, tag)
|
||||
el.text = value
|
||||
set_text('show_var', show)
|
||||
set_text('enable', enable)
|
||||
|
||||
myXML.fwrite(root, self.xml_path)
|
||||
|
||||
|
||||
def save_checkbox_state(self):
|
||||
self.settings.setValue("autocomplete_enabled", self.autocomplete_checkbox.isChecked())
|
||||
|
||||
|
||||
|
||||
def keyPressEvent(self, event):
|
||||
if event.key() == Qt.Key_Delete:
|
||||
self.delete_selected_vars()
|
||||
@ -249,12 +339,16 @@ class VariableSelectorDialog(QDialog):
|
||||
if removed_any:
|
||||
myXML.fwrite(root, self.xml_path)
|
||||
|
||||
self.filter_tree()
|
||||
self.update_vars_widget()
|
||||
|
||||
def _get_selected_var_names(self):
|
||||
self.tree.setFocus()
|
||||
return [item.text(0) for item in self.tree.selectedItems() if item.text(0)]
|
||||
|
||||
focused = self.focusWidget()
|
||||
if focused and focused is self.vars_widget.tree:
|
||||
return self.vars_widget.get_selected_var_names()
|
||||
elif focused and focused is self.selected_vars_widget.tree:
|
||||
return self.selected_vars_widget.get_selected_var_names()
|
||||
else:
|
||||
return []
|
||||
|
||||
def save_checkbox_state(self):
|
||||
self.settings.setValue("autocomplete_enabled", self.autocomplete_checkbox.isChecked())
|
||||
|
@ -123,6 +123,7 @@ class VariableTableWidget(QTableWidget):
|
||||
pt_combo.setCurrentText(value)
|
||||
pt_combo.currentTextChanged.connect(on_change_callback)
|
||||
pt_combo.setStyleSheet(style_with_padding)
|
||||
pt_combo.wheelEvent = lambda e: e.ignore()
|
||||
self.setCellWidget(row, rows.pt_type, pt_combo)
|
||||
|
||||
# iq_type
|
||||
@ -268,4 +269,17 @@ class VariableTableWidget(QTableWidget):
|
||||
elif widget is not None:
|
||||
# Надёжная подсветка: через styleSheet
|
||||
widget.setStyleSheet(css_color)
|
||||
widget.setToolTip(tooltip if color else "")
|
||||
widget.setToolTip(tooltip if color else "")
|
||||
|
||||
def get_selected_var_names(self):
|
||||
selected_indexes = self.selectedIndexes()
|
||||
selected_rows = set(index.row() for index in selected_indexes)
|
||||
names = []
|
||||
|
||||
for row in selected_rows:
|
||||
name_widget = self.cellWidget(row, rows.name)
|
||||
if name_widget:
|
||||
name = name_widget.text()
|
||||
if name:
|
||||
names.append(name)
|
||||
return names
|
||||
|
@ -5,25 +5,33 @@ from PySide2.QtWidgets import (
|
||||
)
|
||||
from PySide2.QtGui import QKeyEvent
|
||||
from PySide2.QtCore import Qt, QStringListModel
|
||||
import pickle
|
||||
import time
|
||||
|
||||
# Вспомогательные функции, которые теперь будут использоваться виджетом
|
||||
def split_path(path):
|
||||
"""
|
||||
Разбивает путь на компоненты:
|
||||
- 'foo[2].bar[1]->baz' → ['foo', [2]', 'bar', '[1]' 'baz']
|
||||
- 'foo[2].bar[1]->baz' → ['foo', '[2]', 'bar', '[1]', 'baz']
|
||||
Если видит '-' в конце строки (без '>' после) — обрезает этот '-'
|
||||
"""
|
||||
tokens = []
|
||||
token = ''
|
||||
i = 0
|
||||
while i < len(path):
|
||||
length = len(path)
|
||||
while i < length:
|
||||
c = path[i]
|
||||
# Разделители: '->' и '.'
|
||||
if c == '-' and path[i:i+2] == '->':
|
||||
if c == '-' and i + 1 < length and path[i:i+2] == '->':
|
||||
if token:
|
||||
tokens.append(token)
|
||||
token = ''
|
||||
i += 2
|
||||
continue
|
||||
elif c == '-' and i == length - 1:
|
||||
# '-' на конце строки без '>' после — просто пропускаем его
|
||||
i += 1
|
||||
continue
|
||||
elif c == '.':
|
||||
if token:
|
||||
tokens.append(token)
|
||||
@ -31,16 +39,14 @@ def split_path(path):
|
||||
i += 1
|
||||
continue
|
||||
elif c == '[':
|
||||
# Заканчиваем текущий токен, если есть
|
||||
if token:
|
||||
tokens.append(token)
|
||||
token = ''
|
||||
# Собираем индекс [N]
|
||||
idx = ''
|
||||
while i < len(path) and path[i] != ']':
|
||||
while i < length and path[i] != ']':
|
||||
idx += path[i]
|
||||
i += 1
|
||||
if i < len(path) and path[i] == ']':
|
||||
if i < length and path[i] == ']':
|
||||
idx += ']'
|
||||
i += 1
|
||||
tokens.append(idx)
|
||||
@ -52,10 +58,6 @@ def split_path(path):
|
||||
tokens.append(token)
|
||||
return tokens
|
||||
|
||||
def hide_all(item):
|
||||
item.setHidden(True)
|
||||
for i in range(item.childCount()):
|
||||
hide_all(item.child(i))
|
||||
|
||||
# Функция парсит имя с индексами в (базовое_имя, список_индексов)
|
||||
def parse_name_with_indices(name):
|
||||
@ -89,20 +91,18 @@ def show_matching_path(item, path_parts, level=0):
|
||||
node_name = item.text(0).lower()
|
||||
node_parts = split_path(node_name)
|
||||
|
||||
if 'project' in node_name:
|
||||
a = 1
|
||||
|
||||
if level >= len(path_parts):
|
||||
# Путь полностью пройден — показываем только этот узел (без раскрытия всех детей)
|
||||
item.setHidden(False)
|
||||
# Показываем детей, которые тоже соответствуют, но на этом уровне их нет,
|
||||
# поэтому детей не раскрываем
|
||||
for i in range(item.childCount()):
|
||||
hide_all(item.child(i))
|
||||
item.setExpanded(False)
|
||||
return True
|
||||
|
||||
if level >= len(node_parts):
|
||||
# Уровень поиска больше длины пути узла — скрываем
|
||||
item.setHidden(True)
|
||||
return False
|
||||
item.setHidden(False)
|
||||
|
||||
search_part = path_parts[level]
|
||||
node_part = node_parts[level]
|
||||
@ -115,16 +115,18 @@ def show_matching_path(item, path_parts, level=0):
|
||||
child = item.child(i)
|
||||
if show_matching_path(child, path_parts, level + 1):
|
||||
matched_any = True
|
||||
else:
|
||||
hide_all(child)
|
||||
item.setExpanded(matched_any)
|
||||
return matched_any or item.childCount() == 0
|
||||
|
||||
elif node_part.startswith(search_part):
|
||||
# Неполное совпадение — показываем только этот узел, детей скрываем, не раскрываем
|
||||
item.setHidden(False)
|
||||
for i in range(item.childCount()):
|
||||
hide_all(item.child(i))
|
||||
item.setExpanded(False)
|
||||
return True
|
||||
|
||||
elif search_part in node_part and (level == len(path_parts)-1):
|
||||
# Неполное совпадение — показываем только этот узел, детей скрываем, не раскрываем
|
||||
item.setHidden(False)
|
||||
item.setExpanded(False)
|
||||
return True
|
||||
|
||||
@ -135,15 +137,6 @@ def show_matching_path(item, path_parts, level=0):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class VariableSelectWidget(QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
@ -192,38 +185,30 @@ class VariableSelectWidget(QWidget):
|
||||
|
||||
def set_data(self, vars_list):
|
||||
"""Основной метод для загрузки данных в виджет."""
|
||||
self.expanded_vars = vars_list
|
||||
self.expanded_vars = pickle.loads(pickle.dumps(vars_list, protocol=pickle.HIGHEST_PROTOCOL))
|
||||
# self.build_completion_list() # Если нужна полная перестройка списка
|
||||
self.populate_tree()
|
||||
|
||||
def get_selected_items(self):
|
||||
"""Возвращает выделенные элементы QTreeWidget."""
|
||||
return self.tree.selectedItems()
|
||||
|
||||
def get_selected_var_names(self):
|
||||
"""Возвращает имена выделенных переменных."""
|
||||
return [item.text(0) for item in self.tree.selectedItems() if item.text(0)]
|
||||
|
||||
def expand_to_level(self, item, level, current_level=0):
|
||||
"""
|
||||
Рекурсивно раскрывает узлы до заданного уровня.
|
||||
"""
|
||||
if current_level < level:
|
||||
item.setExpanded(True)
|
||||
else:
|
||||
item.setExpanded(False)
|
||||
|
||||
for i in range(item.childCount()):
|
||||
self.expand_to_level(item.child(i), level, current_level + 1)
|
||||
|
||||
def populate_tree(self, vars_list=None):
|
||||
if vars_list is None:
|
||||
vars_list = self.expanded_vars
|
||||
self.tree.setUpdatesEnabled(False)
|
||||
self.tree.blockSignals(True)
|
||||
self.tree.clear()
|
||||
self.node_index.clear()
|
||||
start_add = time.perf_counter()
|
||||
stats = {'count': 0, 'time': 0.0}
|
||||
for var in vars_list:
|
||||
self.add_tree_item_recursively(None, var)
|
||||
self.add_tree_item_recursively(None, var, stats)
|
||||
end_add = time.perf_counter()
|
||||
|
||||
print(f" add items: {end_add - start_add:.6f} s")
|
||||
print(f" └ recursive only: {stats['time']:.6f} s")
|
||||
print(f" └ total items: {stats['count']} шт")
|
||||
|
||||
self.tree.setUpdatesEnabled(True)
|
||||
self.tree.blockSignals(False)
|
||||
header = self.tree.header()
|
||||
header.setSectionResizeMode(QHeaderView.Interactive) # вручную можно менять
|
||||
self.tree.setColumnWidth(0, 400)
|
||||
@ -240,42 +225,43 @@ class VariableSelectWidget(QWidget):
|
||||
fullname = fullname.replace('->', '.')
|
||||
return fullname
|
||||
|
||||
|
||||
def add_tree_item_recursively(self, parent, var):
|
||||
"""
|
||||
Рекурсивно добавляет переменную и её дочерние поля в дерево.
|
||||
Если parent == None, добавляет на верхний уровень.
|
||||
"""
|
||||
name = var['name']
|
||||
type_str = var.get('type', '')
|
||||
show_var = var.get('show_var', 'false') == 'true'
|
||||
|
||||
def add_tree_item_recursively(self, parent, var, stats=None, parent_path=""):
|
||||
if stats is None:
|
||||
stats = {'count': 0, 'time': 0.0}
|
||||
|
||||
start = time.perf_counter()
|
||||
|
||||
name = var['name']
|
||||
full_name = f"{parent_path}.{name}" if parent_path else name
|
||||
full_name = full_name.replace('->', '.') # если нужно
|
||||
|
||||
type_str = var.get('type', '')
|
||||
item = QTreeWidgetItem([name, type_str])
|
||||
item.setData(0, Qt.UserRole, name)
|
||||
full_name = self.get_full_item_name(item)
|
||||
self.node_index[full_name.lower()] = item
|
||||
|
||||
# Делаем bitfield-поля неактивными
|
||||
if "(bitfield:" in type_str:
|
||||
item.setDisabled(True)
|
||||
item.setDisabled(True)
|
||||
self.set_tool(item, "Битовые поля недоступны для выбора")
|
||||
|
||||
for i, attr in enumerate(['file', 'extern', 'static']):
|
||||
item.setData(0, Qt.UserRole + 1 + i, var.get(attr))
|
||||
|
||||
if show_var:
|
||||
item.setForeground(0, Qt.gray)
|
||||
item.setForeground(1, Qt.gray)
|
||||
self.set_tool(item, "Уже добавлена")
|
||||
|
||||
if parent is None:
|
||||
self.tree.addTopLevelItem(item)
|
||||
else:
|
||||
parent.addChild(item)
|
||||
|
||||
stats['count'] += 1
|
||||
|
||||
for child in var.get('children', []):
|
||||
self.add_tree_item_recursively(item, child)
|
||||
|
||||
self.add_tree_item_recursively(item, child, stats, parent_path=full_name)
|
||||
|
||||
end = time.perf_counter()
|
||||
stats['time'] += end - start
|
||||
return stats
|
||||
|
||||
|
||||
def filter_tree(self):
|
||||
text = self.search_input.text().strip().lower()
|
||||
@ -289,19 +275,14 @@ class VariableSelectWidget(QWidget):
|
||||
item.setHidden(False)
|
||||
# Не сбрасываем expanded, чтобы можно было раскрывать вручную
|
||||
else:
|
||||
hide_all(item)
|
||||
item.setHidden(True)
|
||||
else:
|
||||
for i in range(self.tree.topLevelItemCount()):
|
||||
item = self.tree.topLevelItem(i)
|
||||
hide_all(item)
|
||||
item = self.tree.topLevelItem(i)
|
||||
show_matching_path(item, path_parts, 0)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def find_node_by_path(self, root_vars, path_list):
|
||||
current_level = root_vars
|
||||
node = None
|
||||
@ -530,4 +511,80 @@ class VariableSelectWidget(QWidget):
|
||||
|
||||
def set_tool(self, item, text):
|
||||
item.setToolTip(0, text)
|
||||
item.setToolTip(1, text)
|
||||
item.setToolTip(1, text)
|
||||
|
||||
def get_all_items(self):
|
||||
"""Возвращает все конечные (leaf) элементы, исключая битовые поля и элементы с детьми."""
|
||||
def collect_leaf_items(parent):
|
||||
leaf_items = []
|
||||
for i in range(parent.childCount()):
|
||||
child = parent.child(i)
|
||||
if child.isHidden():
|
||||
continue
|
||||
if child.childCount() == 0:
|
||||
item_type = child.text(1)
|
||||
if item_type and 'bitfield' in str(item_type).lower():
|
||||
continue
|
||||
leaf_items.append(child)
|
||||
else:
|
||||
leaf_items.extend(collect_leaf_items(child))
|
||||
return leaf_items
|
||||
|
||||
all_leaf_items = []
|
||||
for i in range(self.tree.topLevelItemCount()):
|
||||
top = self.tree.topLevelItem(i)
|
||||
if top.childCount() == 0:
|
||||
item_type = top.text(1)
|
||||
if item_type and 'bitfield' in str(item_type).lower():
|
||||
continue
|
||||
all_leaf_items.append(top)
|
||||
else:
|
||||
all_leaf_items.extend(collect_leaf_items(top))
|
||||
return all_leaf_items
|
||||
|
||||
|
||||
def get_all_var_names(self):
|
||||
"""Возвращает имена всех конечных (leaf) переменных, исключая битовые поля и группы."""
|
||||
return [item.text(0) for item in self.get_all_items() if item.text(0)]
|
||||
|
||||
|
||||
def _get_internal_selected_items(self):
|
||||
"""Возвращает выделенные элементы и всех их потомков."""
|
||||
selected = self.tree.selectedItems()
|
||||
all_items = []
|
||||
|
||||
def collect_children(item):
|
||||
items = [item]
|
||||
for i in range(item.childCount()):
|
||||
child = item.child(i)
|
||||
items.extend(collect_children(child))
|
||||
return items
|
||||
|
||||
for item in selected:
|
||||
all_items.extend(collect_children(item))
|
||||
|
||||
return all_items
|
||||
|
||||
def _get_internal_selected_var_names(self):
|
||||
"""Возвращает имена выделенных переменных."""
|
||||
return [item.text(0) for item in self._get_internal_selected_items() if item.text(0)]
|
||||
|
||||
def get_selected_items(self):
|
||||
"""Возвращает только конечные (leaf) выделенные элементы, исключая bitfield."""
|
||||
selected = self.tree.selectedItems()
|
||||
leaf_items = []
|
||||
for item in selected:
|
||||
# Проверка: если нет выбранных/видимых детей — это лист
|
||||
if all(item.child(i).isHidden() or not item.child(i).isSelected() for i in range(item.childCount())):
|
||||
item_type = item.data(0, Qt.UserRole)
|
||||
if item_type and 'bitfield' in str(item_type).lower():
|
||||
continue # Пропускаем битовые поля
|
||||
leaf_items.append(item)
|
||||
return leaf_items
|
||||
|
||||
|
||||
|
||||
def get_selected_var_names(self):
|
||||
"""Возвращает имена только конечных (leaf) переменных из выделенных."""
|
||||
return [item.text(0) for item in self.get_selected_items() if item.text(0)]
|
||||
|
||||
|
179
Src/setupVars.py
179
Src/setupVars.py
@ -6,6 +6,58 @@ from generateVars import map_type_to_pt, get_iq_define, type_map
|
||||
from enum import IntEnum
|
||||
import scanVars
|
||||
import myXML
|
||||
import pickle
|
||||
|
||||
|
||||
# Вспомогательные функции, которые теперь будут использоваться виджетом
|
||||
def split_path(path):
|
||||
"""
|
||||
Разбивает путь на компоненты:
|
||||
- 'foo[2].bar[1]->baz' → ['foo', '[2]', 'bar', '[1]', 'baz']
|
||||
Если видит '-' в конце строки (без '>' после) — обрезает этот '-'
|
||||
"""
|
||||
tokens = []
|
||||
token = ''
|
||||
i = 0
|
||||
length = len(path)
|
||||
while i < length:
|
||||
c = path[i]
|
||||
# Разделители: '->' и '.'
|
||||
if c == '-' and i + 1 < length and path[i:i+2] == '->':
|
||||
if token:
|
||||
tokens.append(token)
|
||||
token = ''
|
||||
i += 2
|
||||
continue
|
||||
elif c == '-' and i == length - 1:
|
||||
# '-' на конце строки без '>' после — просто пропускаем его
|
||||
i += 1
|
||||
continue
|
||||
elif c == '.':
|
||||
if token:
|
||||
tokens.append(token)
|
||||
token = ''
|
||||
i += 1
|
||||
continue
|
||||
elif c == '[':
|
||||
if token:
|
||||
tokens.append(token)
|
||||
token = ''
|
||||
idx = ''
|
||||
while i < length and path[i] != ']':
|
||||
idx += path[i]
|
||||
i += 1
|
||||
if i < length and path[i] == ']':
|
||||
idx += ']'
|
||||
i += 1
|
||||
tokens.append(idx)
|
||||
continue
|
||||
else:
|
||||
token += c
|
||||
i += 1
|
||||
if token:
|
||||
tokens.append(token)
|
||||
return tokens
|
||||
|
||||
|
||||
def make_absolute_path(path, base_path):
|
||||
@ -405,3 +457,130 @@ def expand_vars(vars_list, structs, typedefs):
|
||||
|
||||
return expanded
|
||||
|
||||
|
||||
def build_full_names(parts, full_name):
|
||||
"""
|
||||
Восстанавливает вложенные полные имена из списка частей,
|
||||
ориентируясь на оригинальное полное имя (с '.', '->' и индексами).
|
||||
|
||||
Пример:
|
||||
parts = ['arr', '[0]', '[1]', 'ptr', 'val']
|
||||
full_name = 'arr[0][1].ptr->val'
|
||||
|
||||
→ [
|
||||
'arr',
|
||||
'arr[0]',
|
||||
'arr[0][1]',
|
||||
'arr[0][1].ptr',
|
||||
'arr[0][1].ptr->val'
|
||||
]
|
||||
"""
|
||||
names = []
|
||||
acc = ''
|
||||
idx = 0
|
||||
for part in parts:
|
||||
pos = full_name.find(part, idx)
|
||||
if pos == -1:
|
||||
acc += part
|
||||
else:
|
||||
acc = full_name[:pos + len(part)]
|
||||
idx = pos + len(part)
|
||||
names.append(acc)
|
||||
return names
|
||||
|
||||
def find_var_by_name(tree, name):
|
||||
for var in tree:
|
||||
if var.get('name') == name:
|
||||
return var
|
||||
if 'children' in var:
|
||||
found = find_var_by_name(var['children'], name)
|
||||
if found:
|
||||
return found
|
||||
return None
|
||||
|
||||
|
||||
def add_to_nested_tree(tree, var, path_parts, full_names=None, depth=0, source_tree=None):
|
||||
if not path_parts:
|
||||
return
|
||||
|
||||
if full_names is None:
|
||||
full_names = build_full_names(path_parts, var['name'])
|
||||
|
||||
current_name = full_names[depth]
|
||||
|
||||
for child in tree:
|
||||
if child.get('name') == current_name:
|
||||
if depth == len(path_parts) - 1:
|
||||
child.update(var)
|
||||
return
|
||||
if 'children' not in child:
|
||||
child['children'] = []
|
||||
add_to_nested_tree(child['children'], var, path_parts, full_names, depth + 1, source_tree)
|
||||
return
|
||||
|
||||
# Ищем в source_tree (expanded_vars) родительский узел по current_name
|
||||
parent_data = {}
|
||||
if source_tree:
|
||||
parent_var = find_var_by_name(source_tree, current_name)
|
||||
if parent_var:
|
||||
# Копируем все поля кроме детей (children)
|
||||
parent_data = {k: v for k, v in parent_var.items() if k != 'children'}
|
||||
|
||||
new_node = {
|
||||
'name': current_name,
|
||||
'children': []
|
||||
}
|
||||
|
||||
# Обновляем new_node данными родителя
|
||||
new_node.update(parent_data)
|
||||
|
||||
if depth == len(path_parts) - 1:
|
||||
new_node.update(var)
|
||||
else:
|
||||
add_to_nested_tree(new_node['children'], var, path_parts, full_names, depth + 1, source_tree)
|
||||
|
||||
tree.append(new_node)
|
||||
|
||||
|
||||
|
||||
|
||||
def split_vars_by_show_flag(expanded_vars):
|
||||
unselected_vars = pickle.loads(pickle.dumps(expanded_vars, protocol=pickle.HIGHEST_PROTOCOL))
|
||||
selected_vars = []
|
||||
|
||||
def find_and_remove(var_list, target_name):
|
||||
"""Удаляет элемент по полному имени и возвращает его"""
|
||||
for i, var in enumerate(var_list):
|
||||
if var.get("name") == target_name:
|
||||
return var_list.pop(i)
|
||||
if 'children' in var:
|
||||
found = find_and_remove(var['children'], target_name)
|
||||
if found:
|
||||
return found
|
||||
return None
|
||||
|
||||
def collect_selected_nodes(var):
|
||||
"""Рекурсивно возвращает все show_var=true узлы (включая поддерево)"""
|
||||
nodes = []
|
||||
if var.get('show_var', 'false').lower() == 'true':
|
||||
nodes.append(var)
|
||||
for child in var.get('children', []):
|
||||
nodes.extend(collect_selected_nodes(child))
|
||||
return nodes
|
||||
|
||||
selected_nodes = []
|
||||
for var in expanded_vars:
|
||||
selected_nodes.extend(collect_selected_nodes(var))
|
||||
|
||||
for node in selected_nodes:
|
||||
path_parts = split_path(node['name'])
|
||||
|
||||
# Вырезать из unselected_vars
|
||||
removed = find_and_remove(unselected_vars, node['name'])
|
||||
if removed:
|
||||
add_to_nested_tree(selected_vars, removed, path_parts)
|
||||
else:
|
||||
# вдруг удалённый родитель — создаём вручную
|
||||
add_to_nested_tree(selected_vars, node, path_parts)
|
||||
|
||||
return selected_vars, unselected_vars
|
||||
|
81
debug_vars.c
81
debug_vars.c
@ -3,34 +3,34 @@
|
||||
|
||||
|
||||
// Èíêëþäû äëÿ äîñòóïà ê ïåðåìåííûì
|
||||
#include "vector.h"
|
||||
#include "RS_Functions_modbus.h"
|
||||
#include "v_pwm24.h"
|
||||
#include "f281xpwm.h"
|
||||
#include "xp_project.h"
|
||||
#include "adc_tools.h"
|
||||
#include "errors.h"
|
||||
#include "xp_write_xpwm_time.h"
|
||||
#include "log_can.h"
|
||||
#include "RS_Functions_modbus.h"
|
||||
#include "pwm_vector_regul.h"
|
||||
#include "errors.h"
|
||||
#include "rotation_speed.h"
|
||||
#include "teta_calc.h"
|
||||
#include "v_pwm24.h"
|
||||
#include "vector.h"
|
||||
#include "adc_tools.h"
|
||||
#include "log_can.h"
|
||||
#include "xp_write_xpwm_time.h"
|
||||
#include "dq_to_alphabeta_cos.h"
|
||||
#include "RS_Functions.h"
|
||||
#include "x_serial_bus.h"
|
||||
#include "svgen_dq.h"
|
||||
#include "x_parallel_bus.h"
|
||||
#include "x_serial_bus.h"
|
||||
#include "xPeriphSP6_loader.h"
|
||||
#include "Spartan2E_Functions.h"
|
||||
#include "xp_controller.h"
|
||||
#include "xp_rotation_sensor.h"
|
||||
#include "xPeriphSP6_loader.h"
|
||||
#include "RS_Functions.h"
|
||||
#include "detect_phase_break2.h"
|
||||
#include "CRC_Functions.h"
|
||||
#include "CAN_Setup.h"
|
||||
#include "log_params.h"
|
||||
#include "log_to_memory.h"
|
||||
#include "global_time.h"
|
||||
#include "pid_reg3.h"
|
||||
#include "svgen_dq.h"
|
||||
#include "log_params.h"
|
||||
#include "CRC_Functions.h"
|
||||
#include "global_time.h"
|
||||
#include "CAN_Setup.h"
|
||||
#include "log_to_memory.h"
|
||||
#include "IQmathLib.h"
|
||||
#include "doors_control.h"
|
||||
#include "isolation.h"
|
||||
@ -261,6 +261,7 @@ extern T_controller_read r_controller;
|
||||
extern FIFO refo;
|
||||
extern TMS_TO_TERMINAL_STRUCT reply;
|
||||
extern TMS_TO_TERMINAL_TEST_ALL_STRUCT reply_test_all;
|
||||
extern long return_var;
|
||||
extern RMP_MY1 rmp_freq;
|
||||
extern RMP_MY1 rmp_wrot;
|
||||
extern T_rotation_sensor rotation_sensor;
|
||||
@ -296,6 +297,7 @@ extern int time_pause_logs;
|
||||
extern int time_pause_titles;
|
||||
extern volatile int tryNumb;
|
||||
extern UNITES_CAN_SETUP unites_can_setup;
|
||||
extern long var_numb;
|
||||
extern VECTOR_CONTROL vect_control;
|
||||
extern WaterCooler water_cooler;
|
||||
extern _iq winding_displacement;
|
||||
@ -312,26 +314,33 @@ extern int zero_ADC[20];
|
||||
|
||||
|
||||
// Îïðåäåëåíèå ìàññèâà ñ óêàçàòåëÿìè íà ïåðåìåííûå äëÿ îòëàäêè
|
||||
int DebugVar_Qnt = 19;
|
||||
int DebugVar_Qnt = 26;
|
||||
#pragma DATA_SECTION(dbg_vars,".dbgvar_info")
|
||||
DebugVar_t dbg_vars[] = {\
|
||||
{(char *)&ADC0finishAddr, pt_int16, t_iq_none, t_iq_none, "ADC0EndAdr" }, \
|
||||
{(char *)&ADC_f[0][0], pt_int16, t_iq_none, t_iq_none, "ADC_f00" }, \
|
||||
{(char *)&ADC_f[0][1], pt_int16, t_iq_none, t_iq_none, "ADC_f01" }, \
|
||||
{(char *)&ADC_f[0][2], pt_int16, t_iq_none, t_iq_none, "ADC_f02" }, \
|
||||
{(char *)&ADC_f[0][3], pt_int16, t_iq_none, t_iq_none, "ADC_f03" }, \
|
||||
{(char *)&ADC_f[0][4], pt_int16, t_iq_none, t_iq_none, "ADC_f04" }, \
|
||||
{(char *)&ADC_f[0][5], pt_int16, t_iq_none, t_iq_none, "ADC_f05" }, \
|
||||
{(char *)&ADC_f[0][6], pt_int16, t_iq_none, t_iq_none, "ADC_f06" }, \
|
||||
{(char *)&ADC_f[0][7], pt_int16, t_iq, t_iq_none, "ADC_f07" }, \
|
||||
{(char *)&ADC_f[0][8], pt_int16, t_iq_none, t_iq_none, "ADC_f08" }, \
|
||||
{(char *)&ADC_f[0][9], pt_int16, t_iq_none, t_iq_none, "ADC_f09" }, \
|
||||
{(char *)&ADC_f[0][10], pt_int16, t_iq_none, t_iq_none, "ADC_f010" }, \
|
||||
{(char *)&ADC_f[0][11], pt_int16, t_iq_none, t_iq_none, "ADC_f011" }, \
|
||||
{(char *)&ADC_f[0][12], pt_int16, t_iq_none, t_iq_none, "ADC_f012" }, \
|
||||
{(char *)&ADC_f[0][13], pt_int16, t_iq_none, t_iq_none, "ADC_f013" }, \
|
||||
{(char *)&ADC_f[0][14], pt_int16, t_iq_none, t_iq_none, "ADC_f014" }, \
|
||||
{(char *)&ADC_f[0][15], pt_int16, t_iq_none, t_iq_none, "ADC_f015" }, \
|
||||
{(char *)&project.cds_tk[2].read.sbus.mask_protect_tk.all, pt_uint16, t_iq_none, t_iq_none, "tk2_ackcur" }, \
|
||||
{(char *)&project.cds_tk[1].plane_address, pt_uint16, t_iq_none, t_iq_none, "tk1_adr" }, \
|
||||
{(char *)&ADC0finishAddr, pt_int16, t_iq_none, t_iq_none, "ADC0finish" }, \
|
||||
{(char *)&ADC_f[0][11], pt_int32, t_iq_none, t_iq_none, "ADC_f[0][1" }, \
|
||||
{(char *)&ADC_f[0][12], pt_int16, t_iq_none, t_iq_none, "ADC_f[0][1" }, \
|
||||
{(char *)&ADC_f[0][13], pt_int32, t_iq_none, t_iq_none, "ADC_f[0][1" }, \
|
||||
{(char *)&ADC_f[0][14], pt_int16, t_iq_none, t_iq_none, "ADC_f[0][1" }, \
|
||||
{(char *)&ADC_f[0][15], pt_int16, t_iq_none, t_iq_none, "ADC_f[0][1" }, \
|
||||
{(char *)&ADC_f[1][0], pt_int16, t_iq_none, t_iq_none, "ADC_f[1][0" }, \
|
||||
{(char *)&ADC_f[1][1], pt_int16, t_iq_none, t_iq_none, "ADC_f[1][1" }, \
|
||||
{(char *)&ADC_f[1][2], pt_int64, t_iq_none, t_iq_none, "ADC_f[1][2" }, \
|
||||
{(char *)&ADC_f[1][3], pt_int32, t_iq_none, t_iq_none, "ADC_f[1][3" }, \
|
||||
{(char *)&ADC_f[1][4], pt_int16, t_iq_none, t_iq_none, "ADC_f[1][4" }, \
|
||||
{(char *)&ADC_f[1][5], pt_int16, t_iq_none, t_iq_none, "ADC_f[1][5" }, \
|
||||
{(char *)&ADC_f[1][6], pt_int16, t_iq_none, t_iq_none, "ADC_f[1][6" }, \
|
||||
{(char *)&ADC_f[1][7], pt_int16, t_iq_none, t_iq_none, "ADC_f[1][7" }, \
|
||||
{(char *)&ADC_f[1][8], pt_int16, t_iq_none, t_iq_none, "ADC_f[1][8" }, \
|
||||
{(char *)&ADC_f[1][9], pt_int16, t_iq_none, t_iq_none, "ADC_f[1][9" }, \
|
||||
{(char *)&ADC_f[1][10], pt_int16, t_iq_none, t_iq_none, "ADC_f[1][1" }, \
|
||||
{(char *)&ADC_f[1][11], pt_int16, t_iq1, t_iq_none, "ADC_f[1][1" }, \
|
||||
{(char *)&ADC_f[1][12], pt_int32, t_iq_none, t_iq_none, "ADC_f[1][1" }, \
|
||||
{(char *)&ADC_f[1][13], pt_int16, t_iq_none, t_iq_none, "ADC_f[1][1" }, \
|
||||
{(char *)&ADC_f[1][14], pt_int16, t_iq_none, t_iq_none, "ADC_f[1][1" }, \
|
||||
{(char *)&ADC_f[1][15], pt_int16, t_iq_none, t_iq_none, "ADC_f[1][1" }, \
|
||||
{(char *)&project.cds_in[0].plane_address, pt_uint16, t_iq_none, t_iq_none, "project.cd" }, \
|
||||
{(char *)&Bender[0].KOhms, pt_uint16, t_iq_none, t_iq_none, "Bender[0]." }, \
|
||||
{(char *)&Bender[0].Times, pt_uint16, t_iq_none, t_iq_none, "Bender[0]." }, \
|
||||
{(char *)&Bender[0].Error.all, pt_uint16, t_iq_none, t_iq_none, "Bender[0]." }, \
|
||||
};
|
||||
|
2860
structs.xml
2860
structs.xml
File diff suppressed because it is too large
Load Diff
370
vars.xml
370
vars.xml
@ -1,10 +1,10 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<analysis makefile_path="Debug/makefile" proj_path="F:/Work/Projects/TMS/TMS_new_bus" structs_path="Src/DebugTools/structs.xml">
|
||||
<analysis proj_path="E:/.WORK/TMS/TMS_new_bus" makefile_path="Debug/makefile" structs_path="Src/DebugTools/structs.xml">
|
||||
<variables>
|
||||
<var name="ADC0finishAddr">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC0EndAdr</shortname>
|
||||
<shortname>ADC0finishAddr</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -407,7 +407,7 @@
|
||||
<type>char[8][16]</type>
|
||||
<file>Src/myLibs/bender.c</file>
|
||||
<extern>false</extern>
|
||||
<static>True</static>
|
||||
<static>true</static>
|
||||
</var>
|
||||
<var name="IN0finishAddr">
|
||||
<show_var>false</show_var>
|
||||
@ -863,7 +863,7 @@
|
||||
<type>int[12]</type>
|
||||
<file>Src/main/init_protect_levels.c</file>
|
||||
<extern>false</extern>
|
||||
<static>True</static>
|
||||
<static>true</static>
|
||||
</var>
|
||||
<var name="biTemperatureWarnings">
|
||||
<show_var>false</show_var>
|
||||
@ -875,7 +875,7 @@
|
||||
<type>int[12]</type>
|
||||
<file>Src/main/init_protect_levels.c</file>
|
||||
<extern>false</extern>
|
||||
<static>True</static>
|
||||
<static>true</static>
|
||||
</var>
|
||||
<var name="block_size_counter_fast">
|
||||
<show_var>false</show_var>
|
||||
@ -959,7 +959,7 @@
|
||||
<type>int[12]</type>
|
||||
<file>Src/main/init_protect_levels.c</file>
|
||||
<extern>false</extern>
|
||||
<static>True</static>
|
||||
<static>true</static>
|
||||
</var>
|
||||
<var name="bvTemperatureWarnings">
|
||||
<show_var>false</show_var>
|
||||
@ -971,7 +971,7 @@
|
||||
<type>int[12]</type>
|
||||
<file>Src/main/init_protect_levels.c</file>
|
||||
<extern>false</extern>
|
||||
<static>True</static>
|
||||
<static>true</static>
|
||||
</var>
|
||||
<var name="byte">
|
||||
<show_var>false</show_var>
|
||||
@ -1151,7 +1151,7 @@
|
||||
<type>char[4]</type>
|
||||
<file>Src/myLibs/bender.c</file>
|
||||
<extern>false</extern>
|
||||
<static>True</static>
|
||||
<static>true</static>
|
||||
</var>
|
||||
<var name="cmd_finish1">
|
||||
<show_var>false</show_var>
|
||||
@ -1187,7 +1187,7 @@
|
||||
<type>char[5]</type>
|
||||
<file>Src/myLibs/bender.c</file>
|
||||
<extern>false</extern>
|
||||
<static>True</static>
|
||||
<static>true</static>
|
||||
</var>
|
||||
<var name="cmd_txt">
|
||||
<show_var>false</show_var>
|
||||
@ -1199,7 +1199,7 @@
|
||||
<type>char[4][8]</type>
|
||||
<file>Src/myLibs/bender.c</file>
|
||||
<extern>false</extern>
|
||||
<static>True</static>
|
||||
<static>true</static>
|
||||
</var>
|
||||
<var name="compress_size">
|
||||
<show_var>false</show_var>
|
||||
@ -1451,7 +1451,7 @@
|
||||
<type>DQ_TO_ALPHABETA</type>
|
||||
<file>Src/main/v_pwm24.c</file>
|
||||
<extern>false</extern>
|
||||
<static>True</static>
|
||||
<static>true</static>
|
||||
</var>
|
||||
<var name="enable_can">
|
||||
<show_var>false</show_var>
|
||||
@ -2953,6 +2953,18 @@
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="return_var">
|
||||
<show_var>false</show_var>
|
||||
<enable>false</enable>
|
||||
<shortname>return_var</shortname>
|
||||
<pt_type>pt_int32</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>int</return_type>
|
||||
<type>long</type>
|
||||
<file>Src/main/Main.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="rmp_freq">
|
||||
<show_var>false</show_var>
|
||||
<enable>false</enable>
|
||||
@ -3397,6 +3409,18 @@
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="var_numb">
|
||||
<show_var>false</show_var>
|
||||
<enable>false</enable>
|
||||
<shortname>var_numb</shortname>
|
||||
<pt_type>pt_int32</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>int</return_type>
|
||||
<type>long</type>
|
||||
<file>Src/main/Main.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="vect_control">
|
||||
<show_var>false</show_var>
|
||||
<enable>false</enable>
|
||||
@ -3554,9 +3578,9 @@
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[0][0]">
|
||||
<show_var>true</show_var>
|
||||
<show_var>false</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f00</shortname>
|
||||
<shortname>ADC_f[0][0]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3566,9 +3590,9 @@
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[0][1]">
|
||||
<show_var>true</show_var>
|
||||
<show_var>false</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f01</shortname>
|
||||
<shortname>ADC_f[0][1]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3578,9 +3602,9 @@
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[0][2]">
|
||||
<show_var>true</show_var>
|
||||
<show_var>false</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f02</shortname>
|
||||
<shortname>ADC_f[0][2]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3590,9 +3614,9 @@
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[0][3]">
|
||||
<show_var>true</show_var>
|
||||
<show_var>false</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f03</shortname>
|
||||
<shortname>ADC_f[0][3]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3602,9 +3626,9 @@
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[0][4]">
|
||||
<show_var>true</show_var>
|
||||
<show_var>false</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f04</shortname>
|
||||
<shortname>ADC_f[0][4]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3614,9 +3638,9 @@
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[0][5]">
|
||||
<show_var>true</show_var>
|
||||
<show_var>false</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f05</shortname>
|
||||
<shortname>ADC_f[0][5]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3626,9 +3650,9 @@
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[0][6]">
|
||||
<show_var>true</show_var>
|
||||
<show_var>false</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f06</shortname>
|
||||
<shortname>ADC_f[0][6]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3638,11 +3662,11 @@
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[0][7]">
|
||||
<show_var>true</show_var>
|
||||
<show_var>false</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f07</shortname>
|
||||
<shortname>ADC_f[0][7]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq</iq_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
@ -3650,9 +3674,9 @@
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[0][8]">
|
||||
<show_var>true</show_var>
|
||||
<show_var>false</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f08</shortname>
|
||||
<shortname>ADC_f[0][8]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3662,9 +3686,9 @@
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[0][9]">
|
||||
<show_var>true</show_var>
|
||||
<show_var>false</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f09</shortname>
|
||||
<shortname>ADC_f[0][9]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3674,9 +3698,9 @@
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[0][10]">
|
||||
<show_var>true</show_var>
|
||||
<show_var>false</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f010</shortname>
|
||||
<shortname>ADC_f[0][10]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3688,7 +3712,7 @@
|
||||
<var name="ADC_f[0][11]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f011</shortname>
|
||||
<shortname>ADC_f[0][11]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3700,7 +3724,7 @@
|
||||
<var name="ADC_f[0][12]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f012</shortname>
|
||||
<shortname>ADC_f[0][12]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3712,7 +3736,7 @@
|
||||
<var name="ADC_f[0][13]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f013</shortname>
|
||||
<shortname>ADC_f[0][13]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3724,7 +3748,7 @@
|
||||
<var name="ADC_f[0][14]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f014</shortname>
|
||||
<shortname>ADC_f[0][14]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3736,7 +3760,7 @@
|
||||
<var name="ADC_f[0][15]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f015</shortname>
|
||||
<shortname>ADC_f[0][15]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3745,10 +3769,202 @@
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="project.cds_tk[2].read.sbus.mask_protect_tk.all">
|
||||
<var name="ADC_f[1][0]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>tk2_ackcur</shortname>
|
||||
<shortname>ADC_f[1][0]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][1]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][1]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][2]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][2]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][3]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][3]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][4]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][4]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][5]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][5]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][6]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][6]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][7]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][7]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][8]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][8]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][9]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][9]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][10]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][10]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][11]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][11]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][12]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][12]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][13]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][13]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][14]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][14]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="ADC_f[1][15]">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>ADC_f[1][15]</shortname>
|
||||
<pt_type>pt_int16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>int</type>
|
||||
<file>Src/main/adc_tools.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="project.cds_in[0].plane_address">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>project.cds_in[0].plane_address</shortname>
|
||||
<pt_type>pt_uint16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
@ -3757,48 +3973,72 @@
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="project.cds_tk[1].plane_address">
|
||||
<var name="Bender[0].KOhms">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>tk1_adr</shortname>
|
||||
<shortname>Bender[0].KOhms</shortname>
|
||||
<pt_type>pt_uint16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>UInt16</type>
|
||||
<file>Src/myXilinx/xp_project.c</file>
|
||||
<type>unsigned int</type>
|
||||
<file>Src/myLibs/bender.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="Bender[0].Times">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>Bender[0].Times</shortname>
|
||||
<pt_type>pt_uint16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>unsigned int</type>
|
||||
<file>Src/myLibs/bender.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
<var name="Bender[0].Error.all">
|
||||
<show_var>true</show_var>
|
||||
<enable>true</enable>
|
||||
<shortname>Bender[0].Error.all</shortname>
|
||||
<pt_type>pt_uint16</pt_type>
|
||||
<iq_type>t_iq_none</iq_type>
|
||||
<return_type>t_iq_none</return_type>
|
||||
<type>unsigned int</type>
|
||||
<file>Src/myLibs/bender.c</file>
|
||||
<extern>false</extern>
|
||||
<static>false</static>
|
||||
</var>
|
||||
</variables>
|
||||
<includes>
|
||||
<file>Src/main/vector.h</file>
|
||||
<file>Src/myXilinx/RS_Functions_modbus.h</file>
|
||||
<file>Src/main/v_pwm24.h</file>
|
||||
<file>Src/main/f281xpwm.h</file>
|
||||
<file>Src/myXilinx/xp_project.h</file>
|
||||
<file>Src/main/adc_tools.h</file>
|
||||
<file>Src/main/errors.h</file>
|
||||
<file>Src/myXilinx/xp_write_xpwm_time.h</file>
|
||||
<file>Src/myLibs/log_can.h</file>
|
||||
<file>Src/myXilinx/RS_Functions_modbus.h</file>
|
||||
<file>Src/VectorControl/pwm_vector_regul.h</file>
|
||||
<file>Src/main/errors.h</file>
|
||||
<file>Src/main/rotation_speed.h</file>
|
||||
<file>Src/VectorControl/teta_calc.h</file>
|
||||
<file>Src/main/v_pwm24.h</file>
|
||||
<file>Src/main/vector.h</file>
|
||||
<file>Src/main/adc_tools.h</file>
|
||||
<file>Src/myLibs/log_can.h</file>
|
||||
<file>Src/myXilinx/xp_write_xpwm_time.h</file>
|
||||
<file>Src/VectorControl/dq_to_alphabeta_cos.h</file>
|
||||
<file>Src/myXilinx/RS_Functions.h</file>
|
||||
<file>Src/myXilinx/x_serial_bus.h</file>
|
||||
<file>Src/myLibs/svgen_dq.h</file>
|
||||
<file>Src/myXilinx/x_parallel_bus.h</file>
|
||||
<file>Src/myXilinx/x_serial_bus.h</file>
|
||||
<file>Src/myXilinx/xPeriphSP6_loader.h</file>
|
||||
<file>Src/myXilinx/Spartan2E_Functions.h</file>
|
||||
<file>Src/myXilinx/xp_controller.h</file>
|
||||
<file>Src/myXilinx/xp_rotation_sensor.h</file>
|
||||
<file>Src/myXilinx/xPeriphSP6_loader.h</file>
|
||||
<file>Src/myXilinx/RS_Functions.h</file>
|
||||
<file>Src/myLibs/detect_phase_break2.h</file>
|
||||
<file>Src/myXilinx/CRC_Functions.h</file>
|
||||
<file>Src/myLibs/CAN_Setup.h</file>
|
||||
<file>Src/myLibs/log_params.h</file>
|
||||
<file>Src/myLibs/log_to_memory.h</file>
|
||||
<file>Src/main/global_time.h</file>
|
||||
<file>Src/myLibs/pid_reg3.h</file>
|
||||
<file>Src/myLibs/svgen_dq.h</file>
|
||||
<file>Src/myLibs/log_params.h</file>
|
||||
<file>Src/myXilinx/CRC_Functions.h</file>
|
||||
<file>Src/main/global_time.h</file>
|
||||
<file>Src/myLibs/CAN_Setup.h</file>
|
||||
<file>Src/myLibs/log_to_memory.h</file>
|
||||
<file>Src/myLibs/IQmathLib.h</file>
|
||||
<file>Src/main/doors_control.h</file>
|
||||
<file>Src/main/isolation.h</file>
|
||||
@ -4676,6 +4916,10 @@
|
||||
<type>TMS_TO_TERMINAL_TEST_ALL_STRUCT</type>
|
||||
<file>Src/myXilinx/RS_Functions_modbus.c</file>
|
||||
</var>
|
||||
<var name="return_var">
|
||||
<type>long</type>
|
||||
<file>Src/main/Main.c</file>
|
||||
</var>
|
||||
<var name="rmp_freq">
|
||||
<type>RMP_MY1</type>
|
||||
<file>Src/main/PWMTools.c</file>
|
||||
@ -4816,6 +5060,10 @@
|
||||
<type>UNITES_CAN_SETUP</type>
|
||||
<file>Src/myLibs/CAN_Setup.c</file>
|
||||
</var>
|
||||
<var name="var_numb">
|
||||
<type>long</type>
|
||||
<file>Src/main/Main.c</file>
|
||||
</var>
|
||||
<var name="vect_control">
|
||||
<type>VECTOR_CONTROL</type>
|
||||
<file>Src/VectorControl/pwm_vector_regul.c</file>
|
||||
|
Loading…
Reference in New Issue
Block a user