Main Content

Improve Data Coherency in Generated Code

For models containing read and write operations for Data Store Memory blocks, you can generate code that contains a single variable to hold the value for each Data Store Read and Write operation. Generating one variable for each operation improves data access coherency.

Example Model

The data_store_latching model contains a single Data Store Memory block that is accessed by two different Data Store Memory Read and two Data Store Memory Write blocks. Two Sum blocks perform addition on the input generated by the Data Store Read blocks and output the data to the Data Store Write blocks.

Generate Code Without Parameter Enabled

Building the model with the Implement each data store block as a unique access point parameter turned off by default, generates this code:

void data_store_latching_step(void)
	{
	  /* DataStoreWrite: '<Root>/Data Store Write' incorporates:
	   *  DataStoreRead: '<Root>/Data Store Read'
	   *  Sum: '<Root>/Add'
	   */
	  data_store_latching_DW.A += data_store_latching_DW.A +
	    data_store_latching_DW.A;
	
	  /* DataStoreWrite: '<Root>/Data Store Write1' incorporates:
	   *  DataStoreRead: '<Root>/Data Store Read1'
	   *  Sum: '<Root>/Add1'
	   */
	  data_store_latching_DW.A += data_store_latching_DW.A +
	    data_store_latching_DW.A;
	}
For both data read and write operations, the code contains the global variable data_store_latching_DW.A.

Generate Code With Parameter Enabled

In the Configuration Parameters dialog box, on the Interface pane, select the Implement each data store block as a unique access point parameter. Click Apply.

The generated code is now:

void data_store_latching_step(void)
	{
	  real_T rtb_DataStoreRead;
	  real_T rtb_DataStoreRead1;
	
	  /* DataStoreRead: '<Root>/Data Store Read' */
	  rtb_DataStoreRead = data_store_latching_DW.A;
	
	  /* DataStoreWrite: '<Root>/Data Store Write' incorporates:
	   *  Sum: '<Root>/Add'
	   */
	  data_store_latching_DW.A = (rtb_DataStoreRead + rtb_DataStoreRead) +
	    rtb_DataStoreRead;
	
	  /* DataStoreRead: '<Root>/Data Store Read1' */
	  rtb_DataStoreRead1 = data_store_latching_DW.A;
	
	  /* DataStoreWrite: '<Root>/Data Store Write1' incorporates:
	   *  Sum: '<Root>/Add1'
	   */
	  data_store_latching_DW.A = (rtb_DataStoreRead1 + rtb_DataStoreRead1) +
	    rtb_DataStoreRead1;
	}
For each data store read operation, the code contains a variable. The variables are rtb_DataStoreRead and rtb_DataStoreRead1. These separate variables improve data access coherency.

Related Topics