⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtmc9s12_resource_check.m

📁 simulink real-time workshop for dragon12 development board from
💻 M
📖 第 1 页 / 共 2 页
字号:
            % '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 + -