Compare commits

..

4 Commits

Author SHA1 Message Date
0b6807bd2c release 1.04.1
фикс кривой записи файлов для matlab 2021
2025-11-12 15:59:30 +03:00
49be34efc9 pre-release 1.04 2025-11-07 14:52:52 +03:00
041322a62e pre-release 1.03 2025-06-28 16:20:28 +03:00
1aa3c5b955 pre-release 1.02 2025-06-19 13:29:33 +03:00
2 changed files with 9 additions and 56 deletions

View File

@ -1,18 +1,19 @@
% Компилирует S-function для блока микроконтроллера в Simulink % Компилирует S-function для блока микроконтроллера в Simulink
% compile_mode: 1 - компиляция, 0 - обновление конфигурации % compile_mode: 1 - компиляция, 0 - обновление конфигурации
function res = mexing(compile_mode) function res = mexing(compile_mode)
global Ts
Ts = 0.00001; % Установка глобального времени дискретизации
if compile_mode == 1 if compile_mode == 1
block = gcb;
% === РЕЖИМ КОМПИЛЯЦИИ === % === РЕЖИМ КОМПИЛЯЦИИ ===
setenv('VSLANG', '1033'); % Английский для Visual Studio setenv('VSLANG', '1033'); % Английский для Visual Studio
% Обновление параметров блока % Обновление параметров блока
block = gcb;
newName = get_param(block, 'sfuncName'); newName = get_param(block, 'sfuncName');
oldName = get_param(block, 'FunctionName'); oldName = get_param(block, 'FunctionName');
if ~strcmp(newName, oldName) if ~strcmp(newName, oldName)
set_param(block, 'FunctionName', newName); % Обновление имени функции set_param(block, 'FunctionName', newName); % Обновление имени функции
mcuMask.setSFuncName(block);
end end
newParam = get_param(block, 'sfuncParam'); newParam = get_param(block, 'sfuncParam');
@ -253,38 +254,6 @@ function definesWrapperArg = addDefineByParam(definesWrapperArg, paramName, val_
return; return;
end 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 if val_define ~= 0
% Параметры с значениями % Параметры с значениями
@ -293,28 +262,27 @@ function definesWrapperArg = addDefineByParam(definesWrapperArg, paramName, val_
val = evalin('base', val); % Вычисление выражений val = evalin('base', val); % Вычисление выражений
val = num2str(val); val = num2str(val);
end end
newDefine = createDefine(def_name, val, true); newDefine = ['-D"' def_name '__EQ__' val '"'];
elseif ~strcmp(param.Type, 'popup') elseif ~strcmp(param.Type, 'popup')
% Чекбоксы % Чекбоксы
if mcuMask.read_checkbox(paramName) if mcuMask.read_checkbox(paramName)
newDefine = createDefine(def_name, '', false); newDefine = ['-D"' def_name '"'];
else else
newDefine = ''; newDefine = '';
end end
else else
% Выпадающие списки % Выпадающие списки
if strcmp(param.Alias, '') if strcmp(param.Alias, '')
newDefine = createDefine(def_name, '', false); newDefine = ['-D"' def_name '"'];
else else
newDefine = createDefine(def_name, val, true); newDefine = ['-D"' def_name '__EQ__' val '"'];
end end
end end
% Добавление дефайна к результирующей строке % Добавление дефайна к результирующей строке
if isempty(definesWrapperArg) || strlength(strtrim(definesWrapperArg)) == 0 if isempty(definesWrapperArg) || strlength(strtrim(definesWrapperArg)) == 0
definesWrapperArg = newDefine; definesWrapperArg = newDefine;
elseif ~isempty(newDefine) else
definesWrapperArg = definesWrapperArg + " " + newDefine; definesWrapperArg = definesWrapperArg + " " + newDefine;
end end
end end

View File

@ -73,11 +73,10 @@ classdef periphConfig
% Восстанавливаем таблицы после изменений % Восстанавливаем таблицы после изменений
customtable.restore_all_tables(tableNames, columns_backup); customtable.restore_all_tables(tableNames, columns_backup);
catch ME catch
% В случае ошибки восстанавливаем таблицы % В случае ошибки восстанавливаем таблицы
customtable.restore_all_tables(tableNames, columns_backup); customtable.restore_all_tables(tableNames, columns_backup);
end end
periphConfig.addUserFunctions(config.UserCode);
end end
function update() function update()
@ -666,23 +665,9 @@ classdef periphConfig
param.TypeOptions = def.Options; param.TypeOptions = def.Options;
end end
else 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; param.Alias = def.Def;
end end
end end
end
callback = sprintf('try periphConfig.periphParamCallback("%s"); catch end', paramName); callback = sprintf('try periphConfig.periphParamCallback("%s"); catch end', paramName);
param.Callback = callback; param.Callback = callback;