www.gusucode.com > ecoder 案例源码程序 matlab代码 > ecoder/SingleCoreMultitaskingPlatformExecutionExample.m

    %% Model Single-Core, Multitasking Platform Execution
% Use Simulink(R) time-based, multitask scheduling to simulate and generate
% code for an application algorithm captured in a single model hierarchy.
% The the model is designed and configured for an an embedded system 
% intended to execute on a single-core, multitasking platform. The model
% model simulates and the generated code executes based on the model 
% configuration and a rate monotonic scheduling algorithm. 
%
%   Copyright 2010-2015 The MathWorks, Inc.
%% Periodic Multirate Model Set Up for Multitasking Execution
% 
% Open the example model |rtwdemo_multirate_multitasking|. The model is 
% configured to display color-coded sample times with annotations. To see them,
% after opening the model, update the diagram by pressing *Ctrl+D*.  
% To display the legend, press *Ctrl+J*.
%
% <<../rtwdemo_multirate_multitasking_with_legend.png>>
%
% * Sample times for Inport blocks |In1_1s| and |In2_2s| are set to 1 and 2
% seconds, respectively. 
% * To provide a clear partitioning of rates, sample times for subsystems 
% |SS1| and |SS2| are set to 1. 
% * The Rate Transition block models an explicit rate transition.
% Alternatively, instruct Simulink to insert Rate Transition blocks for you
% by selecting model configuration parameter *Solver > Automatically handle rate
% transition for data transfer*.

%% Relevant Model Configuration Parameter Settings
%
% * *Solver > Type* set to |Fixed-step|.
% * *Solver > Solver* set to |discrete (no continuous states)|.
% * *Solver > Treat each discrete rate as a separate task* selected.
%
%% Scheduling
%
% Simulink(R) simulates the model based on the model configuration. Code
% that this model generates implements the same execution semantics. Simulink
% propagates and uses the Inport block sample times to order block execution
% based on a single-core, multitasking execution platform.  
%
% For this model, the sample time legend shows an implicit rate grouping. 
% Red represents the fastest discrete rate. Green represents the second fastest 
% discrete rate. Yellow represents the mixture of the two rates.
%
% The generated code schedules subrates in the model. In this 
% example, the rate for Inport block |In2_2s|, the green rate, is a subrate. 
% The generated code properly transfers data between tasks that run at the 
% different rates.
%
% Benefits of implicit rate grouping:
%
% * Simulink does not impose architectural constraints on the model. 
% Create a model without imposing software architecture constraints within 
% the model.
% * Your execution framework does not require details about underlying 
% function scheduling and data transfers between rates. Therefore, the model 
% interface requirements are simplified. The execution framework uses  
% generated interface code to write input, call the model step function, and 
% read output.
% * The code generator optimizes code across rates based on multitasking 
% execution semantics.
%
% Simulink enforces data transfer constraints to achieve rate monotonic 
% scheduling:
%
% * Data transfers occur between a single read task and a single write
% task.
% * When data transfers between two tasks, only one task can preempt the 
% other task.
% * For periodic tasks, a task with a faster rate has a higher priority 
% than a task with a slower rate. In addition, a task with the faster 
% rate, preempts a task with a slower rate.
% * Tasks run on a single processor. 
% * Time slicing, use of a defined time period during which a task
% can run in a preemptive multitasking system, is not allowed.
% * Processes do not crash or restart, especially during data transfers
% between tasks.
% * Read and write operations on byte-sized variables are atomic.
%
% Your execution framework communicates with external devices for reading 
% and writing model input. For example, model external devices by using 
% Simulink S-Function blocks. Generate code for those blocks with 
% the rest of the algorithm. 
%
%% Generate Code and Report
%
% Generate code and a code generation report. The example model generates 
% a report.
%
%% Review Generated Code
%
% From the code generation report, review the generated code.
%
% * |ert_main.c| is an example main program (execution framework) for the 
% model. This code controls model code execution by calling the entry-point
% functions |rtwdemo_multirate_multitasking_step0| and 
% |rtwdemo_multirate_multitasking_step1|. Use this file as a
% starting point for coding your execution framework.
% * |rtwdemo_multirate_multitasking.c| contains entry points for the code
% that implements the model algorithm. This file includes the rate scheduling 
% code.
% * |rtwdemo_multirate_multitasking.h| declares model data structures and
% a public interface to the model entry points and data structures.
% * |rtwtypes.h| defines data types, structures, and macros that the
% generated code requires.
%
%% Code Interface
%
% Open and review the Code Interface Report. Use the information in that report
% to write the interface code for your execution framework:
% 
% # Include the generated header file by adding directive 
% |#include rtwdemo_multirate_singletasking.h|.
% # Write input data to the generated code for model Inport blocks.
% # Call the generated entry-point functions.
% # Read data from the generated code for model Outport blocks.
%
% Input ports:
%
% * |rtU.In1_1s| of data type |real_T| with dimension of 1
% * |rtU.In2_2s| of data type |real_T| with dimension of 1
%
% Entry-point functions:
% 
% * Initialization entry-point function,
% |void rtwdemo_multirate_multitasking_initialize(void)|. At startup, call 
% this function once.
% * Output and update entry-point (step) function, |void rtwdemo_multirate_multitasking_step0(void)|.  
% Call this function periodically at the fastest rate in the model. For this 
% model, call the function every second. To achieve real-time execution, attach 
% this function to a timer.
% * Output and update entry-point function, |void rtwdemo_multirate_multitasking_step1(void)|.  
% Call this function periodically at the second fastest rate in the model. For this 
% model, call the function every two seconds. To achieve real-time execution, attach 
% this function to a timer.
%
% Output ports:
%
% * |rtY.Out1| of data type |real_T| with dimension of 1
% * |rtY.Out2| of data type |real_T| with dimension of 1
%
%% More About
%
% * <docid:rtw_ug.bumxn1_>
% * <docid:ecoder_ug.br54_tp>
% * <docid:ecoder_ug.f6010dfi4>