Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
49be34efc9 | ||
|
|
041322a62e | ||
|
|
1aa3c5b955 |
Binary file not shown.
@@ -74,7 +74,7 @@ classdef appWrap
|
|||||||
code = editCode.insertSection(code, section, newBody);
|
code = editCode.insertSection(code, section, newBody);
|
||||||
|
|
||||||
% Сохраняем изменения прямо из MATLAB без внешних редакторов
|
% Сохраняем изменения прямо из MATLAB без внешних редакторов
|
||||||
fid = fopen(filename, 'w', 'n');
|
fid = fopen(filename, 'w', 'n', 'UTF-8');
|
||||||
if fid == -1
|
if fid == -1
|
||||||
errordlg('Не удалось сохранить файл из MATLAB', 'Ошибка записи');
|
errordlg('Не удалось сохранить файл из MATLAB', 'Ошибка записи');
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ classdef compiler
|
|||||||
code = editCode.insertSection(code, Section, periphBat);
|
code = editCode.insertSection(code, Section, periphBat);
|
||||||
|
|
||||||
% Записываем обновленный BAT-файл
|
% Записываем обновленный BAT-файл
|
||||||
fid = fopen(batPath, 'w', 'n');
|
fid = fopen(batPath, 'w', 'n', 'UTF-8');
|
||||||
if fid == -1
|
if fid == -1
|
||||||
error('Не удалось открыть файл для записи');
|
error('Не удалось открыть файл для записи');
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ classdef configJs
|
|||||||
jsonText = jsonencode(config, 'PrettyPrint', true);
|
jsonText = jsonencode(config, 'PrettyPrint', true);
|
||||||
|
|
||||||
% Записываем JSON в файл
|
% Записываем JSON в файл
|
||||||
fid = fopen(config_path, 'w', 'n');
|
fid = fopen(config_path, 'w', 'n', 'UTF-8');
|
||||||
if fid == -1
|
if fid == -1
|
||||||
error('Не удалось открыть файл periph_config.json для записи.');
|
error('Не удалось открыть файл periph_config.json для записи.');
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ classdef mcuMask
|
|||||||
updatedText = regexprep(fileText, pattern, newLine);
|
updatedText = regexprep(fileText, pattern, newLine);
|
||||||
|
|
||||||
% Запись изменений обратно в файл
|
% Запись изменений обратно в файл
|
||||||
fid = fopen(cFilePath, 'w', 'n');
|
fid = fopen(cFilePath, 'w', 'n', 'UTF-8');
|
||||||
if fid == -1
|
if fid == -1
|
||||||
error('Не удалось открыть файл для записи.');
|
error('Не удалось открыть файл для записи.');
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ classdef mcuPorts
|
|||||||
code = editCode.insertSection(code, '// INPUT/OUTPUTS AUTO-PARAMS', headerText.AUTO_PARAMS);
|
code = editCode.insertSection(code, '// INPUT/OUTPUTS AUTO-PARAMS', headerText.AUTO_PARAMS);
|
||||||
|
|
||||||
% Записываем обновленный заголовочный файл
|
% Записываем обновленный заголовочный файл
|
||||||
fid = fopen(hPath, 'w', 'n');
|
fid = fopen(hPath, 'w', 'n', 'UTF-8');
|
||||||
if fid == -1
|
if fid == -1
|
||||||
error('Не удалось открыть файл для записи');
|
error('Не удалось открыть файл для записи');
|
||||||
end
|
end
|
||||||
@@ -57,7 +57,7 @@ classdef mcuPorts
|
|||||||
code = editCode.insertSection(cCode, '// INPUT/OUTPUTS AUTO-PARAMS', cText);
|
code = editCode.insertSection(cCode, '// INPUT/OUTPUTS AUTO-PARAMS', cText);
|
||||||
|
|
||||||
% Записываем обновленный файл реализации
|
% Записываем обновленный файл реализации
|
||||||
fid = fopen(cPath, 'w', 'n');
|
fid = fopen(cPath, 'w', 'n', 'UTF-8');
|
||||||
if fid == -1
|
if fid == -1
|
||||||
error('Не удалось открыть файл для записи');
|
error('Не удалось открыть файл для записи');
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
@@ -542,7 +541,7 @@ classdef periphConfig
|
|||||||
code = editCode.insertSection(code, '// PERIPH DEINIT', deinitFuncsText);
|
code = editCode.insertSection(code, '// PERIPH DEINIT', deinitFuncsText);
|
||||||
|
|
||||||
% Записываем обновленный файл
|
% Записываем обновленный файл
|
||||||
fid = fopen(wrapPath, 'w', 'n');
|
fid = fopen(wrapPath, 'w', 'n', 'UTF-8');
|
||||||
if fid == -1
|
if fid == -1
|
||||||
error('Не удалось открыть файл для записи');
|
error('Не удалось открыть файл для записи');
|
||||||
end
|
end
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -100,12 +100,14 @@
|
|||||||
</build-deliverables>
|
</build-deliverables>
|
||||||
<workflow />
|
<workflow />
|
||||||
<matlab>
|
<matlab>
|
||||||
<root>C:\Program Files\MATLAB\R2021b</root>
|
<root>C:\Program Files\MATLAB\R2023a</root>
|
||||||
<toolboxes>
|
<toolboxes>
|
||||||
<toolbox name="matlabcoder" />
|
<toolbox name="matlabcoder" />
|
||||||
<toolbox name="embeddedcoder" />
|
<toolbox name="embeddedcoder" />
|
||||||
<toolbox name="gpucoder" />
|
<toolbox name="gpucoder" />
|
||||||
<toolbox name="fixedpoint" />
|
<toolbox name="fixedpoint" />
|
||||||
|
<toolbox name="matlabhdlcoder" />
|
||||||
|
<toolbox name="neuralnetwork" />
|
||||||
</toolboxes>
|
</toolboxes>
|
||||||
<toolbox>
|
<toolbox>
|
||||||
<matlabcoder>
|
<matlabcoder>
|
||||||
@@ -127,6 +129,16 @@
|
|||||||
<enabled>true</enabled>
|
<enabled>true</enabled>
|
||||||
</fixedpoint>
|
</fixedpoint>
|
||||||
</toolbox>
|
</toolbox>
|
||||||
|
<toolbox>
|
||||||
|
<matlabhdlcoder>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</matlabhdlcoder>
|
||||||
|
</toolbox>
|
||||||
|
<toolbox>
|
||||||
|
<neuralnetwork>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</neuralnetwork>
|
||||||
|
</toolbox>
|
||||||
</matlab>
|
</matlab>
|
||||||
<platform>
|
<platform>
|
||||||
<unix>false</unix>
|
<unix>false</unix>
|
||||||
|
|||||||
Reference in New Issue
Block a user