Улучшение когерентности данных в сгенерированном коде

Для моделей, содержащих операции чтения и записи для блоков памяти хранилища данных, можно сгенерировать код, который содержит одну переменную, чтобы удерживать значение для каждой операции чтения и записи хранилища данных. Сгенерирование одной переменной для каждой операции улучшает когерентность доступа к данным.

Пример модели

The data_store_latching модель содержит один блок Данных Store Памяти, к которому обращаются два различных блока Данных Store Памяти Read и два блока Данных Store Памяти Write. Два блока Sum выполняют сложение входных входов, сгенерированных блоками Data Store Read, и выводят данные в блоки Data Store Write.

Сгенерируйте код без включенного параметра

Построение модели с параметром Implement each data store block as a unique access point, отключенным по умолчанию, генерирует этот код:

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;
	}
Для операций чтения и записи данных код содержит глобальную переменную data_store_latching_DW.A.

Сгенерируйте код с включенным параметром

В диалоговом окне Параметров конфигурации на панели Interface выберите Реализуйте каждый блок хранилища данных как уникальный параметр точки доступа. Нажмите Apply.

Сгенерированный код теперь:

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;
	}
Для каждой операции чтения хранилища данных код содержит переменную. Переменные rtb_DataStoreRead и rtb_DataStoreRead1. Эти отдельные переменные улучшают когерентность доступа к данным.

Похожие темы