www.gusucode.com > ecoder 案例源码程序 matlab代码 > ecoder/SingleCoreSingleTaskingPlatformExecutionExample.m
%% Model Single-Core, Single-Tasking Platform Execution % This example shows a model designed and configured for embedded system % code generation intended to execute on a single-core, single-tasking % platform. The application algorithm is captured in a single model hierarchy, % making it possible to use Simulink(R) time-based, single-task scheduling % to simulate the model and execute the generated code. % % Copyright 2010-2015 The MathWorks, Inc. %% Periodic Multirate Model Set Up for Single-Tasking Execution % % Open the example model |rtwdemo_multirate_singletasking|. 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_singletasking_with_legend.png>> % % * Sample times for Inport blocks |In1_1s| and |In2_2s| are set to 1 and 2 % seconds, respectively. % * To provide clean partitioning of rates, sample times for subsystems % |SS1| and |SS2| are set to 1. %% 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* cleared. % %% Scheduling % % Simulink(R) simulates the model based on the model configuration. Code % generated from the model implements the same execution semantics. Simulink % propagates and uses the Inport block sample times to order block execution % based on a single-core, single-tasking 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. % % 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 running at the % different rates. % % Benefits of implicit rate grouping: % % * Simulink does not impose architectural constraints on 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 single-tasking % execution semantics. % % Your execution framework can communicate 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 % function |rtwdemo_multirate_singletasking_step|. Use this file as a % starting point for coding your execution framework. % * |rtwdemo_multirate_singletasking.c| contains entry points for the code % that implements the model algorithm. This file includes the rate scheduling % code. % * |rtwdemo_multirate_singletasking.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_singletasking_initialize(void)|. At startup, call % this function once. % * Output and update entry-point (step) function, |void rtwdemo_multirate_singletasking_step(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 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.bumxnhi> % * <docid:ecoder_ug.br54_tp> % * <docid:ecoder_ug.f6010dfi4>