coder.mapping.api.CodeMapping - Model data and function interface configuration for C code generation - MATLAB (original) (raw)
Use the programmatic interface to retrieve and use different types of code mappings objects of a Simulink model.
Load the model CoderMapAPI
.
codeMapModel = "CoderMapAPI"; load_system(codeMapModel);
Use the function coder.mapping.api.get
to retrieve and store the Simulink® Coder™ and the Embedded Coder® mapping objects of this model.
simCodeMapObj = coder.mapping.api.get(codeMapModel,"SimulinkCoderC"); eCodeMapObj = coder.mapping.api.get(codeMapModel,"EmbeddedCoderC");
Store all root-level input port names.
in_port_names = "in_port_"+(1:4)'
in_port_names = 4x1 string "in_port_1" "in_port_2" "in_port_3" "in_port_4"
For each of the code mapping objects, define an inline function that sets the storage class of the input ports. Use the arrayfun
function to set the storage class of all root-level input ports of the Simulink code mappings object to ImportedExtern
and set the storage class of the root-level input ports of the Embedded Coder mappings object to ImportedExternPointer
.
configSimCoderPortStoreClassFcn = @(port_name) setInport(simCodeMapObj,port_name,StorageClass="ImportedExtern"); configECoderPortStoreClassFcn = @(port_name) setInport(eCodeMapObj,port_name,StorageClass="ImportedExternPointer"); arrayfun(configSimCoderPortStoreClassFcn,in_port_names); arrayfun(configECoderPortStoreClassFcn,in_port_names);
For each of the code mapping objects, define an inline function that displays the storage class of the input ports.
dispSimCoderPortStoreClassFcn = @(port_name) disp(getInport(simCodeMapObj,port_name,"StorageClass")); dispECoderPortStoreClassFcn = @(port_name) disp(getInport(eCodeMapObj,port_name,"StorageClass"));
Display the storage class of the root-level input ports for each of the code mappings objects.
arrayfun(dispSimCoderPortStoreClassFcn,in_port_names);
ImportedExtern ImportedExtern ImportedExtern ImportedExtern
arrayfun(dispECoderPortStoreClassFcn,in_port_names);
ImportedExternPointer ImportedExternPointer ImportedExternPointer ImportedExternPointer
Root-level input ports with ImportedExtern
and ImportedExternPointer
storage classes are declared in the generated private header file of the model, in separate sections. Store the header file names of the two system target files so that you can observe these sections in both of header files.
priv_h_simcoder_file = fullfile(codeMapModel+"_grt_rtw",codeMapModel+"_private.h")
priv_h_simcoder_file = "CoderMapAPI_grt_rtw/CoderMapAPI_private.h"
priv_h_ecoder_file = fullfile(codeMapModel+"_ert_rtw",codeMapModel+"_private.h")
priv_h_ecoder_file = "CoderMapAPI_ert_rtw/CoderMapAPI_private.h"
Set the model target file to grt.tlc
and generate code from the model.
set_param(codeMapModel,SystemTargetFile="grt.tlc") evalc("slbuild(codeMapModel)");
These are the declarations of the root-level input ports in the grt.tlc
header file, priv_h_simcoder_file
:
/* Imported (extern) block signals / extern real_T in_port_1; / '/in_port_1' / extern real_T in_port_2; / '/in_port_2' / extern real_T in_port_3; / '/in_port_3' / extern real_T in_port_4; / '/in_port_4' */
The root-level input ports are declared in the ImportedExtern
section.
To open the header file, enter this command in the MATLAB® Command Window:
edit(priv_h_simcoder_file)
Now set the model target file to ert.tlc
and generate code from the model.
set_param(codeMapModel,SystemTargetFile="ert.tlc") evalc("slbuild(codeMapModel)");
These are the declarations of the root-level input ports in the ert.tlc
header file, priv_h_ecoder_file
:
/* Imported (extern) pointer block signals */ extern real_T in_port_1; / '/in_port_1' */ extern real_T in_port_2; / '/in_port_2' */ extern real_T in_port_3; / '/in_port_3' */ extern real_T in_port_4; / '/in_port_4' */
The root-level input ports in this header file are declared in the ImportedExternPointer
section.
To open the header file, enter this command in the MATLAB Command Window: