diff --git a/MCU Wrapper.mltbx b/MCU Wrapper.mltbx
index 64a60f7..f6b7b82 100644
Binary files a/MCU Wrapper.mltbx and b/MCU Wrapper.mltbx differ
diff --git a/McuLib/m/mexing.m b/McuLib/m/mexing.m
index 4524278..a9395a7 100644
--- a/McuLib/m/mexing.m
+++ b/McuLib/m/mexing.m
@@ -1,19 +1,18 @@
% Компилирует S-function для блока микроконтроллера в Simulink
% compile_mode: 1 - компиляция, 0 - обновление конфигурации
function res = mexing(compile_mode)
- global Ts
- Ts = 0.00001; % Установка глобального времени дискретизации
if compile_mode == 1
+ block = gcb;
% === РЕЖИМ КОМПИЛЯЦИИ ===
setenv('VSLANG', '1033'); % Английский для Visual Studio
% Обновление параметров блока
- block = gcb;
newName = get_param(block, 'sfuncName');
oldName = get_param(block, 'FunctionName');
if ~strcmp(newName, oldName)
set_param(block, 'FunctionName', newName); % Обновление имени функции
+ mcuMask.setSFuncName(block);
end
newParam = get_param(block, 'sfuncParam');
@@ -254,6 +253,38 @@ function definesWrapperArg = addDefineByParam(definesWrapperArg, paramName, val_
return;
end
+ % Вспомогательная функция для создания дефайнов
+ function newDefine = createDefine(def_name, val, isValueDefine)
+ if contains(def_name, '_MATDELIM_')
+ % Multiple values через пробел - создаем несколько дефайнов
+ def_names = strsplit(strtrim(def_name), '_MATDELIM_');
+ newDefine = '';
+ for i = 1:length(def_names)
+ single_def = strtrim(def_names{i});
+ if ~isempty(single_def)
+ if isValueDefine
+ single_define = ['-D"' single_def '__EQ__' val '"'];
+ else
+ single_define = ['-D"' single_def '"'];
+ end
+
+ if i == 1
+ newDefine = single_define;
+ else
+ newDefine = [newDefine ' ' single_define];
+ end
+ end
+ end
+ else
+ % Single value - создаем один дефайн
+ if isValueDefine
+ newDefine = ['-D"' def_name '__EQ__' val '"'];
+ else
+ newDefine = ['-D"' def_name '"'];
+ end
+ end
+ end
+
% Формирование дефайна в зависимости от типа параметра
if val_define ~= 0
% Параметры с значениями
@@ -262,27 +293,28 @@ function definesWrapperArg = addDefineByParam(definesWrapperArg, paramName, val_
val = evalin('base', val); % Вычисление выражений
val = num2str(val);
end
- newDefine = ['-D"' def_name '__EQ__' val '"'];
+ newDefine = createDefine(def_name, val, true);
+
elseif ~strcmp(param.Type, 'popup')
% Чекбоксы
if mcuMask.read_checkbox(paramName)
- newDefine = ['-D"' def_name '"'];
+ newDefine = createDefine(def_name, '', false);
else
newDefine = '';
end
else
% Выпадающие списки
if strcmp(param.Alias, '')
- newDefine = ['-D"' def_name '"'];
+ newDefine = createDefine(def_name, '', false);
else
- newDefine = ['-D"' def_name '__EQ__' val '"'];
+ newDefine = createDefine(def_name, val, true);
end
end
% Добавление дефайна к результирующей строке
if isempty(definesWrapperArg) || strlength(strtrim(definesWrapperArg)) == 0
definesWrapperArg = newDefine;
- else
+ elseif ~isempty(newDefine)
definesWrapperArg = definesWrapperArg + " " + newDefine;
end
end
diff --git a/McuLib/m/periphConfig.m b/McuLib/m/periphConfig.m
index d89dcf5..bae9d6c 100644
--- a/McuLib/m/periphConfig.m
+++ b/McuLib/m/periphConfig.m
@@ -73,10 +73,11 @@ classdef periphConfig
% Восстанавливаем таблицы после изменений
customtable.restore_all_tables(tableNames, columns_backup);
- catch
+ catch ME
% В случае ошибки восстанавливаем таблицы
customtable.restore_all_tables(tableNames, columns_backup);
end
+ periphConfig.addUserFunctions(config.UserCode);
end
function update()
@@ -665,9 +666,23 @@ classdef periphConfig
param.TypeOptions = def.Options;
end
else
+ % Если def.Def - массив, записываем все элементы через пробел в Alias
+ if iscell(def.Def) || (isnumeric(def.Def) && numel(def.Def) > 1)
+ % Преобразуем массив в строку с элементами через пробел
+ if iscell(def.Def)
+ % Для cell-массива
+ aliasStr = strjoin(cellfun(@num2str, def.Def, 'UniformOutput', false), '_MATDELIM_');
+ else
+ % Для числового массива
+ aliasStr = strjoin(arrayfun(@num2str, def.Def, 'UniformOutput', false), '_MATDELIM_');
+ end
+ param.Alias = aliasStr;
+ else
+ % Одиночное значение
param.Alias = def.Def;
end
end
+ end
callback = sprintf('try periphConfig.periphParamCallback("%s"); catch end', paramName);
param.Callback = callback;
diff --git a/mcuwrapper.prj b/mcuwrapper.prj
index 713f663..4681cec 100644
--- a/mcuwrapper.prj
+++ b/mcuwrapper.prj
@@ -7,7 +7,7 @@
Library for run MCU program in Simulink
- 1.04
+ 1.05
${PROJECT_ROOT}\MCU Wrapper.mltbx
@@ -100,12 +100,14 @@
- C:\Program Files\MATLAB\R2021b
+ C:\Program Files\MATLAB\R2023a
+
+
@@ -127,6 +129,16 @@
true
+
+
+ true
+
+
+
+
+ true
+
+
false