From a6c5a9edab392ac1624f76c1e0e2b5ee04a4c0ce Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Thu, 12 Jun 2025 10:51:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D0=B8=20?= =?UTF-8?q?=D1=81=D1=87=D0=B8=D1=82=D1=8B=D0=B2=D0=B0=D1=8E=D1=82=D1=81?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config_reader.asv | 126 ++++++++++++------- config_reader.m | 153 ++++++++++++----------- matlab.mat | Bin 6103 -> 0 bytes mcu_test_r2023.slx | Bin 67196 -> 67449 bytes mexing.asv | 305 +++++++++++++++++++++++++++++++++++++++++++++ mexing.m | 230 +++++++++++++++------------------- periph_config.asv | 26 ++-- periph_config.json | 26 ++-- 8 files changed, 609 insertions(+), 257 deletions(-) delete mode 100644 matlab.mat create mode 100644 mexing.asv diff --git a/config_reader.asv b/config_reader.asv index feeb816..bd9c938 100644 --- a/config_reader.asv +++ b/config_reader.asv @@ -8,45 +8,26 @@ load_system(model); % если модель ещё не загружена update_mask_from_config(block); disp('Маска обновлена по конфигу.'); - function update_mask_from_config(blockPath) config = load_periph_config(); mask = Simulink.Mask.get(blockPath); - tabPrompt = 'Config Peripheral'; % Название вкладки, как отображается в маске + tabPrompt = 'Config Peripheral'; % Имя вкладки (Prompt) - controls = mask.getDialogControls(); + allControls = mask.getDialogControls(); + tabCtrl = find_tab_by_prompt(allControls, tabPrompt); - % Выведем все контролы и их свойства для отладки - fprintf('Всего контролов: %d\n', numel(controls)); - for k = 1:numel(controls) - ctrl = controls(k); - props = properties(ctrl); - fprintf('Контрол #%d: Name="%s", Prompt="%s", Style="%s"\n', ... - k, ctrl.Name, ctrl.Prompt, ctrl.Style); + if isempty(tabCtrl) + error('Вкладка с названием "%s" не найдена в маске', tabPrompt); end - % Ищем вкладку по Prompt - tabIdx = find(arrayfun(@(c) strcmp(c.Style,'tab') && strcmp(c.Prompt, tabPrompt), controls), 1); - - if isempty(tabIdx) - error('Вкладка с названием "%s" не найдена.', tabPrompt); + % Удаляем все контролы внутри вкладки + children = tabCtrl.DialogControls; + while ~isempty(children) + tabCtrl.removeControl(children(1)); + children = tabCtrl.DialogControls; % обновляем список после удаления end - tabName = controls(tabIdx).Name; - fprintf('Найдена вкладка: Name="%s"\n', tabName); - - % Удаляем параметры из найденной вкладки - i = 1; - while i <= numel(mask.Parameters) - if strcmp(mask.Parameters(i).TabName, tabName) - mask.removeParameter(i); - else - i = i + 1; - end - end - - % Добавляем параметры в эту вкладку periphs = fieldnames(config); for i = 1:numel(periphs) periph = periphs{i}; @@ -54,35 +35,54 @@ function update_mask_from_config(blockPath) defNames = fieldnames(defines); for j = 1:numel(defNames) - defName = defNames{j}; - def = defines.(defName); + defPrompt = defNames{j}; + def = defines.(defPrompt); + + % Обрабатываем только checkbox и edit + switch lower(def.Type) + case 'checkbox' + paramType = 'checkbox'; + case 'edit' + paramType = 'edit'; + otherwise + continue; + end + + paramName = matlab.lang.makeValidName([periph '_' defPrompt]); val = def.Default; if islogical(val) - valStr = mat2str(val); + if val + valStr = 'on'; + else + valStr = 'off'; + end elseif isnumeric(val) valStr = num2str(val); elseif ischar(val) - valStr = ['''' val '''']; + valStr = val; else - error('Unsupported default value type for %s.%s', periph, defName); + error('Unsupported default value type for %s.%s', periph, defPrompt); end - mask.addParameter( ... - 'Type', def.Type, ... - 'Prompt', [periph ' - ' defName], ... - 'Name', [periph '_' defName], ... + + % Добавляем параметр в маску (без TabName) + mask.addParameter(... + 'Type', paramType, ... + 'Prompt', defPrompt, ... + 'Name', paramName, ... 'Value', valStr, ... - 'TabName', tabName ... - ); + 'Container', tabPrompt); + + disp(['paramType = ', paramType]); + disp(['paramName = ', paramName]); end end end -function config = load_periph_config() - jsonText = fileread('periph_config.json'); - config = jsondecode(jsonText); -end + + + function config = load_periph_config() @@ -119,3 +119,41 @@ function clear_params_from_tab(blockPath, tabPrompt) end end + +%% поиск вкладки +function tab = find_tab_by_name(controls, targetName) + tab = []; + + for i = 1:numel(controls) + ctrl = controls(i); + + % Проверяем, вкладка ли это и совпадает ли имя + if isa(ctrl, 'Simulink.dialog.Tab') && strcmp(ctrl.Name, targetName) + tab = ctrl; + return; + end + + % Если это контейнер — обходим его детей + children = get_children(ctrl); + if ~isempty(children) + tab = find_tab_by_name(children, targetName); + if ~isempty(tab) + return; + end + end + end +end + + +function children = get_children(ctrl) + if isprop(ctrl, 'DialogControls') + children = ctrl.DialogControls; + elseif isprop(ctrl, 'Controls') + children = ctrl.Controls; + elseif isprop(ctrl, 'Children') + children = ctrl.Children; + else + children = []; + end +end + diff --git a/config_reader.m b/config_reader.m index 08bc06c..713783e 100644 --- a/config_reader.m +++ b/config_reader.m @@ -8,44 +8,26 @@ load_system(model); % если модель ещё не загружена update_mask_from_config(block); disp('Маска обновлена по конфигу.'); - function update_mask_from_config(blockPath) config = load_periph_config(); mask = Simulink.Mask.get(blockPath); - tabPrompt = 'Config Peripheral'; % Название вкладки, как отображается в маске + tabName = 'configTab'; % Имя вкладки (Prompt) - controls = mask.getDialogControls(); - - allTabs = find_all_tabs(mask); - - fprintf('Найдено вкладок: %d\n', numel(allTabs)); - for i = 1:numel(allTabs) - fprintf('Tab %d: Name="%s", Prompt="%s"\n', i, allTabs(i).Name, allTabs(i).Prompt); + allControls = mask.getDialogControls(); + tabCtrl = find_tab_by_name(allControls, tabName); + + if isempty(tabCtrl) + error('Вкладка с названием "%s" не найдена в маске', tabName); end - - % Ищем вкладку по Prompt - tabIdx = find(arrayfun(@(c) strcmp(c.Style,'tab') && strcmp(c.Prompt, tabPrompt), controls), 1); - - if isempty(tabIdx) - error('Вкладка с названием "%s" не найдена.', tabPrompt); + % Удаляем все контролы внутри вкладки + children = tabCtrl.DialogControls; + while ~isempty(children) + mask.removeParameter(children(1).Name); + children = tabCtrl.DialogControls; % обновляем список после удаления end - tabName = controls(tabIdx).Name; - fprintf('Найдена вкладка: Name="%s"\n', tabName); - - % Удаляем параметры из найденной вкладки - i = 1; - while i <= numel(mask.Parameters) - if strcmp(mask.Parameters(i).TabName, tabName) - mask.removeParameter(i); - else - i = i + 1; - end - end - - % Добавляем параметры в эту вкладку periphs = fieldnames(config); for i = 1:numel(periphs) periph = periphs{i}; @@ -53,62 +35,51 @@ function update_mask_from_config(blockPath) defNames = fieldnames(defines); for j = 1:numel(defNames) - defName = defNames{j}; - def = defines.(defName); + defPrompt = defNames{j}; + def = defines.(defPrompt); + + % Обрабатываем только checkbox и edit + switch lower(def.Type) + case 'checkbox' + paramType = 'checkbox'; + case 'edit' + paramType = 'edit'; + otherwise + continue; + end + + paramName = matlab.lang.makeValidName([periph '_' defPrompt]); val = def.Default; if islogical(val) - valStr = mat2str(val); + if val + valStr = 'on'; + else + valStr = 'off'; + end elseif isnumeric(val) valStr = num2str(val); elseif ischar(val) - valStr = ['''' val '''']; + valStr = val; else - error('Unsupported default value type for %s.%s', periph, defName); + error('Unsupported default value type for %s.%s', periph, defPrompt); end - mask.addParameter( ... - 'Type', def.Type, ... - 'Prompt', [periph ' - ' defName], ... - 'Name', [periph '_' defName], ... + + % Добавляем параметр в маску (без TabName) + mask.addParameter(... + 'Type', paramType, ... + 'Prompt', defPrompt, ... + 'Name', paramName, ... 'Value', valStr, ... - 'TabName', tabName ... - ); + 'Container', tabName); end end end -function tabs = find_all_tabs(mask) - controls = mask.getDialogControls(); - tabs = find_tabs_recursive(controls); -end -function tabs = find_tabs_recursive(controls) - tabs = []; - for i = 1:numel(controls) - ctrl = controls(i); - % Проверяем тип контролла (у разных версий API может отличаться) - % Чтобы не упасть, проверяем, есть ли поле Type - if isprop(ctrl, 'Type') - if strcmp(ctrl.Type, 'tab') - tabs = [tabs, ctrl]; %#ok - elseif any(strcmp(ctrl.Type, {'tabcontainer', 'group', 'panel'})) - % В этих контролах могут быть свои Controls или Children - if isprop(ctrl, 'Controls') - subtabs = find_tabs_recursive(ctrl.Controls); - elseif isprop(ctrl, 'Children') - subtabs = find_tabs_recursive(ctrl.Children); - else - subtabs = []; - end - tabs = [tabs, subtabs]; %#ok - end - else - % Если у контролла нет свойства Type - игнорируем - end - end -end + function config = load_periph_config() @@ -117,21 +88,21 @@ function config = load_periph_config() end -function clear_params_from_tab(blockPath, tabPrompt) +function clear_params_from_tab(blockPath, tabName) mask = Simulink.Mask.get(blockPath); controls = mask.getDialogControls; tabs = controls(strcmp({controls.Type}, 'tab')); tabName = ''; for i = 1:numel(tabs) - if strcmp(tabs(i).Prompt, tabPrompt) + if strcmp(tabs(i).Prompt, tabName) tabName = tabs(i).Name; % внутреннее имя вкладки break; end end if isempty(tabName) - error('Вкладка с названием "%s" не найдена.', tabPrompt); + error('Вкладка с названием "%s" не найдена.', tabName); end % Удаляем параметры с TabName == tabName @@ -145,3 +116,41 @@ function clear_params_from_tab(blockPath, tabPrompt) end end + +%% поиск вкладки +function tab = find_tab_by_name(controls, targetName) + tab = []; + + for i = 1:numel(controls) + ctrl = controls(i); + + % Проверяем, вкладка ли это и совпадает ли имя + if isa(ctrl, 'Simulink.dialog.Tab') && strcmp(ctrl.Name, targetName) + tab = ctrl; + return; + end + + % Если это контейнер — обходим его детей + children = get_children(ctrl); + if ~isempty(children) + tab = find_tab_by_name(children, targetName); + if ~isempty(tab) + return; + end + end + end +end + + +function children = get_children(ctrl) + if isprop(ctrl, 'DialogControls') + children = ctrl.DialogControls; + elseif isprop(ctrl, 'Controls') + children = ctrl.Controls; + elseif isprop(ctrl, 'Children') + children = ctrl.Children; + else + children = []; + end +end + diff --git a/matlab.mat b/matlab.mat deleted file mode 100644 index cadce0985853bc58ce7d3c5d43e45701d2c1ec3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6103 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 YKowxhiUI{rt*xj-nkvn>-U3$iKdZk|f&c&j diff --git a/mcu_test_r2023.slx b/mcu_test_r2023.slx index da4b025010a0c751c40cbc71503b5a01f94efdc8..898e9d476582662b41f5e65d21f05117db20073a 100644 GIT binary patch delta 46430 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

R?0Npd^!8ROq>zTsxr5L#M^ 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 diff --git a/mexing.asv b/mexing.asv new file mode 100644 index 0000000..5220da6 --- /dev/null +++ b/mexing.asv @@ -0,0 +1,305 @@ +% Компилирует S-function +clear, clc +close; + + +Ts = 0.00001; + +delete("*.mexw64") +delete("*.mexw64.pdb") +delete(".\MCU_Wrapper\Outputs\*.*"); +set_param(gcb, 'consoleOutput', ''); + +% Флаг режима отладки +definesArg = buildWrapperDefinesString(); +definesUserArg = parseDefinesMaskText(); +definesAllArg = [definesArg + " " + definesUserArg]; + + +if read_checkbox('enableDebug') + modeArg = "debug"; +else + modeArg = "release"; +end + +if read_checkbox('fullOutput') || read_checkbox('extConsol') + echoArg = 'echo_enable'; +else + echoArg = 'echo_disable'; + +end + +[includesArg, codeArg] = make_mex_arguments('incTable', 'srcTable'); + +% Вызов батника с двумя параметрами: includes и code +cmd = sprintf('.\\MCU_Wrapper\\run_mex.bat "%s" "%s" "%s" %s %s', includesArg, codeArg, definesAllArg, modeArg, echoArg); + + + +if read_checkbox('extConsol') + cmdout = runBatAndShowOutput(cmd); +else + [status, cmdout]= system(cmd); +end + +% Сохраним вывод в параметр маски с именем 'consoleOutput' +set_param(gcb, 'consoleOutput', cmdout); + +% % Обновим Mask Display для показа +% maskDisplayStr = sprintf('disp(''%s'')', cmdout); +% set_param(gcb, 'MaskDisplay', maskDisplayStr); + +beep + + + +%% DEFINE PARAMS + + +function [includesArg, codeArg] = make_mex_arguments(incTableName, srcTableame) +%MAKE_MEX_ARGUMENTS Формирует строки аргументов для вызова mex-компиляции через батник +% +% [includesArg, codeArg] = make_mex_arguments(includesCell, codeCell) +% +% Вход: +% includesCell — ячейковый массив путей к директориям include +% codeCell — ячейковый массив исходных файлов +% +% Выход: +% includesArg — строка для передачи в батник, например: "-I"inc1" -I"inc2"" +% codeArg — строка с исходниками, например: ""src1.c" "src2.cpp"" + + + % Здесь пример получения из маски текущего блока (замени по своему) + blockHandle = gcbh; % или замени на нужный блок + + includesCell = parseCellString(get_param(blockHandle, incTableName)); + codeCell = parseCellString(get_param(blockHandle, srcTableame)); + + % Оборачиваем пути в кавычки и добавляем -I + includesStr = strjoin(cellfun(@(f) ['-I"' f '"'], includesCell, 'UniformOutput', false), ' '); + + % Оборачиваем имена файлов в кавычки + codeStr = strjoin(cellfun(@(f) ['"' f '"'], codeCell, 'UniformOutput', false), ' '); + + % Удаляем символ переноса строки и пробел в конце, если вдруг попал + codeStr = strtrim(codeStr); + includesStr = strtrim(includesStr); + + % Оборачиваем всю строку в кавычки, чтобы батник корректно понял + % includesArg = ['"' includesStr '"']; + % codeArg = ['"' codeStr '"']; + includesArg = includesStr; + codeArg = codeStr; + +end + + +function definesWrapperArg = buildWrapperDefinesString() + blockHandle = gcbh; + + % Получаем MaskValues и MaskNames + maskValues = get_param(blockHandle, 'MaskValues'); + paramNames = get_param(blockHandle, 'MaskNames'); + + % Индексы параметров + idxCycles = find(strcmp(paramNames, 'threadCycles')); + idxClk = find(strcmp(paramNames, 'mcuClk')); + + % Значения + cyclesVal = maskValues{idxCycles}; + clkMHz = str2double(maskValues{idxClk}); + clkHz = round(clkMHz * 1e6); + + % Формируем defines в формате: -D"NAME=VALUE" + if read_checkbox('enableThreading') + def1 = ['-D"RUN_APP_MAIN_FUNC_THREAD"']; + else + def1 = ['']; + end + + if read_checkbox('enableDeinit') + def2 = ['-D"DEINITIALIZE_AFTER_SIM"']; + else + def2 = ['']; + end + + def3 = ['-D"DEKSTOP_CYCLES_FOR_MCU_APP__EQ__' cyclesVal '"']; + def4 = ['-D"MCU_CORE_CLOCK__EQ__' num2str(clkHz) '"']; + + definesArg = strjoin({def1, def2, def3, def4}, ' '); +end + + +function definesUserArg = parseDefinesMaskText() + blockHandle = gcbh; + + % Получаем MaskValues и MaskNames + maskValues = get_param(blockHandle, 'MaskValues'); + paramNames = get_param(blockHandle, 'MaskNames'); + + % Индекс параметра userDefs + idxUserDefs = find(strcmp(paramNames, 'userDefs')); + definesText = maskValues{idxUserDefs}; % Текст с пользовательскими определениями + + % Убираем буквальные символы \n и \r + definesText = strrep(definesText, '\n', ' '); + definesText = strrep(definesText, '\r', ' '); + + % Разбиваем по переносам строк + lines = split(definesText, {'\n', '\r\n', '\r'}); + + parts = strings(1,0); % пустой массив строк + + for k = 1:numel(lines) + line = strtrim(lines{k}); + if isempty(line) + continue; + end + + % Разбиваем по пробелам, чтобы получить отдельные определения в строке + tokens = split(line); + + for t = 1:numel(tokens) + token = strtrim(tokens{t}); + if isempty(token) + continue; + end + + eqIdx = strfind(token, '='); + if isempty(eqIdx) + % Просто ключ без значения + parts(end+1) = sprintf('-D"%s"', token); + else + key = strtrim(token(1:eqIdx(1)-1)); + val = strtrim(token(eqIdx(1)+1:end)); + parts(end+1) = sprintf('-D"%s__EQ__%s"', key, val); + end + end + end + + definesUserArg = strjoin(parts, ' '); +end + + +%% PARSE FUNCTIONS + +function out = parseCellString(str) + str = strtrim(str); + if startsWith(str, '{') && endsWith(str, '}') + str = str(2:end-1); + end + + parts = split(str, ';'); + out = cell(numel(parts), 1); + for i = 1:numel(parts) + el = strtrim(parts{i}); + if startsWith(el, '''') && endsWith(el, '''') + el = el(2:end-1); + end + out{i} = el; + end + + if isempty(out) || (numel(out) == 1 && isempty(out{1})) + out = {}; + end +end + +function str = cellArrayToString(cellArray) + quoted = cellfun(@(s) ['''' s ''''], cellArray, 'UniformOutput', false); + str = ['{' strjoin(quoted, ';') '}']; +end + + + +function checkbox_state = read_checkbox(checkboxName) + maskValues = get_param(gcbh, 'MaskValues'); + paramNames = get_param(gcbh, 'MaskNames'); + + inxCheckBox = find(strcmp(paramNames, checkboxName)); + + checkbox_state_str = maskValues{inxCheckBox}; + if strcmpi(checkbox_state_str, 'on') + checkbox_state = 1; + else + checkbox_state = 0; + end +end + + +%% CONSOLE FUNCTIONS + +function cmdret = runBatAndShowOutput(cmd) + import java.io.*; + import java.lang.*; + cmdEnglish = ['chcp 437 > nul && ' cmd]; + pb = java.lang.ProcessBuilder({'cmd.exe', '/c', cmdEnglish}); + pb.redirectErrorStream(true); + process = pb.start(); + + reader = BufferedReader(InputStreamReader(process.getInputStream())); + + cmdret = ""; % Здесь будем накапливать весь вывод + + while true + if reader.ready() + line = char(reader.readLine()); + if isempty(line) + break; + end + cmdret = cmdret + string(line) + newline; % сохраняем вывод + % Здесь выводим только новую строку + safeLine = strrep(line, '''', ''''''); % Экранируем апострофы + logWindow_append(safeLine); + drawnow; % обновляем GUI + else + if ~process.isAlive() + % дочитываем оставшиеся строки + while reader.ready() + line = char(reader.readLine()); + if isempty(line) + break; + end + cmdret = cmdret + string(line) + newline; % сохраняем вывод + safeLine = strrep(line, '''', ''''''); + logWindow_append(safeLine); + drawnow; + end + break; + end + pause(0.2); + end + end + process.waitFor(); +end + + +function logWindow_append(line) + persistent fig hEdit jScrollPane jTextArea + + if isempty(fig) || ~isvalid(fig) + fig = figure('Name', 'Log Window', 'Position', [100 100 600 400]); + hEdit = uicontrol('Style', 'edit', ... + 'Max', 2, 'Min', 0, ... + 'Enable', 'on', ... + 'FontName', 'Courier New', ... + 'Position', [10 10 580 380], ... + 'HorizontalAlignment', 'left', ... + 'BackgroundColor', 'white', ... + 'Tag', 'LogWindowFigure'); + + jScrollPane = findjobj(hEdit); % JScrollPane + jTextArea = jScrollPane.getViewport.getView; % JTextArea внутри JScrollPane + end + + oldText = get(hEdit, 'String'); + if ischar(oldText) + oldText = {oldText}; + end + + set(hEdit, 'String', [oldText; {line}]); + drawnow; + % Автоскролл вниз: + jTextArea.setCaretPosition(jTextArea.getDocument.getLength); + drawnow; +end diff --git a/mexing.m b/mexing.m index 1775a9a..6a99822 100644 --- a/mexing.m +++ b/mexing.m @@ -8,30 +8,21 @@ Ts = 0.00001; delete("*.mexw64") delete("*.mexw64.pdb") delete(".\MCU_Wrapper\Outputs\*.*"); +set_param(gcb, 'consoleOutput', ''); % Флаг режима отладки -definesArg = buildDefinesString(); +definesWrapperArg = buildWrapperDefinesString(); definesUserArg = parseDefinesMaskText(); -definesAllArg = [definesArg + " " + definesUserArg]; +definesAllArg = [definesWrapperArg + " " + definesUserArg]; -maskValues = get_param(gcbh, 'MaskValues'); -paramNames = get_param(gcbh, 'MaskNames'); -inxDebug = find(strcmp(paramNames, 'enableDebug')); -idxExtConsole = find(strcmp(paramNames, 'extConsol')); -idxFullOutput = find(strcmp(paramNames, 'fullOutput')); - -isDebug = maskValues{inxDebug}; -isExtConsole = maskValues{idxExtConsole}; -isFullOutput = maskValues{idxFullOutput}; - -if strcmpi(isDebug, 'on') +if read_checkbox('enableDebug') modeArg = "debug"; else modeArg = "release"; end -if strcmpi(isFullOutput, 'on') +if read_checkbox('fullOutput') || read_checkbox('extConsol') echoArg = 'echo_enable'; else echoArg = 'echo_disable'; @@ -40,13 +31,12 @@ end [includesArg, codeArg] = make_mex_arguments('incTable', 'srcTable'); -set_param(gcb, 'consoleOutput', ''); % Вызов батника с двумя параметрами: includes и code cmd = sprintf('.\\MCU_Wrapper\\run_mex.bat "%s" "%s" "%s" %s %s', includesArg, codeArg, definesAllArg, modeArg, echoArg); -if(strcmpi(isExtConsole, 'on')) +if read_checkbox('extConsol') cmdout = runBatAndShowOutput(cmd); else [status, cmdout]= system(cmd); @@ -63,7 +53,7 @@ beep -%% +%% DEFINE PARAMS function [includesArg, codeArg] = make_mex_arguments(incTableName, srcTableame) @@ -104,84 +94,8 @@ function [includesArg, codeArg] = make_mex_arguments(incTableName, srcTableame) end -function cmdret = runBatAndShowOutput(cmd) - import java.io.*; - import java.lang.*; - cmdEnglish = ['chcp 437 > nul && ' cmd]; - pb = java.lang.ProcessBuilder({'cmd.exe', '/c', cmdEnglish}); - pb.redirectErrorStream(true); - process = pb.start(); - reader = BufferedReader(InputStreamReader(process.getInputStream())); - - cmdret = ""; % Здесь будем накапливать весь вывод - - while true - if reader.ready() - line = char(reader.readLine()); - if isempty(line) - break; - end - cmdret = cmdret + string(line) + newline; % сохраняем вывод - % Здесь выводим только новую строку - safeLine = strrep(line, '''', ''''''); % Экранируем апострофы - logWindow_append(safeLine); - drawnow; % обновляем GUI - else - if ~process.isAlive() - % дочитываем оставшиеся строки - while reader.ready() - line = char(reader.readLine()); - if isempty(line) - break; - end - cmdret = cmdret + string(line) + newline; % сохраняем вывод - safeLine = strrep(line, '''', ''''''); - logWindow_append(safeLine); - drawnow; - end - break; - end - pause(0.2); - end - end - process.waitFor(); -end - - -function logWindow_append(line) - persistent fig hEdit jScrollPane jTextArea - - if isempty(fig) || ~isvalid(fig) - fig = figure('Name', 'Log Window', 'Position', [100 100 600 400]); - hEdit = uicontrol('Style', 'edit', ... - 'Max', 2, 'Min', 0, ... - 'Enable', 'on', ... % Включаем взаимодействие - 'FontName', 'Courier New', ... - 'Position', [10 10 580 380], ... - 'HorizontalAlignment', 'left', ... - 'BackgroundColor', 'white', ... - 'Tag', 'LogWindowFigure'); - - jScrollPane = findjobj(hEdit); % JScrollPane - jTextArea = jScrollPane.getViewport.getView; % JTextArea внутри JScrollPane - end - - oldText = get(hEdit, 'String'); - if ischar(oldText) - oldText = {oldText}; - end - - set(hEdit, 'String', [oldText; {line}]); - drawnow; - - % Автоскролл вниз: - jTextArea.setCaretPosition(jTextArea.getDocument.getLength); - drawnow; -end - - -function definesArg = buildDefinesString() +function definesWrapperArg = buildWrapperDefinesString() blockHandle = gcbh; % Получаем MaskValues и MaskNames @@ -189,30 +103,22 @@ function definesArg = buildDefinesString() paramNames = get_param(blockHandle, 'MaskNames'); % Индексы параметров - idxThreading = find(strcmp(paramNames, 'enableThreading')); - idxDeinit = find(strcmp(paramNames, 'enableDeinit')); idxCycles = find(strcmp(paramNames, 'threadCycles')); idxClk = find(strcmp(paramNames, 'mcuClk')); - if any([isempty(idxThreading), isempty(idxDeinit),isempty(idxCycles), isempty(idxClk)]) - error('Один или несколько параметров не найдены в маске'); - end - % Значения - ThreadingVal = maskValues{idxThreading}; - DeinitVal = maskValues{idxDeinit}; cyclesVal = maskValues{idxCycles}; clkMHz = str2double(maskValues{idxClk}); clkHz = round(clkMHz * 1e6); % Формируем defines в формате: -D"NAME=VALUE" - if strcmpi(ThreadingVal, 'on') + if read_checkbox('enableThreading') def1 = ['-D"RUN_APP_MAIN_FUNC_THREAD"']; else def1 = ['']; end - if strcmpi(DeinitVal, 'on') + if read_checkbox('enableDeinit') def2 = ['-D"DEINITIALIZE_AFTER_SIM"']; else def2 = ['']; @@ -221,9 +127,7 @@ function definesArg = buildDefinesString() def3 = ['-D"DEKSTOP_CYCLES_FOR_MCU_APP__EQ__' cyclesVal '"']; def4 = ['-D"MCU_CORE_CLOCK__EQ__' num2str(clkHz) '"']; - definesArg = strjoin({def1, def2, def3, def4}, ' '); - % definesArg = ['"' definesStr '']; - % definesArg = definesStr; + definesWrapperArg = strjoin({def1, def2, def3, def4}, ' '); end @@ -278,7 +182,7 @@ function definesUserArg = parseDefinesMaskText() end - +%% PARSE FUNCTIONS function out = parseCellString(str) str = strtrim(str); @@ -308,22 +212,94 @@ end -% % Компилирует S-function -% clear, clc, -% -% set = mex.getCompilerConfigurations('C', 'Selected'); -% -% Ts = 0.00001; -% -% delete("*.mexw64") -% delete("*.mexw64.pdb") -% delete(".\MCU_Wrapper\Outputs\*.*"); -% -% status=system('.\MCU_Wrapper\run_mex.bat debug'); -% -% if status==0 -% beep -% else -% error('Error!'); -% end -% +function checkbox_state = read_checkbox(checkboxName) + maskValues = get_param(gcbh, 'MaskValues'); + paramNames = get_param(gcbh, 'MaskNames'); + + inxCheckBox = find(strcmp(paramNames, checkboxName)); + + checkbox_state_str = maskValues{inxCheckBox}; + if strcmpi(checkbox_state_str, 'on') + checkbox_state = 1; + else + checkbox_state = 0; + end +end + + +%% CONSOLE FUNCTIONS + +function cmdret = runBatAndShowOutput(cmd) + import java.io.*; + import java.lang.*; + cmdEnglish = ['chcp 437 > nul && ' cmd]; + pb = java.lang.ProcessBuilder({'cmd.exe', '/c', cmdEnglish}); + pb.redirectErrorStream(true); + process = pb.start(); + + reader = BufferedReader(InputStreamReader(process.getInputStream())); + + cmdret = ""; % Здесь будем накапливать весь вывод + + while true + if reader.ready() + line = char(reader.readLine()); + if isempty(line) + break; + end + cmdret = cmdret + string(line) + newline; % сохраняем вывод + % Здесь выводим только новую строку + safeLine = strrep(line, '''', ''''''); % Экранируем апострофы + logWindow_append(safeLine); + drawnow; % обновляем GUI + else + if ~process.isAlive() + % дочитываем оставшиеся строки + while reader.ready() + line = char(reader.readLine()); + if isempty(line) + break; + end + cmdret = cmdret + string(line) + newline; % сохраняем вывод + safeLine = strrep(line, '''', ''''''); + logWindow_append(safeLine); + drawnow; + end + break; + end + pause(0.2); + end + end + process.waitFor(); +end + + +function logWindow_append(line) + persistent fig hEdit jScrollPane jTextArea + + if isempty(fig) || ~isvalid(fig) + fig = figure('Name', 'Log Window', 'Position', [100 100 600 400]); + hEdit = uicontrol('Style', 'edit', ... + 'Max', 2, 'Min', 0, ... + 'Enable', 'on', ... + 'FontName', 'Courier New', ... + 'Position', [10 10 580 380], ... + 'HorizontalAlignment', 'left', ... + 'BackgroundColor', 'white', ... + 'Tag', 'LogWindowFigure'); + + jScrollPane = findjobj(hEdit); % JScrollPane + jTextArea = jScrollPane.getViewport.getView; % JTextArea внутри JScrollPane + end + + oldText = get(hEdit, 'String'); + if ischar(oldText) + oldText = {oldText}; + end + + set(hEdit, 'String', [oldText; {line}]); + drawnow; + % Автоскролл вниз: + jTextArea.setCaretPosition(jTextArea.getDocument.getLength); + drawnow; +end diff --git a/periph_config.asv b/periph_config.asv index 5ec730c..2b420ab 100644 --- a/periph_config.asv +++ b/periph_config.asv @@ -1,7 +1,13 @@ { - "ADC1": { + "ADC": { "Defines": { - "ENABLE": { + "ADC1 Enable": { + "Def": "ADC1_ENABLE", + "Type": "checkbox", + "Default": true + }, + "ADC2 Enable": { + "Def": "ADC2_ENABLE", "Type": "checkbox", "Default": true }, @@ -11,15 +17,21 @@ } } }, - "USART1": { + "TIM": { "Defines": { - "ENABLE": { + "TIM1 Enable": { + "Def": "ADC1_ENABLE", "Type": "checkbox", - "Default": false + "Default": true }, - "BAUDRATE": { + "TIM2 Enable": { + "Def": "ADC2_ENABLE", + "Type": "checkbox", + "Default": true + }, + "AHB Buf Clock Rate": { "Type": "edit", - "Default": 115200 + "Default": 72 } } } diff --git a/periph_config.json b/periph_config.json index 5ec730c..8973e22 100644 --- a/periph_config.json +++ b/periph_config.json @@ -1,7 +1,13 @@ { - "ADC1": { + "ADC": { "Defines": { - "ENABLE": { + "ADC1 Enable": { + "Def": "ADC1_ENABLE", + "Type": "checkbox", + "Default": true + }, + "ADC2 Enable": { + "Def": "ADC2_ENABLE", "Type": "checkbox", "Default": true }, @@ -11,15 +17,21 @@ } } }, - "USART1": { + "TIM": { "Defines": { - "ENABLE": { + "TIM1 Enable": { + "Def": "ADC1_ENABLE", "Type": "checkbox", - "Default": false + "Default": true }, - "BAUDRATE": { + "TIM2 Enable": { + "Def": "ADC2_ENABLE", + "Type": "checkbox", + "Default": true + }, + "AHB Buf Clock Rate (MHz)": { "Type": "edit", - "Default": 115200 + "Default": 72 } } }