www.gusucode.com > ecoder 案例源码程序 matlab代码 > ecoder/PILCustomTargetExample.m
%% Configure Processor-In-The-Loop (PIL) for a Custom Target % Create a target connectivity configuration by % using target connectivity APIs. With a target connectivity % configuration, you can run PIL simulations on custom embedded hardware. % % You learn how to: % % * Adapt the build process to support PIL. % * Configure a tool for downloading and starting execution of a PIL % executable on your target hardware. % * Configure a communication channel between host and target to support % PIL simulation on the target. % % Start with a model configured for software-in-the-loop (SIL) simulation. % This example guides you through the process of creating a target % connectivity configuration so that you can simulate the model in % PIL mode. The example runs entirely on your host machine. You can follow % the same steps to create a connectivity configuration for your own % embedded target hardware. % % This example requires Embedded Coder(R). % % See also <docid:ecoder_examples.example-rtwdemo_sil_pil_script> and % <docid:ecoder_examples.bu5jike-1>. % Copyright 2008-2013 The MathWorks, Inc. %% Preliminaries % Later in this example, you will add a folder to the search path. Create % the folder path. sl_customization_path = fullfile(matlabroot,... 'toolbox',... 'rtw',... 'rtwdemos',... 'pil_demo'); %% % If this folder is already on the search path, remove it. if strfind(path,sl_customization_path) rmpath(sl_customization_path) end %% % Reset customizations. sl_refresh_customizations %% % Create a temporary folder (in your system's temporary folder) for the % build and inspection process. currentDir = pwd; rtwdemodir(); %% Test Generated Code with SIL Simulation % Simulate a model configured for SIL. Verify the generated code compiled % for your host platform by comparing the SIL simulation behavior % with the normal simulation behavior. % % Make sure that the example model is newly opened. close_system('rtwdemo_sil_modelblock',0); close_system('rtwdemo_sil_counter',0) open_system('rtwdemo_sil_modelblock') %% % The CounterA Model block displays the text (SIL), which indicates that % its referenced model is configured for SIL simulation. % % Run a simulation of the system. set_param('rtwdemo_sil_modelblock','StopTime','10'); sim('rtwdemo_sil_modelblock'); %% Target Connectivity Configuration % Start work on a target connectivity configuration for PIL. % % Make a local copy of the target connectivity configuration classes. src_dir = ... fullfile(matlabroot,'toolbox','coder','simulinkcoder','+coder','+mypil'); if exist(fullfile('.','+mypil'),'dir') rmdir('+mypil','s') end mkdir +mypil copyfile(fullfile(src_dir,'Launcher.m'), '+mypil'); copyfile(fullfile(src_dir,'TargetApplicationFramework.m'), '+mypil'); copyfile(fullfile(src_dir,'ConnectivityConfig.m'), '+mypil'); %% % Make the copied files writable. fileattrib(fullfile('+mypil', '*'),'+w'); %% % Update the package name to reflect the new location of the files. coder.mypil.Utils.UpdateClassName(... './+mypil/ConnectivityConfig.m',... 'coder.mypil',... 'mypil'); %% % Verify that you now have a folder +mypil in the current folder, which has % the files Launcher.m, TargetApplicationFramework.m, and % ConnectivityConfig.m. dir './+mypil' %% Review Code to Launch the PIL Executable % The class that configures a tool for launching the PIL executable is % mypil.Launcher. Open this class in the editor. edit(which('mypil.Launcher')) %% % Review the content of this file. The method setArgString supplies % additional command-line parameters to the executable. These % parameters can include a TCP/IP port number. For an embedded processor % implementation, you can choose to hard-code these settings. %% Configure the Overall Target Connectivity Configuration % View the class mypil.ConnectivityConfig. edit(which('mypil.ConnectivityConfig')) %% % Review the content of this file. You should be able to identify: % % * The creation of an instance of rtw.connectivity.RtIOStreamHostCommunicator % that configures the host side of the TCP/IP communications channel. % * A call to the setArgString method of Launcher that configures % the target side of the TCP/IP communications channel. % * A call to setTimer that configures a timer for execution time measurement % % To define your own target-specific timer for execution time profiling, % you must use the Code Replacement Library to specify a replacement for % the function code_profile_read_timer. Use a command-line API or % the crtool user interface. %% Review the Target-Side Communications Drivers % View the file rtiostream_tcpip.c. rtiostreamtcpip_dir=fullfile(matlabroot,'rtw','c','src','rtiostream',... 'rtiostreamtcpip'); edit(fullfile(rtiostreamtcpip_dir,'rtiostream_tcpip.c')) %% % Scroll down to the end of this file. See that this file contains a TCP/IP % implementation of the functions rtIOStreamOpen rtIOStreamSend, and % rtIOStreamRecv. These functions are required for the target platform to % communicate with the host machine. You must provide an implementation for % each of these functions that is specific to your target hardware and % communication channel. %% Add Target-Side Communications Drivers to the Connectivity Configuration % The class that configures additional files to include in the build is % mypil.TargetApplicationFramework. Open this class in the editor. edit(which('mypil.TargetApplicationFramework')) %% Use sl_customization to Register the Target Connectivity Configuration % To use the new target connectivity configuration, you must provide an % sl_customization file. The sl_customization file registers your new target % connectivity configuration and specifies the required conditions for its % use. The conditions specified in this file can include the name of your % system target file and your hardware implementation settings. % % You can view the sl_customization file. For this example, you do not have % to make changes to the file. edit(fullfile(sl_customization_path,'sl_customization.m')) %% % Add the sl_customization folder to the search path and refresh the % customizations. addpath(sl_customization_path); sl_refresh_customizations; %% Test Generated Code with PIL Simulation % Run the PIL simulation. close_system('rtwdemo_sil_modelblock',0) open_system('rtwdemo_sil_modelblock') set_param('rtwdemo_sil_modelblock/CounterA','SimulationMode','processor-in-the-loop (pil)'); set_param('rtwdemo_sil_modelblock','StopTime','10'); sim('rtwdemo_sil_modelblock'); %% % Review the preceding messages. Confirm that the simulation ran without % errors. You have now implemented a target connectivity configuration % for PIL. You can use the same APIs to implement a connectivity configuration % for your own combination of embedded processor, download tool, and % communications channel. %% Cleanup % Remove the search path for this example. rmpath(sl_customization_path) %% % Reset customizations. sl_refresh_customizations %% % Close the models. close_system('rtwdemo_sil_modelblock',0) close_system('rtwdemo_sil_counter',0) rtwdemoclean; cd(currentDir)