📄 rtmc9s12_resource_check.m
字号:
% 'HasRFComms' does not exist yet
kk = [kk ' -aRFCommsServerChannels=' num2str(myNumClients)]; % set macro 'RFCommsServerChannels'
end
else
% model does not include RFComms blocks
% set macro HAS_RFCOMMS to '0' (server)
m1 = findstr(kk, '-aHasRFComms=');
if(~isempty(m1))
% 'HasRFComms' already exists
m2 = m1 + min(findstr(kk(m1:end), '-a'));
if(~isempty(m2))
% entry not at the end -> set to new value and append remainder
kk2 = kk(m2:end);
kk = [kk(1:m1+12) '0 ' kk2];
else
% entry at the end -> set to new value
kk = [kk(1:m1+12) '0'];
end
else
% 'HasRFComms' does not exist yet
kk = [kk ' -aHasRFComms=0']; % set macro 'HAS_RFCOMMS'
end
end
% check timer periods
minTimerP = min(myTimerPeriods);
maxTimerP = max(myTimerPeriods);
if(minTimerP < 10/24e6)
% minimu period is too small
% (assuming this should be at least 10 steps at fCPU)
error(['Detected invalid timer period setting. The minimum period is ' num2str(minTimerP*1e9) ...
' ns. This value should be larger than ' num2str(10/24e6*1e9) ' ns.'])
end
if(floor(maxTimerP/minTimerP) > 65535)
% too large a difference between minimum and maximum period
error(['Detected invalid timer period setting. The minimum period is ' num2str(minTimerP) ...
' whereas the maximum period is ' num2str(maxTimerP) '. These values are too far apart (max/min > 65535)'])
end
% valid settings -> set timer base period
kk = get_param(gcs, 'RTWOptions');
m1 = findstr(kk, '-aTimerBasePeriod=');
if(~isempty(m1))
% 'TimerBasePeriod' already exists
m2 = m1 + min(findstr(kk(m1:end), '-a'));
if(~isempty(m2))
% entry not at the end -> set to new value and append remainder
kk2 = kk(m2:end);
kk = [kk(1:m1+17) num2str(maxTimerP) ' ' kk2]; % configure ECT unit to cover longest period
else
% entry at the end -> set to new value
kk = [kk(1:m1+17) num2str(maxTimerP)];
end
else
% 'TimerBasePeriod' does not exist yet
kk = [kk ' -aTimerBasePeriod=' num2str(maxTimerP)]; % configure ECT unit to cover longest period
end
% determine ECT resolution as required by the settings of this block
currPeriod = 65535/24e6;
myECTResolution = 1/24e6;
n = 1;
while((currPeriod < maxTimerP) & (n < 128))
n = n * 2;
myECTResolution = 1/24e6 * n;
currPeriod = myECTResolution * 65535;
end
% determine bitmask which defines the chosen prescaler value
myECTprescalerMask = log(n)/log(2);
% set timer prescale value
m1 = findstr(kk, '-aTimerPrescaler=');
if(~isempty(m1))
% 'TimerPrescaler' already exists
m2 = m1 + min(findstr(kk(m1:end), '-a'));
if(~isempty(m2))
% entry not at the end -> set to new value and append remainder
kk2 = kk(m2:end);
kk = [kk(1:m1+16) num2str(n) ' ' kk2];
else
% entry at the end -> set to new value
kk = [kk(1:m1+16) num2str(n)];
end
else
% 'TimerPrescaler' does not exist yet
kk = [kk ' -aTimerPrescaler=' num2str(n)]; % configure prescaler value of the ECT unit
end
% set timer prescale mask
m1 = findstr(kk, '-aTimerPrescalerMask=');
if(~isempty(m1))
% 'TimerPrescalerMask' already exists
m2 = m1 + min(findstr(kk(m1:end), '-a'));
if(~isempty(m2))
% entry not at the end -> set to new value and append remainder
kk2 = kk(m2:end);
kk = [kk(1:m1+20) num2str(myECTprescalerMask) ' ' kk2];
else
% entry at the end -> set to new value
kk = [kk(1:m1+20) num2str(myECTprescalerMask)];
end
else
% 'TimerPrescalerMask' does not exist yet
kk = [kk ' -aTimerPrescalerMask=' num2str(myECTprescalerMask)]; % configure prescaler mask of the ECT unit
end
% set macro HAS_TIMERBLOCKS
myHasTimers = '"0x00000000"';
myHasTimers(length(myHasTimers)-1 - myTimerChannels) = '0' + myTimerModes;
m1 = findstr(kk, '-aHasTimers=');
if(~isempty(m1))
% 'HasTimers' already exists
m2 = m1 + min(findstr(kk(m1+1:end), '-a'));
if(~isempty(m2))
% entry not at the end -> set to new value and append remainder
kk2 = kk(m2:end);
kk = [kk(1:m1+11) myHasTimers ' ' kk2];
else
% entry at the end -> set to new value
kk = [kk(1:m1+11) myHasTimers];
end
else
% 'HasTimers' does not exist yet -> append at the end
kk = [kk ' -aHasTimers=' myHasTimers];
end
set_param(gcs, 'RTWOptions', kk);
% save system
save_system(gcs);
else
% no timer blocks -> clear macro HAS_TIMERBLOCKS
kk = get_param(gcs, 'RTWOptions');
m1 = findstr(kk, '-aHasTimers=');
if(~isempty(m1))
% 'HasTimers' already exists
m2 = m1 + min(findstr(kk(m1+1:end), '-a'));
if(~isempty(m2))
% entry not at the end -> clear and append remainder
kk2 = kk(m2:end);
kk = [kk(1:m1+11) '"0x00000000" ' kk2];
else
% entry at the end -> clear
kk = [kk(1:m1+11) '"0x00000000"'];
end
else
% entry 'HasTimers' does not exist yet -> append at the end
kk = [kk ' -aHasTimers="0x00000000"'];
end
% check if there are RFComms blocks
if(~isempty(MC9S12RFCommsBlocks))
% set prescaler value to 128
n = 128;
% set timer period to maximum (3.4ish seconds)
maxTimerP = 65535/24e6*n;
% set timer period mask
myECTprescalerMask = log(n)/log(2);
% valid settings -> set timer base period
kk = get_param(gcs, 'RTWOptions');
m1 = findstr(kk, '-aTimerBasePeriod=');
if(~isempty(m1))
% 'TimerBasePeriod' already exists
m2 = m1 + min(findstr(kk(m1:end), '-a'));
if(~isempty(m2))
% entry not at the end -> set to new value and append remainder
kk2 = kk(m2:end);
kk = [kk(1:m1+17) num2str(maxTimerP) ' ' kk2]; % configure ECT unit to cover longest period
else
% entry at the end -> set to new value
kk = [kk(1:m1+17) num2str(maxTimerP)];
end
else
% 'TimerBasePeriod' does not exist yet
kk = [kk ' -aTimerBasePeriod=' num2str(maxTimerP)]; % configure ECT unit to cover longest period
end
% set timer prescale value
m1 = findstr(kk, '-aTimerPrescaler=');
if(~isempty(m1))
% 'TimerPrescaler' already exists
m2 = m1 + min(findstr(kk(m1:end), '-a'));
if(~isempty(m2))
% entry not at the end -> set to new value and append remainder
kk2 = kk(m2:end);
kk = [kk(1:m1+16) num2str(n) ' ' kk2];
else
% entry at the end -> set to new value
kk = [kk(1:m1+16) num2str(n)];
end
else
% 'TimerPrescaler' does not exist yet
kk = [kk ' -aTimerPrescaler=' num2str(n)]; % configure prescaler value of the ECT unit
end
% set timer prescale mask
m1 = findstr(kk, '-aTimerPrescalerMask=');
if(~isempty(m1))
% 'TimerPrescalerMask' already exists
m2 = m1 + min(findstr(kk(m1:end), '-a'));
if(~isempty(m2))
% entry not at the end -> set to new value and append remainder
kk2 = kk(m2:end);
kk = [kk(1:m1+20) num2str(myECTprescalerMask) ' ' kk2];
else
% entry at the end -> set to new value
kk = [kk(1:m1+20) num2str(myECTprescalerMask)];
end
else
% 'TimerPrescalerMask' does not exist yet
kk = [kk ' -aTimerPrescalerMask=' num2str(myECTprescalerMask)]; % configure prescaler mask of the ECT unit
end
% find RF block type (client / server / both)
HasServer = 0;
HasClient = 0;
for(i = 1:length(MC9S12RFCommsBlocks))
if(~isempty(findstr(MC9S12RFCommsBlocks{i}, 'rfComms_Server')))
HasServer = 1;
end
if(~isempty(findstr(MC9S12RFCommsBlocks{i}, 'rfComms_Client')))
HasClient = 1;
end
end
% 0: none 1: Server 2: Client 3: both
HasRFCommsBlocks = HasServer + 2*HasClient;
% set macro HAS_RFCOMMS to '1' (server)
m1 = findstr(kk, '-aHasRFComms=');
if(~isempty(m1))
% 'HasRFComms' already exists
m2 = m1 + min(findstr(kk(m1:end), '-a'));
if(~isempty(m2))
% entry not at the end -> set to new value and append remainder
kk2 = kk(m2:end);
kk = [kk(1:m1+12) num2str(HasRFCommsBlocks) ' ' kk2];
else
% entry at the end -> set to new value
kk = [kk(1:m1+12) num2str(HasRFCommsBlocks)];
end
else
% 'HasRFComms' does not exist yet
kk = [kk ' -aHasRFComms=' num2str(HasRFCommsBlocks)]; % set macro 'HAS_RFCOMMS'
end
% set macro CLIENT_COUNT (server) to the specified number of clients...
myClients = [];
for(i = 1:length(MC9S12RFCommsBlocks))
% check 'server' and 'client' blocks
if(~isempty(findstr(MC9S12RFCommsBlocks{i}, 'rfComms_Server')))
% model is 'server' -> get current settings
ll = get_param(MC9S12RFCommsBlocks{i}, 'RTWData');
myClients = [myClients str2num(ll.numClient)];
elseif(~isempty(findstr(MC9S12RFCommsBlocks{i}, 'rfComms_Client')))
% model is 'client' -> get current settings
ll = get_param(MC9S12RFCommsBlocks{i}, 'RTWData');
myClients = [myClients str2num(ll.ClientNum)];
end
end
myClients = unique(myClients);
myNumClients = length(myClients);
m1 = findstr(kk, '-aRFCommsServerChannels=');
if(~isempty(m1))
% 'HasRFComms' already exists
m2 = m1 + min(findstr(kk(m1:end), '-a'));
if(~isempty(m2))
% entry not at the end -> set to new value and append remainder
kk2 = kk(m2:end);
kk = [kk(1:m1+23) num2str(myNumClients) ' ' kk2];
else
% entry at the end -> set to new value
kk = [kk(1:m1+23) num2str(myNumClients)];
end
else
% 'HasRFComms' does not exist yet
kk = [kk ' -aRFCommsServerChannels=' num2str(myNumClients)]; % set macro 'RFCommsServerChannels'
end
else
% model does not include RFComms blocks
% set macro HAS_RFCOMMS to '0' (server)
m1 = findstr(kk, '-aHasRFComms=');
if(~isempty(m1))
% 'HasRFComms' already exists
m2 = m1 + min(findstr(kk(m1:end), '-a'));
if(~isempty(m2))
% entry not at the end -> set to new value and append remainder
kk2 = kk(m2:end);
kk = [kk(1:m1+12) '0 ' kk2];
else
% entry at the end -> set to new value
kk = [kk(1:m1+12) '0'];
end
else
% 'HasRFComms' does not exist yet
kk = [kk ' -aHasRFComms=0']; % set macro 'HAS_RFCOMMS'
end
end
set_param(gcs, 'RTWOptions', kk);
% save system
save_system(gcs);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -