перенести работу с конфигом в отдельную папку и реализовать конфиг для всего симулятора. Чтобы можно было легко переносить настройки оболочки
140 lines
5.1 KiB
Matlab
140 lines
5.1 KiB
Matlab
classdef compiler
|
||
methods(Static)
|
||
|
||
function compile()
|
||
addpath(mcuPath.get('wrapperPath'));
|
||
mexing(1);
|
||
end
|
||
|
||
function get_availbe()
|
||
addpath(mcuPath.get('wrapperPath'));
|
||
mexing(1);
|
||
end
|
||
|
||
function choose()
|
||
addpath(mcuPath.get('wrapperPath'));
|
||
mexing(1);
|
||
end
|
||
|
||
|
||
|
||
function updateRunBat()
|
||
sources = {
|
||
'MCU.c'
|
||
'mcu_wrapper.c'
|
||
};
|
||
% Список заголовочных файлов (.h)
|
||
includes = { '.\'
|
||
};
|
||
wrapperPath = mcuPath.get('wrapperPath');
|
||
% [wrapperPath, ~, ~] = fileparts(wrapperPath);
|
||
% Формируем строки
|
||
wrapperSrcText = compiler.createSourcesBat('code_WRAPPER', sources, wrapperPath);
|
||
wrapperIncText = compiler.createIncludesBat('includes_WRAPPER', includes, wrapperPath);
|
||
|
||
% Записываем результат
|
||
res = compiler.updateRunMexBat(wrapperSrcText, wrapperIncText, ':: WRAPPER BAT'); % Всё прошло успешно
|
||
|
||
if res == 0
|
||
return
|
||
end
|
||
|
||
sources = {
|
||
'app_wrapper.c'
|
||
'app_init.c'
|
||
'app_io.c'
|
||
};
|
||
% Список заголовочных файлов (.h)
|
||
includes = { '.\'
|
||
};
|
||
periphPath = mcuPath.get('appWrapperPath');
|
||
% Формируем строки
|
||
wrapperSrcText = compiler.createSourcesBat('code_APP_WRAPPER', sources, periphPath);
|
||
wrapperIncText = compiler.createIncludesBat('includes_APP_WRAPPER', includes, periphPath);
|
||
|
||
% Записываем результат
|
||
res = compiler.updateRunMexBat(wrapperSrcText, wrapperIncText, ':: APP WRAPPER BAT'); % Всё прошло успешно
|
||
|
||
periphConfig.updatePeriphRunMexBat();
|
||
end
|
||
|
||
|
||
function res = updateRunMexBat(srcText, incText, Section)
|
||
% Входные параметры:
|
||
% srcText - текст для записи set code_...
|
||
% incText - текст для записи set includes_...
|
||
%
|
||
% Возвращает:
|
||
% res - 0 при успехе, 1 при ошибке
|
||
periphBat = [srcText '\n\n' incText];
|
||
batPath = fullfile(mcuPath.get('wrapperPath'), 'run_mex.bat');
|
||
res = 1;
|
||
try
|
||
code = fileread(batPath);
|
||
code = regexprep(code, '\r\n?', '\n');
|
||
|
||
% Записываем строки srcText и incText с переносами строк
|
||
code = editCode.insertSection(code, Section, periphBat);
|
||
|
||
fid = fopen(batPath, 'w', 'n', 'UTF-8');
|
||
if fid == -1
|
||
error('Не удалось открыть файл для записи');
|
||
end
|
||
fwrite(fid, code);
|
||
fclose(fid);
|
||
res = 1;
|
||
catch ME
|
||
mcuMask.disp(0, '\nОшибка: неудачная запись в файл при записи файла: %s', ME.message);
|
||
end
|
||
end
|
||
|
||
function srcText = createSourcesBat(prefix_name, sources, path)
|
||
srcList = {};
|
||
if nargin >= 2 && iscell(sources)
|
||
for i = 1:numel(sources)
|
||
fullPath = fullfile(path, sources{i});
|
||
srcList{end+1} = strrep(fullPath, '\', '\\');
|
||
end
|
||
end
|
||
|
||
% Формируем srcText с переносами строк и ^
|
||
srcText = '';
|
||
for i = 1:numel(srcList)
|
||
if i < numel(srcList)
|
||
srcText = [srcText srcList{i} '^' newline ' '];
|
||
else
|
||
srcText = [srcText srcList{i}];
|
||
end
|
||
end
|
||
|
||
% Добавляем префикс
|
||
srcText = ['set ' prefix_name '=' srcText];
|
||
end
|
||
|
||
function incText = createIncludesBat(prefix_name, includes, path)
|
||
incList = {};
|
||
if nargin >= 2 && iscell(includes)
|
||
for i = 1:numel(includes)
|
||
fullPath = fullfile(path, includes{i});
|
||
incList{end+1} = ['-I"' strrep(fullPath, '\', '\\') '"'];
|
||
end
|
||
end
|
||
|
||
% Формируем incText с переносами строк и ^
|
||
incText = '';
|
||
for i = 1:numel(incList)
|
||
if i == 1 && numel(incList) ~= 1
|
||
incText = [incText incList{i} '^' newline];
|
||
elseif i < numel(incList)
|
||
incText = [incText ' ' incList{i} '^' newline];
|
||
else
|
||
incText = [incText ' ' incList{i}];
|
||
end
|
||
end
|
||
|
||
% Добавляем префикс
|
||
incText = ['set ' prefix_name '=' incText];
|
||
end
|
||
|
||
end
|
||
end |